From 9e508de69a7cefd75909b4e80d6924f3d599cf5b Mon Sep 17 00:00:00 2001 From: dcodeIO Date: Sat, 14 Jul 2018 04:00:04 +0200 Subject: [PATCH] Implement object literal parsing; Instantiate classes from object literals Essentially, if the contextual type is a class with a constructor that takes zero arguments or doesn't have a constructor at all, an object literal can be used to initialize a new instance of that class with preset values. --- .gitattributes | 2 +- dist/assemblyscript.js | 2 +- dist/assemblyscript.js.map | 2 +- src/ast.ts | 22 ++ src/common.ts | 6 +- src/compiler.ts | 88 ++++- src/diagnosticMessages.generated.ts | 6 + src/diagnosticMessages.json | 3 + src/extra/ast.ts | 43 ++- src/parser.ts | 45 +++ tests/compiler/object-literal.optimized.wat | 326 +++++++++++++++++ tests/compiler/object-literal.ts | 26 ++ tests/compiler/object-literal.untouched.wat | 369 ++++++++++++++++++++ tests/parser/object-literal.ts | 9 + tests/parser/object-literal.ts.fixture.ts | 9 + 15 files changed, 946 insertions(+), 12 deletions(-) create mode 100644 tests/compiler/object-literal.optimized.wat create mode 100644 tests/compiler/object-literal.ts create mode 100644 tests/compiler/object-literal.untouched.wat create mode 100644 tests/parser/object-literal.ts create mode 100644 tests/parser/object-literal.ts.fixture.ts diff --git a/.gitattributes b/.gitattributes index a6c1dfc3..174a3221 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,3 @@ bin/* text eol=lf -dist/* -diff +dist/* binary scripts/*.sh eol=lf diff --git a/dist/assemblyscript.js b/dist/assemblyscript.js index 7e58f0d1..710f4836 100644 --- a/dist/assemblyscript.js +++ b/dist/assemblyscript.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("binaryen")):"function"==typeof define&&define.amd?define(["binaryen"],t):"object"==typeof exports?exports.assemblyscript=t(require("binaryen")):e.assemblyscript=t(e.binaryen)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{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=29)}([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.BUILTIN=2097152]="BUILTIN",e[e.COMPILED=4194304]="COMPILED",e[e.INLINED=8388608]="INLINED",e[e.SCOPED=16777216]="SCOPED",e[e.TRAMPOLINE=33554432]="TRAMPOLINE",e[e.VIRTUAL=67108864]="VIRTUAL",e[e.MAIN=134217728]="MAIN"}(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(9),a=r(3),s=r(9);function o(e){switch(e){case n.INFO:return"INFO";case n.WARNING:return"WARNING";case n.ERROR:return"ERROR";default:return assert(!1),""}}function c(e){switch(e){case n.INFO:return t.COLOR_BLUE;case n.WARNING:return t.COLOR_YELLOW;case n.ERROR:return t.COLOR_RED;default:return assert(!1),""}}t.DiagnosticCode=s.DiagnosticCode,t.diagnosticCodeToString=s.diagnosticCodeToString,function(e){e[e.INFO=0]="INFO",e[e.WARNING=1]="WARNING",e[e.ERROR=2]="ERROR"}(n=t.DiagnosticCategory||(t.DiagnosticCategory={})),t.diagnosticCategoryToString=o,t.COLOR_BLUE="",t.COLOR_YELLOW="",t.COLOR_RED="",t.COLOR_RESET="",t.diagnosticCategoryToColor=c;var p=function(){function e(e,t,r){this.range=null,this.code=e,this.category=t,this.message=r}return e.create=function(t,r,n,a,s){void 0===n&&(n=null),void 0===a&&(a=null),void 0===s&&(s=null);var o=i.diagnosticCodeToString(t);return null!=n&&(o=o.replace("{0}",n)),null!=a&&(o=o.replace("{1}",a)),null!=s&&(o=o.replace("{2}",s)),new e(t,r,o)},e.createInfo=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.INFO,r,i)},e.createWarning=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.WARNING,r,i)},e.createError=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.ERROR,r,i)},e.prototype.withRange=function(e){return this.range=e,this},e.prototype.toString=function(){return this.range?o(this.category)+" "+this.code.toString(10)+': "'+this.message+'" in '+this.range.source.normalizedPath+":"+this.range.line.toString(10)+":"+this.range.column.toString(10):o(this.category)+" "+this.code.toString(10)+": "+this.message},e}();function l(e,r){void 0===r&&(r=!1);for(var n=e.source.text,i=n.length,s=e.start,o=e.end;s>0&&!a.isLineBreak(n.charCodeAt(s-1));)s--;for(;o=0?c.substring(p+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=j;var Z=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=ke(this,!0)),this.cachedProgramLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"fileLevelInternalName",{get:function(){return this.cachedFileLevelInternalName||(this.cachedFileLevelInternalName=ke(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}(q);t.DeclarationStatement=Z;var $=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t}(Z);t.VariableLikeDeclarationStatement=$;var J=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BLOCK,t}return n(t,e),t}(q);t.BlockStatement=J;var ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BREAK,t}return n(t,e),t}(q);t.BreakStatement=ee;var te=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}(Z);t.ClassDeclaration=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CONTINUE,t}return n(t,e),t}(q);t.ContinueStatement=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.DO,t}return n(t,e),t}(q);t.DoStatement=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EMPTY,t}return n(t,e),t}(q);t.EmptyStatement=ie;var ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMDECLARATION,t}return n(t,e),t}(Z);t.EnumDeclaration=ae;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMVALUEDECLARATION,t}return n(t,e),t}(Z);t.EnumValueDeclaration=se;var oe=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=oe;var ce=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=ce;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}(q);t.ExportStatement=pe;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPRESSION,t}return n(t,e),t}(q);t.ExpressionStatement=le;var ue=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=ue;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FOR,t}return n(t,e),t}(q);t.ForStatement=he;var de=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}(Z);t.FunctionDeclaration=de;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return n(t,e),t}(q);t.IfStatement=_e;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORTDECLARATION,t}return n(t,e),t}(Z);t.ImportDeclaration=me;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}(q);t.ImportStatement=ye;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return n(t,e),t}(te);t.InterfaceDeclaration=ge;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return n(t,e),t}(de);t.MethodDeclaration=Ee;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}(Z);t.NamespaceDeclaration=Te;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return n(t,e),t}(q);t.ReturnStatement=fe;var Ie=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=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCH,t}return n(t,e),t}(q);t.SwitchStatement=ve;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.THROW,t}return n(t,e),t}(q);t.ThrowStatement=Ae;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TRY,t}return n(t,e),t}(q);t.TryStatement=Ce;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return n(t,e),t}(Z);t.TypeDeclaration=Ne;var Oe=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=Oe;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return n(t,e),t}(q);t.VariableStatement=Se;var Le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VOID,t}return n(t,e),t}(q);t.VoidStatement=Le;var be=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return n(t,e),t}(q);function ke(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?ke(n,t)+(e.is(i.CommonFlags.STATIC)?i.STATIC_DELIMITER:i.INSTANCE_DELIMITER)+r:n.kind==s.NAMESPACEDECLARATION||n.kind==s.ENUMDECLARATION?ke(n,t)+i.STATIC_DELIMITER+r:t?r:e.range.source.internalPath+i.PATH_DELIMITER+r:r}function Re(e){return e.endsWith(".ts")&&(e=e.substring(0,e.length-3)),e}function xe(e,t){for(var r=0,n=e.length;r=0;--s)free_memory(a[s])}},e.prototype.createCall=function(e,t,r){var n=h(e),i=u(t);try{return _BinaryenCall(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallImport=function(e,t,r){var n=h(e),i=u(t);try{return _BinaryenCallImport(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallIndirect=function(e,t,r){var n=u(t),i=h(r);try{return _BinaryenCallIndirect(this.ref,e,n,t&&t.length||0,i)}finally{free_memory(i),free_memory(n)}},e.prototype.createUnreachable=function(){return _BinaryenUnreachable(this.ref)},e.prototype.addGlobal=function(e,t,r,n){var i=h(e);try{return _BinaryenAddGlobal(this.ref,i,t,r?1:0,n)}finally{free_memory(i)}},e.prototype.addFunction=function(e,t,r,n){var i=h(e),a=l(r);try{return _BinaryenAddFunction(this.ref,i,t,a,r?r.length:0,n)}finally{free_memory(a),free_memory(i)}},e.prototype.removeFunction=function(e){var t=h(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{free_memory(t)}},e.prototype.addTemporaryFunction=function(e,t,r){this.hasTemporaryFunction=assert(!this.hasTemporaryFunction);var n=this.cachedTemporaryName;n||(this.cachedTemporaryName=n=h(""));var i=l(t);try{var a=_BinaryenAddFunctionType(this.ref,n,e,i,t?t.length:0);return _BinaryenAddFunction(this.ref,n,a,0,0,r)}finally{free_memory(i)}},e.prototype.removeTemporaryFunction=function(){this.hasTemporaryFunction=!assert(this.hasTemporaryFunction);var e=assert(this.cachedTemporaryName);_BinaryenRemoveFunction(this.ref,e),_BinaryenRemoveFunctionType(this.ref,e)},e.prototype.addFunctionExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addTableExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addMemoryExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addGlobalExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.removeExport=function(e){var t=h(e);try{_BinaryenRemoveExport(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=h(e),a=h(t),s=h(r);try{return _BinaryenAddFunctionImport(this.ref,i,a,s,n)}finally{free_memory(s),free_memory(a),free_memory(i)}},e.prototype.addTableImport=function(e,t,r){var n=h(e),i=h(t),a=h(r);try{return _BinaryenAddTableImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addMemoryImport=function(e,t,r){var n=h(e),i=h(t),a=h(r);try{return _BinaryenAddMemoryImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addGlobalImport=function(e,t,r,n){var i=h(e),a=h(t),s=h(r);try{return _BinaryenAddGlobalImport(this.ref,i,a,s,n)}finally{free_memory(s),free_memory(a),free_memory(i)}},e.prototype.removeImport=function(e){var t=h(e);try{_BinaryenRemoveImport(this.ref,t)}finally{free_memory(t)}},e.prototype.setMemory=function(e,t,r,n,i){void 0===i&&(i=null);for(var s=h(i),o=r.length,c=new Array(o),u=new Array(o),d=new Array(o),_=0;_=0;--_)free_memory(c[_]);free_memory(s)}},e.prototype.setFunctionTable=function(e){var t=u(e);try{_BinaryenSetFunctionTable(this.ref,t,e.length)}finally{free_memory(t)}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.setShrinkLevel=function(e){void 0===e&&(e=1),_BinaryenSetShrinkLevel(e)},e.prototype.setDebugInfo=function(e){void 0===e&&(e=!1),_BinaryenSetDebugInfo(e)},e.prototype.optimize=function(e){void 0===e&&(e=0),e?_BinaryenFunctionOptimize(e,this.ref):_BinaryenModuleOptimize(this.ref)},e.prototype.runPasses=function(e,t){void 0===t&&(t=0);for(var r=e.length,n=new Array(r),i=0;i=0;--i)free_memory(n[i])}},e.prototype.precomputeFunction=function(e){var t=this.cachedPrecomputeNames;if(!t){var r=h("precompute");this.cachedPrecomputeName=r,this.cachedPrecomputeNames=t=l([r])}_BinaryenFunctionRunPasses(e,this.ref,t,1)},e.prototype.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.cachedByValue,r=h(e),n=0,i=0;try{_BinaryenModuleAllocateAndWrite(t,this.ref,r),n=d(t);var a=d(t+4);i=d(t+8);var s=new m;return s.output=function(e,t){for(var r=new Uint8Array(t),n=0;n>8&255),store(r+2,a>>16&255),store(r+3,a>>>24),r+=4}return t}function u(e){return l(e)}function h(e){if(null==e)return 0;for(var t=allocate_memory(function(e){for(var t=0,r=0,n=e.length;r=55296&&i<=57343&&r+1=55296&&a<=57343&&n+1>>6),store(r++,128|63&a)):a<=65535?(store(r++,224|a>>>12),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=2097151?(store(r++,240|a>>>18),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=67108863?(store(r++,248|a>>>24),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):(store(r++,252|a>>>30),store(r++,128|a>>>24&63),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a))}return store(r,0),t}function d(e){return load(e)|load(e+1)<<8|load(e+2)<<16|load(e+3)<<24}function _(e){if(!e)return null;for(var t,r,n,i,a,s=new Array;t=load(e++);)128&t?(r=63&load(e++),192!=(224&t)?(n=63&load(e++),224==(240&t)?t=(15&t)<<12|r<<6|n:(i=63&load(e++),240==(248&t)?t=(7&t)<<18|r<<12|n<<6|i:(a=63&load(e++),t=248==(252&t)?(3&t)<<24|r<<18|n<<12|i<<6|a:(1&t)<<30|r<<24|n<<18|i<<12|a<<6|63&load(e++))),s.push(t)):s.push((31&t)<<6|r)):s.push(t);return String.fromCodePoints(s)}t.Relooper=c,t.readString=_;var m=function(){return function(){}}();t.BinaryModule=m},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),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(0),c=r(1),p=r(6),l=r(2),u=r(4),h=r(18),d=function(){return function(){}}(),_=function(){return function(){}}(),m=function(){return function(){}}();function y(e,t){switch(assert(t.length),e){case l.DecoratorKind.OPERATOR:case l.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 l.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 l.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 g,E,T=new Map,f=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=T,r.typeAliases=new Map,r.fileLevelExports=new Map,r.moduleLevelExports=new Map,r.arrayPrototype=null,r.stringInstance=null,r.mainFunction=null,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 u.NativeType.I32:t=this.tempI32s||(this.tempI32s=[]);break;case u.NativeType.I64:t=this.tempI64s||(this.tempI64s=[]);break;case u.NativeType.F32:t=this.tempF32s||(this.tempF32s=[]);break;case u.NativeType.F64:t=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}assert(e.index>=0),t.push(e)}},t.prototype.getAndFreeTempLocal=function(e,t){var r,n;switch(e.toNativeType()){case u.NativeType.I32:r=this.tempI32s||(this.tempI32s=[]);break;case u.NativeType.I64:r=this.tempI64s||(this.tempI64s=[]);break;case u.NativeType.F32:r=this.tempF32s||(this.tempF32s=[]);break;case u.NativeType.F64:r=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}return r.length?(n=r[r.length-1]).type=e:(n=this.addLocal(e),r.push(n)),e.is(36)&&this.flow.setLocalWrapped(n.index,t),n},t.prototype.enterBreakContext=function(){var e=this.nextBreakId++;return this.breakStack?this.breakStack.push(e):this.breakStack=[e],this.breakContext=e.toString(10)},t.prototype.leaveBreakContext=function(){assert(null!=this.breakStack);var e=this.breakStack.length;assert(e>0),this.breakStack.pop(),e>1?this.breakContext=this.breakStack[e-2].toString(10):(this.breakContext=null,this.breakStack=null)},t.prototype.finalize=function(e,t){if(this.ref=t,assert(!this.breakStack||!this.breakStack.length),this.breakStack=null,this.breakContext=null,this.tempI32s=this.tempI64s=this.tempF32s=this.tempF64s=null,this.program.options.sourceMap)for(var r=this.debugLocations,n=0,i=r.length;n=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 u.NativeType.I32:s=u.getConstValueI32(e);break;case u.NativeType.I64:s=u.getConstValueI64Low(e);break;case u.NativeType.F32:s=i32(u.getConstValueF32(e));break;case u.NativeType.F64: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)?p.Type.i8:p.Type.u8;break;case 2:o=u.isLoadSigned(e)?p.Type.i16:p.Type.u16;break;default:o=u.isLoadSigned(e)?p.Type.i32:p.Type.u32}return z(o,t);case u.ExpressionId.Block:if(!u.getBlockName(e)){var c=assert(u.getBlockChildCount(e)),l=u.getBlockChild(e,c-1);return this.canOverflow(l,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==g.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=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.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 n.NativeType.I32;case 3:case 8:return n.NativeType.I64;case 4:case 9:return 64==this.size?n.NativeType.I64:n.NativeType.I32;case 11:return n.NativeType.F32;case 12:return n.NativeType.F64;case 13:return n.NativeType.None}},e.prototype.toNativeZero=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(0);case 4:case 9:if(64!=this.size)return e.createI32(0);case 3:case 8:return e.createI64(0);case 11:return e.createF32(0);case 12:return e.createF64(0)}},e.prototype.toNativeOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(1);case 4:case 9:if(64!=this.size)return e.createI32(1);case 3:case 8:return e.createI64(1);case 11:return e.createF32(1);case 12:return e.createF64(1)}},e.prototype.toNativeNegOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(-1);case 4:case 9:if(64!=this.size)return e.createI32(-1);case 3:case 8:return e.createI64(-1,-1);case 11:return e.createF32(-1);case 12:return e.createF64(-1)}},e.prototype.toSignatureString=function(){switch(this.kind){default:return"i";case 3:case 8:return"I";case 4:case 9:return 64==this.size?"I":"i";case 11:return"f";case 12:return"F";case 13:return"v"}},e.i8=new e(0,165,8),e.i16=new e(1,165,16),e.i32=new e(2,133,32),e.i64=new e(3,197,64),e.isize32=new e(4,149,32),e.isize64=new e(4,213,64),e.u8=new e(5,166,8),e.u16=new e(6,166,16),e.u32=new e(7,134,32),e.u64=new e(8,198,64),e.usize32=new e(9,150,32),e.usize64=new e(9,214,64),e.bool=new e(10,166,1),e.f32=new e(11,137,32),e.f64=new e(12,201,64),e.void=new e(13,0,0),e}();t.Type=i,t.typesToNativeTypes=function(e){for(var t=e.length,r=new Array(t),n=0;ne?t[e]:o(e)},e.prototype.isAssignableTo=function(e){var t=this.thisType,r=e.thisType;if(t){if(!r||!t.isAssignableTo(r))return!1}else if(r)return!1;if(this.hasRest!=e.hasRest)return!1;var n=this.parameterTypes,i=e.parameterTypes,a=n.length;if(a!=i.length)return!1;for(var s=0;s=p&&u!=l?t.push("?: "):t.push(": "),t.push(i[u].toString());return t.push(") => "),t.push(this.returnType.toString()),t.join("")},e}();t.Signature=a;var s=null;function o(e){s||(s=[]);for(var t=s.length;t<=e;++t)s.push("arg$"+t.toString(10));return s[e-1]}t.getDefaultParameterName=o},function(e,t){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";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var i,a,s=r(1),o=r(2),c=r(3);function p(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 l(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=p,t.tokenIsAlsoIdentifier=l,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";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Operation_not_supported=100]="Operation_not_supported",e[e.Operation_is_unsafe=101]="Operation_is_unsafe",e[e.Conversion_from_type_0_to_1_requires_an_explicit_cast=200]="Conversion_from_type_0_to_1_requires_an_explicit_cast",e[e.Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit=201]="Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit",e[e.Type_0_cannot_be_changed_to_type_1=202]="Type_0_cannot_be_changed_to_type_1",e[e.Type_0_cannot_be_reinterpreted_as_type_1=203]="Type_0_cannot_be_reinterpreted_as_type_1",e[e.Basic_type_0_cannot_be_nullable=204]="Basic_type_0_cannot_be_nullable",e[e.Cannot_export_a_mutable_global=205]="Cannot_export_a_mutable_global",e[e.Compiling_constant_with_non_constant_initializer_as_mutable=206]="Compiling_constant_with_non_constant_initializer_as_mutable",e[e.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa=207]="Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa",e[e.Unmanaged_classes_cannot_implement_interfaces=208]="Unmanaged_classes_cannot_implement_interfaces",e[e.Invalid_regular_expression_flags=209]="Invalid_regular_expression_flags",e[e.Implementation_0_must_match_the_signature_1=210]="Implementation_0_must_match_the_signature_1",e[e.Class_0_is_sealed_and_cannot_be_extended=211]="Class_0_is_sealed_and_cannot_be_extended",e[e.Decorator_0_is_not_valid_here=212]="Decorator_0_is_not_valid_here",e[e.Duplicate_decorator=213]="Duplicate_decorator",e[e.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.Unterminated_string_literal=1002]="Unterminated_string_literal",e[e.Identifier_expected=1003]="Identifier_expected",e[e._0_expected=1005]="_0_expected",e[e.A_file_cannot_have_a_reference_to_itself=1006]="A_file_cannot_have_a_reference_to_itself",e[e.Trailing_comma_not_allowed=1009]="Trailing_comma_not_allowed",e[e.Unexpected_token=1012]="Unexpected_token",e[e.A_rest_parameter_must_be_last_in_a_parameter_list=1014]="A_rest_parameter_must_be_last_in_a_parameter_list",e[e.Parameter_cannot_have_question_mark_and_initializer=1015]="Parameter_cannot_have_question_mark_and_initializer",e[e.A_required_parameter_cannot_follow_an_optional_parameter=1016]="A_required_parameter_cannot_follow_an_optional_parameter",e[e.Enum_member_must_have_initializer=1061]="Enum_member_must_have_initializer",e[e.Statements_are_not_allowed_in_ambient_contexts=1036]="Statements_are_not_allowed_in_ambient_contexts",e[e.Initializers_are_not_allowed_in_ambient_contexts=1039]="Initializers_are_not_allowed_in_ambient_contexts",e[e._0_modifier_cannot_be_used_here=1042]="_0_modifier_cannot_be_used_here",e[e.A_rest_parameter_cannot_be_optional=1047]="A_rest_parameter_cannot_be_optional",e[e.A_rest_parameter_cannot_have_an_initializer=1048]="A_rest_parameter_cannot_have_an_initializer",e[e.A_set_accessor_must_have_exactly_one_parameter=1049]="A_set_accessor_must_have_exactly_one_parameter",e[e.A_set_accessor_parameter_cannot_have_an_initializer=1052]="A_set_accessor_parameter_cannot_have_an_initializer",e[e.A_get_accessor_cannot_have_parameters=1054]="A_get_accessor_cannot_have_parameters",e[e.Type_parameters_cannot_appear_on_a_constructor_declaration=1092]="Type_parameters_cannot_appear_on_a_constructor_declaration",e[e.Type_annotation_cannot_appear_on_a_constructor_declaration=1093]="Type_annotation_cannot_appear_on_a_constructor_declaration",e[e.An_accessor_cannot_have_type_parameters=1094]="An_accessor_cannot_have_type_parameters",e[e.A_set_accessor_cannot_have_a_return_type_annotation=1095]="A_set_accessor_cannot_have_a_return_type_annotation",e[e.Type_parameter_list_cannot_be_empty=1098]="Type_parameter_list_cannot_be_empty",e[e.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement=1104]="A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement",e[e.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement=1105]="A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement",e[e.A_return_statement_can_only_be_used_within_a_function_body=1108]="A_return_statement_can_only_be_used_within_a_function_body",e[e.Expression_expected=1109]="Expression_expected",e[e.Type_expected=1110]="Type_expected",e[e.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement=1113]="A_default_clause_cannot_appear_more_than_once_in_a_switch_statement",e[e.Duplicate_label_0=1114]="Duplicate_label_0",e[e.Octal_literals_are_not_allowed_in_strict_mode=1121]="Octal_literals_are_not_allowed_in_strict_mode",e[e.Digit_expected=1124]="Digit_expected",e[e.Hexadecimal_digit_expected=1125]="Hexadecimal_digit_expected",e[e.Unexpected_end_of_text=1126]="Unexpected_end_of_text",e[e.Invalid_character=1127]="Invalid_character",e[e._case_or_default_expected=1130]="_case_or_default_expected",e[e.A_declare_modifier_cannot_be_used_in_an_already_ambient_context=1038]="A_declare_modifier_cannot_be_used_in_an_already_ambient_context",e[e.Type_argument_expected=1140]="Type_argument_expected",e[e.String_literal_expected=1141]="String_literal_expected",e[e.Line_break_not_permitted_here=1142]="Line_break_not_permitted_here",e[e.Declaration_expected=1146]="Declaration_expected",e[e._const_declarations_must_be_initialized=1155]="_const_declarations_must_be_initialized",e[e.Unterminated_regular_expression_literal=1161]="Unterminated_regular_expression_literal",e[e.Interface_declaration_cannot_have_implements_clause=1176]="Interface_declaration_cannot_have_implements_clause",e[e.Binary_digit_expected=1177]="Binary_digit_expected",e[e.Octal_digit_expected=1178]="Octal_digit_expected",e[e.An_implementation_cannot_be_declared_in_ambient_contexts=1183]="An_implementation_cannot_be_declared_in_ambient_contexts",e[e.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive=1198]="An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive",e[e.Unterminated_Unicode_escape_sequence=1199]="Unterminated_Unicode_escape_sequence",e[e.Decorators_are_not_valid_here=1206]="Decorators_are_not_valid_here",e[e._abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration=1242]="_abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration",e[e.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.Export_declaration_conflicts_with_exported_declaration_of_0=2484]="Export_declaration_conflicts_with_exported_declaration_of_0",e[e.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property=2540]="Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property",e[e.The_target_of_an_assignment_must_be_a_variable_or_a_property_access=2541]="The_target_of_an_assignment_must_be_a_variable_or_a_property_access",e[e.Index_signature_in_type_0_only_permits_reading=2542]="Index_signature_in_type_0_only_permits_reading",e[e.Expected_0_arguments_but_got_1=2554]="Expected_0_arguments_but_got_1",e[e.Expected_at_least_0_arguments_but_got_1=2555]="Expected_at_least_0_arguments_but_got_1",e[e.Expected_0_type_arguments_but_got_1=2558]="Expected_0_type_arguments_but_got_1",e[e.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums=2651]="A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums",e[e.Namespace_0_has_no_exported_member_1=2694]="Namespace_0_has_no_exported_member_1",e[e.File_0_not_found=6054]="File_0_not_found",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 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 1002:return"Unterminated string literal.";case 1003:return"Identifier expected.";case 1005:return"'{0}' expected.";case 1006:return"A file cannot have a reference to itself.";case 1009:return"Trailing comma not allowed.";case 1012:return"Unexpected token.";case 1014:return"A rest parameter must be last in a parameter list.";case 1015:return"Parameter cannot have question mark and initializer.";case 1016:return"A required parameter cannot follow an optional parameter.";case 1061:return"Enum member must have initializer.";case 1036:return"Statements are not allowed in ambient contexts.";case 1039:return"Initializers are not allowed in ambient contexts.";case 1042:return"'{0}' modifier cannot be used here.";case 1047:return"A rest parameter cannot be optional.";case 1048:return"A rest parameter cannot have an initializer.";case 1049:return"A 'set' accessor must have exactly one parameter.";case 1052:return"A 'set' accessor parameter cannot have an initializer.";case 1054:return"A 'get' accessor cannot have parameters.";case 1092:return"Type parameters cannot appear on a constructor declaration.";case 1093:return"Type annotation cannot appear on a constructor declaration.";case 1094:return"An accessor cannot have type parameters.";case 1095:return"A 'set' accessor cannot have a return type annotation.";case 1098:return"Type parameter list cannot be empty.";case 1104:return"A 'continue' statement can only be used within an enclosing iteration statement.";case 1105:return"A 'break' statement can only be used within an enclosing iteration or switch statement.";case 1108:return"A 'return' statement can only be used within a function body.";case 1109:return"Expression expected.";case 1110:return"Type expected.";case 1113:return"A 'default' clause cannot appear more than once in a 'switch' statement.";case 1114:return"Duplicate label '{0}'.";case 1121:return"Octal literals are not allowed in strict mode.";case 1124:return"Digit expected.";case 1125:return"Hexadecimal digit expected.";case 1126:return"Unexpected end of text.";case 1127:return"Invalid character.";case 1130:return"'case' or 'default' expected.";case 1038:return"A 'declare' modifier cannot be used in an already ambient context.";case 1140:return"Type argument expected.";case 1141:return"String literal expected.";case 1142:return"Line break not permitted here.";case 1146:return"Declaration expected.";case 1155:return"'const' declarations must be initialized.";case 1161:return"Unterminated regular expression literal.";case 1176:return"Interface declaration cannot have 'implements' clause.";case 1177:return"Binary digit expected.";case 1178:return"Octal digit expected.";case 1183:return"An implementation cannot be declared in ambient contexts.";case 1198:return"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.";case 1199:return"Unterminated Unicode escape sequence.";case 1206:return"Decorators are not valid here.";case 1242:return"'abstract' modifier can only appear on a class, method, or property declaration.";case 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 2484:return"Export declaration conflicts with exported declaration of '{0}'.";case 2540:return"Cannot assign to '{0}' because it is a constant or a read-only property.";case 2541:return"The target of an assignment must be a variable or a property access.";case 2542:return"Index signature in type '{0}' only permits reading.";case 2554:return"Expected {0} arguments, but got {1}.";case 2555:return"Expected at least {0} arguments, but got {1}.";case 2558:return"Expected {0} type arguments, but got {1}.";case 2651:return"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.";case 2694:return"Namespace '{0}' has no exported member '{1}'.";case 6054:return"File '{0}' not found.";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=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),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}}}};Object.defineProperty(t,"__esModule",{value:!0});var a,s=r(23),o=r(1),c=r(4),p=r(0),l=r(5),u=r(8),h=r(2),d=r(6),_=r(3);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(a=t.Target||(t.Target={}));var m=function(){function e(){this.target=a.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==a.WASM64},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"usizeType",{get:function(){return this.target==a.WASM64?d.Type.usize64:d.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==a.WASM64?d.Type.isize64:d.Type.isize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nativeSizeType",{get:function(){return this.target==a.WASM64?c.NativeType.I64:c.NativeType.I32},enumerable:!0,configurable:!0}),e.prototype.hasFeature=function(e){return 0!=(this.features&e)},e}();t.Options=m,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,g,E=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.currentOuterFunction=null,n.currentEnum=null,n.currentType=d.Type.void,n.memorySegments=[],n.stringSegments=new Map,n.functionTable=[],n.argcVar=0,n.argcSet=0,n.f32ModInstance=null,n.f64ModInstance=null,n.f32PowInstance=null,n.f64PowInstance=null,n.program=t,n.resolver=t.resolver,r||(r=new m),n.options=r,n.memoryOffset=i64_new(max(r.memoryBase,8)),n.module=c.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=this.options,t=this.module,r=this.program;r.initialize(e);var n=new l.Function(r.startFunction,"start",new d.Signature([],d.Type.void));this.startFunctionInstance=n;var i=new Array;this.startFunctionBody=i,this.currentFunction=n;for(var a=r.sources,s=0,o=a.length;s"),!1;e.type=this.currentType}else assert(!1);if(e.is(p.CommonFlags.AMBIENT|p.CommonFlags.BUILTIN))return!0;var a=e.type.toNativeType(),s=e.isAny(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?f(e,r,e.parent):(y="env",g=e.simpleName),t.addGlobalImport(e.internalName,y,g,a),e.set(p.CommonFlags.COMPILED),!0):(this.error(o.DiagnosticCode.Operation_not_supported,assert(r).range),!1);var l=!1;e.is(p.CommonFlags.INLINED)?n=this.compileInlineConstant(e,e.type,!0):r&&r.initializer?(n||(n=this.compileExpression(r.initializer,e.type,1,1)),c.getExpressionId(n)!=c.ExpressionId.Const&&(s?(n=this.precomputeExpressionRef(n),c.getExpressionId(n)!=c.ExpressionId.Const&&(this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,r.range),l=!0)):l=!0)):n=e.type.toNativeZero(t);var u=e.internalName;if(l)t.addGlobal(u,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(u,n));else if(s){switch(c.getExpressionType(n)){case c.NativeType.I32:e.constantValueKind=1,e.constantIntegerValue=i64_new(c.getConstValueI32(n),0);break;case c.NativeType.I64:e.constantValueKind=1,e.constantIntegerValue=i64_new(c.getConstValueI64Low(n),c.getConstValueI64High(n));break;case c.NativeType.F32:e.constantValueKind=2,e.constantFloatValue=c.getConstValueF32(n);break;case c.NativeType.F64:e.constantValueKind=2,e.constantFloatValue=c.getConstValueF64(n);break;default:return assert(!1),!1}e.set(p.CommonFlags.INLINED),e.is(p.CommonFlags.MODULE_EXPORT)?(t.addGlobal(u,a,!1,n),t.addGlobalExport(u,T(e))):r&&r.isTopLevel&&t.addGlobal(u,a,!1,n)}else t.addGlobal(u,a,!s,n);return!0},t.prototype.compileEnumDeclaration=function(e){var t=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(t.kind==l.ElementKind.ENUM),this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){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;if(e.members)try{for(var s=i(e.members.values()),u=s.next();!u.done;u=s.next()){var h=u.value;if(h.kind==l.ElementKind.ENUMVALUE){var _=!1,m=h,y=m.declaration;if(m.set(p.CommonFlags.COMPILED),m.is(p.CommonFlags.INLINED))e.declaration.isTopLevelExport&&n.addGlobal(m.internalName,c.NativeType.I32,!1,n.createI32(m.constantValue));else{var g=void 0;y.value?(g=this.compileExpression(y.value,d.Type.i32,1,0),c.getExpressionId(g)!=c.ExpressionId.Const&&(g=this.precomputeExpressionRef(g),c.getExpressionId(g)!=c.ExpressionId.Const&&(e.is(p.CommonFlags.CONST)&&this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),_=!0))):null==a?g=n.createI32(0):a.is(p.CommonFlags.INLINED)?g=n.createI32(a.constantValue+1):(g=n.createBinary(c.BinaryOp.AddI32,n.createGetGlobal(a.internalName,c.NativeType.I32),n.createI32(1)),e.is(p.CommonFlags.CONST)&&this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),_=!0),_?(n.addGlobal(m.internalName,c.NativeType.I32,!0,n.createI32(0)),this.startFunctionBody.push(n.createSetGlobal(m.internalName,g))):(n.addGlobal(m.internalName,c.NativeType.I32,!1,g),c.getExpressionType(g)==c.NativeType.I32?(m.constantValue=c.getConstValueI32(g),m.set(p.CommonFlags.INLINED)):(assert(!1),m.constantValue=0))}a=m,e.is(p.CommonFlags.MODULE_EXPORT)&&(h.is(p.CommonFlags.INLINED)||this.options.hasFeature(2)?n.addGlobalExport(h.internalName,T(h)):y&&this.warning(o.DiagnosticCode.Cannot_export_a_mutable_global,y.range))}}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=s.return)&&r.call(s)}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==l.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 y=t.createBlock("case0|"+a,l,c.NativeType.None),g=!0,E=!0,T=!0,f=!0;for(_=0;_=0&&(g&&s.set(1),E&&s.set(2),T&&s.set(4),f&&s.set(32)),y},t.prototype.compileThrowStatement=function(e){var t=this.currentFunction.flow;return t.set(4),t.set(1),s.compileAbort(this,null,e)},t.prototype.compileTryStatement=function(e){return this.error(o.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==h.NodeKind.SOURCE){for(var s=0;s");continue}E=this.currentType}var f=!1;if(y.is(p.CommonFlags.CONST))if(T)if(T=this.precomputeExpressionRef(T),c.getExpressionId(T)==c.ExpressionId.Const){var I=new l.Local(r,g,-1,E);switch(c.getExpressionType(T)){case c.NativeType.I32:I=I.withConstantIntegerValue(i64_new(c.getConstValueI32(T),0));break;case c.NativeType.I64:I=I.withConstantIntegerValue(i64_new(c.getConstValueI64Low(T),c.getConstValueI64High(T)));break;case c.NativeType.F32:I=I.withConstantFloatValue(c.getConstValueF32(T));break;case c.NativeType.F64:I=I.withConstantFloatValue(c.getConstValueF64(T));break;default:return assert(!1),this.module.createUnreachable()}var v=n.flow.scopedLocals;if(v){if(v.has(g))return this.error(o.DiagnosticCode.Duplicate_identifier_0,y.name.range,g),this.module.createUnreachable()}else n.flow.scopedLocals=v=new Map;v.set(g,I),f=!0}else this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range);else this.error(o.DiagnosticCode._const_declarations_must_be_initialized,y.range);if(!f){I=void 0;I=y.isAny(p.CommonFlags.LET|p.CommonFlags.CONST)||_.is(2048)?_.addScopedLocal(E,g,!1,y):n.addLocal(E,g,y),T?(u.push(this.compileAssignmentWithValue(y.name,T)),I.type.is(36)&&_.setLocalWrapped(I.index,!_.canOverflow(T,E))):I.type.is(36)&&_.setLocalWrapped(I.index,!0)}}return u.length?1==u.length?u[0]:this.module.createBlock(null,u,c.NativeType.None):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,d.Type.void,2,0)},t.prototype.compileWhileStatement=function(e){var t=this.module,r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var n=this.precomputeExpressionRef(r);if(c.getExpressionId(n)==c.ExpressionId.Const&&c.getExpressionType(n)==c.NativeType.I32){if(!c.getConstValueI32(n))return t.createNop()}else r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType)}var i=this.currentFunction,a=i.enterBreakContext(),s=i.flow,o=s.fork();i.flow=o;var l="break|"+a;o.breakLabel=l;var u="continue|"+a;o.continueLabel=u;var h=this.compileStatement(e.statement),_=o.isAny(29);return i.flow=o.free(),i.leaveBreakContext(),o.unset(792),s.inheritConditional(o),t.createBlock(l,[t.createLoop(u,t.createIf(r,_?h:t.createBlock(null,[h,t.createBreak(u)],c.NativeType.None)))],c.NativeType.None)},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(d.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&a:0);case 2:case 7:return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 4:case 9:if(!e.program.options.isWasm64)return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 3:case 8:return 1==e.constantValueKind?this.module.createI64(i64_low(e.constantIntegerValue),i64_high(e.constantIntegerValue)):this.module.createI64(0);case 12:if(!e.is(p.CommonFlags.BUILTIN)||t!=d.Type.f32)return this.module.createF64(e.constantFloatValue);this.currentType=d.Type.f32;case 11:return this.module.createF32(e.constantFloatValue);default:return assert(!1),this.module.createUnreachable()}},t.prototype.compileExpression=function(e,t,r,n){var i;switch(this.currentType=t,e.kind){case h.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case h.NodeKind.BINARY:i=this.compileBinaryExpression(e,t);break;case h.NodeKind.CALL:i=this.compileCallExpression(e,t);break;case h.NodeKind.COMMA:i=this.compileCommaExpression(e,t);break;case h.NodeKind.ELEMENTACCESS:i=this.compileElementAccessExpression(e,t);break;case h.NodeKind.FUNCTION:i=this.compileFunctionExpression(e,t);break;case h.NodeKind.IDENTIFIER:case h.NodeKind.FALSE:case h.NodeKind.NULL:case h.NodeKind.THIS:case h.NodeKind.SUPER:case h.NodeKind.TRUE:i=this.compileIdentifierExpression(e,t,0==r);break;case h.NodeKind.INSTANCEOF:i=this.compileInstanceOfExpression(e,t);break;case h.NodeKind.LITERAL:i=this.compileLiteralExpression(e,t);break;case h.NodeKind.NEW:i=this.compileNewExpression(e,t);break;case h.NodeKind.PARENTHESIZED:i=this.compileParenthesizedExpression(e,t);break;case h.NodeKind.PROPERTYACCESS:i=this.compilePropertyAccessExpression(e,t,0==r);break;case h.NodeKind.TERNARY:i=this.compileTernaryExpression(e,t);break;case h.NodeKind.UNARYPOSTFIX:i=this.compileUnaryPostfixExpression(e,t);break;case h.NodeKind.UNARYPREFIX:i=this.compileUnaryPrefixExpression(e,t);break;default:this.error(o.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==d.Type.void?d.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r,n){return this.precomputeExpressionRef(this.compileExpression(e,t,r,n))},t.prototype.precomputeExpressionRef=function(e){var t=this.module,r=this.currentType.toNativeType(),n=t.addTemporaryFunction(r,null,e);t.runPasses(["precompute"],n);var i=c.getFunctionBody(n);return t.removeTemporaryFunction(),i},t.prototype.convertExpression=function(e,t,r,n,i,a){assert(0!=n);var s=this.module;return 13==t.kind?(assert(13!=r.kind),this.error(o.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(o.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(c.UnaryOp.PromoteF32,e)):11==r.kind&&(e=s.createUnary(c.UnaryOp.DemoteF64,e)):r.is(4)?e=11==t.kind?r.is(1)?r.is(64)?s.createUnary(c.UnaryOp.TruncF32ToI64,e):s.createUnary(c.UnaryOp.TruncF32ToI32,e):r.is(64)?s.createUnary(c.UnaryOp.TruncF32ToU64,e):s.createUnary(c.UnaryOp.TruncF32ToU32,e):r.is(1)?r.is(64)?s.createUnary(c.UnaryOp.TruncF64ToI64,e):s.createUnary(c.UnaryOp.TruncF64ToI32,e):r.is(64)?s.createUnary(c.UnaryOp.TruncF64ToU64,e):s.createUnary(c.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)?c.UnaryOp.ConvertI64ToF32:c.UnaryOp.ConvertU64ToF32,e):s.createUnary(t.is(1)?c.UnaryOp.ConvertI32ToF32:c.UnaryOp.ConvertU32ToF32,e):t.is(64)?s.createUnary(t.is(1)?c.UnaryOp.ConvertI64ToF64:c.UnaryOp.ConvertU64ToF64,e):s.createUnary(t.is(1)?c.UnaryOp.ConvertI32ToF64:c.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=s.createUnary(c.UnaryOp.WrapI64,e)):r.is(64)?(e=s.createUnary(r.is(1)?c.UnaryOp.ExtendI32:c.UnaryOp.ExtendU32,this.ensureSmallIntegerWrap(e,t)),i=0):t.is(32)&&t.size",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.GtI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.GtI64:c.BinaryOp.GtI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.GtI64,r,i);break;case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.GtU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.GtU64:c.BinaryOp.GtU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.GtU64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.GtF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.GtF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.LESSTHAN_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.LE)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!0)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"<=",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.LeI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.LeI64:c.BinaryOp.LeI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.LeI64,r,i);break;case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.LeU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.LeU64:c.BinaryOp.LeU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.LeU64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.LeF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.LeF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.GREATERTHAN_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.GE)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!0)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,">=",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.GeI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.GeI64:c.BinaryOp.GeI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.GeI64,r,i);break;case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.GeU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.GeU64:c.BinaryOp.GeU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.GeU64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.GeF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.GeF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EQUALS_EQUALS_EQUALS:case u.Token.EQUALS_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,g==u.Token.EQUALS_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.EQ)){p=this.compileBinaryOverload(v,_,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.EqI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.EqI64:c.BinaryOp.EqI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.EqI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.EqF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.EqF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EXCLAMATION_EQUALS_EQUALS:case u.Token.EXCLAMATION_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,g==u.Token.EXCLAMATION_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.NE)){p=this.compileBinaryOverload(v,_,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.NeI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.NeI64:c.BinaryOp.NeI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.NeI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.NeF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.NeF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EQUALS:return this.compileAssignment(_,m,t);case u.Token.PLUS_EQUALS:y=!0;case u.Token.PLUS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.ADD)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"+",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:p=h.createBinary(c.BinaryOp.AddI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.AddI64:c.BinaryOp.AddI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.AddI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.AddF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.AddF64,r,i);break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.MINUS_EQUALS:y=!0;case u.Token.MINUS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.SUB)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"-",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:p=h.createBinary(c.BinaryOp.SubI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.SubI64:c.BinaryOp.SubI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.SubI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.SubF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.SubF64,r,i);break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.ASTERISK_EQUALS:y=!0;case u.Token.ASTERISK:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.MUL)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"*",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:p=h.createBinary(c.BinaryOp.MulI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.MulI64:c.BinaryOp.MulI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.MulI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.MulF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.MulF64,r,i);break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.ASTERISK_ASTERISK_EQUALS:y=!0;case u.Token.ASTERISK_ASTERISK:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.POW)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var E=void 0;if(11==this.currentType.kind){if(i=this.compileExpression(m,d.Type.f32,1,0),a=this.currentType,!(E=this.f32PowInstance)){if(!(T=this.program.elementsLookup.get("Mathf"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),p=h.createUnreachable();break}if(!(f=T.members?T.members.get("pow"):null)){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),p=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=E=this.resolver.resolveFunction(f,null)}}else if(r=this.convertExpression(r,this.currentType,d.Type.f64,1,0,_),n=this.currentType,i=this.compileExpression(m,d.Type.f64,1,0),a=this.currentType,!(E=this.f64PowInstance)){if(!(T=this.program.elementsLookup.get("Math"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),p=h.createUnreachable();break}if(!(f=T.members?T.members.get("pow"):null)){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),p=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=E=this.resolver.resolveFunction(f,null)}p=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):h.createUnreachable();break;case u.Token.SLASH_EQUALS:y=!0;case u.Token.SLASH:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.DIV)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)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=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"/",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.DivI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.DivI64:c.BinaryOp.DivI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.DivI64,r,i);break;case 5:case 6:case 10:case 7:p=h.createBinary(c.BinaryOp.DivU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.DivU64:c.BinaryOp.DivU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.DivU64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.DivF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.DivF64,r,i);break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.PERCENT_EQUALS:y=!0;case u.Token.PERCENT:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.REM)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)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=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"%",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.RemI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.RemI64:c.BinaryOp.RemI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.RemI64,r,i);break;case 5:case 6:case 10:case 7:p=h.createBinary(c.BinaryOp.RemU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.RemU64:c.BinaryOp.RemU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.RemU64,r,i);break;case 11:if(!(E=this.f32ModInstance)){if(!(T=this.program.elementsLookup.get("Mathf"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),p=h.createUnreachable();break}if(!(f=T.members?T.members.get("mod"):null)){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),p=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=E=this.resolver.resolveFunction(f,null)}p=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):h.createUnreachable();break;case 12:if(!(E=this.f64ModInstance)){var T,f;if(!(T=this.program.elementsLookup.get("Math"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),p=h.createUnreachable();break}if(!(f=T.members?T.members.get("mod"):null)){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),p=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=E=this.resolver.resolveFunction(f,null)}p=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):h.createUnreachable();break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.LESSTHAN_LESSTHAN_EQUALS:y=!0;case u.Token.LESSTHAN_LESSTHAN:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_SHL)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.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:p=h.createBinary(c.BinaryOp.ShlI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.ShlI64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.ShlI64:c.BinaryOp.ShlI32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_EQUALS:y=!0;case u.Token.GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_SHR)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.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:p=h.createBinary(c.BinaryOp.ShrI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.ShrI64,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.ShrI64:c.BinaryOp.ShrI32,r,i);break;case 5:case 6:case 10:case 7:p=h.createBinary(c.BinaryOp.ShrU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.ShrU64,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.ShrU64:c.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:y=!0;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_SHR_U)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.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:p=h.createBinary(c.BinaryOp.ShrU32,r,i);case 0:case 1:case 2:case 7:p=h.createBinary(c.BinaryOp.ShrU32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.ShrU64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.ShrU64:c.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.AMPERSAND_EQUALS:y=!0;case u.Token.AMPERSAND:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_AND)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"&",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 10:case 7:p=h.createBinary(c.BinaryOp.AndI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.AndI64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.AndI64:c.BinaryOp.AndI32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.BAR_EQUALS:y=!0;case u.Token.BAR:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_OR)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"|",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:p=h.createBinary(c.BinaryOp.OrI32,r,i);break;case 2:case 7:p=h.createBinary(c.BinaryOp.OrI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.OrI64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.OrI64:c.BinaryOp.OrI32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.CARET_EQUALS:y=!0;case u.Token.CARET:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){var I,v;if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_XOR)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"^",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:p=h.createBinary(c.BinaryOp.XorI32,r,i);break;case 2:case 7:p=h.createBinary(c.BinaryOp.XorI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.XorI64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.XorI64:c.BinaryOp.XorI32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.AMPERSAND_AMPERSAND:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,p=h.cloneExpression(r,!0,0))this.makeIsTrueish(r,this.currentType),p=h.createIf(this.makeIsTrueish(r,this.currentType),i,p);else{var A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));p=h.createIf(this.makeIsTrueish(h.createTeeLocal(C.index,r),this.currentType),i,h.createGetLocal(assert(C).index,this.currentType.toNativeType()))}break;case u.Token.BAR_BAR:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,p=this.module.cloneExpression(r,!0,0))p=this.module.createIf(this.makeIsTrueish(r,this.currentType),p,i);else{A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));p=h.createIf(this.makeIsTrueish(h.createTeeLocal(C.index,r),this.currentType),h.createGetLocal(assert(C).index,this.currentType.toNativeType()),i)}break;default:assert(!1),p=this.module.createUnreachable()}return y?this.compileAssignmentWithValue(_,p,t!=d.Type.void):p},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(l.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==l.ElementKind.CLASS),s=r,a=[n]}else a=[t,n];return this.compileCallDirect(e,a,i,s,e.hasDecorator(l.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 l.ElementKind.GLOBAL:if(!this.compileGlobal(s))return this.module.createUnreachable();assert(s.type!=d.Type.void);case l.ElementKind.LOCAL:case l.ElementKind.FIELD:n=s.type;break;case l.ElementKind.PROPERTY:var c=s.setterPrototype;if(c){var p=this.resolver.resolveFunction(c,null);if(!p)return this.module.createUnreachable();assert(1==p.signature.parameterTypes.length),n=p.signature.parameterTypes[0];break}return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,s.internalName),this.module.createUnreachable();case l.ElementKind.CLASS:if(i.resolvedElementExpression){var u=a.flow.is(4096),h=s.lookupOverload(l.OperatorKind.INDEXED_SET,u);if(!h)return s.lookupOverload(l.OperatorKind.INDEXED_GET,u)?this.error(o.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,s.internalName):this.error(o.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(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}assert(n!=d.Type.void);var _=this.compileExpression(t,n,1,0);return this.compileAssignmentWithValue(e,_,r!=d.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.resolver.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();switch(i.kind){case l.ElementKind.LOCAL:var a=i.type;if(assert(a!=d.Type.void),this.currentType=r?a:d.Type.void,i.is(p.CommonFlags.CONST))return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var s=this.currentFunction.flow;return a.is(36)&&s.setLocalWrapped(i.index,!s.canOverflow(t,a)),r?n.createTeeLocal(i.index,t):n.createSetLocal(i.index,t);case l.ElementKind.GLOBAL:if(!this.compileGlobal(i))return n.createUnreachable();a=i.type;if(assert(a!=d.Type.void),this.currentType=r?a:d.Type.void,i.is(p.CommonFlags.CONST))return this.error(o.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 c=a.toNativeType(),u=i.internalName;return n.createBlock(null,[n.createSetGlobal(u,t),n.createGetGlobal(u,c)],c)}return n.createSetGlobal(i.internalName,t);case l.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(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var _=assert(this.resolver.resolvedThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0);a=i.type;this.currentType=r?a:d.Type.void;c=a.toNativeType();if(10==a.kind&&(t=this.ensureSmallIntegerWrap(t,a)),r){s=(L=this.currentFunction).flow;var y=L.getAndFreeTempLocal(a,!s.canOverflow(t,a)).index;return n.createBlock(null,[n.createSetLocal(y,t),n.createStore(a.byteSize,m,n.createGetLocal(y,c),c,i.memoryOffset),n.createGetLocal(y,c)],c)}return n.createStore(a.byteSize,m,t,c,i.memoryOffset);case l.ElementKind.PROPERTY:var g=i.setterPrototype;if(g){var E=this.resolver.resolveFunction(g,null);if(!E)return n.createUnreachable();if(!r){if(E.is(p.CommonFlags.INSTANCE)){_=assert(this.resolver.resolvedThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0);return this.makeCallDirect(E,[m,t])}return this.makeCallDirect(E,[t])}var T=i.getterPrototype;assert(null!=T);var f=this.resolver.resolveFunction(T,null);if(!f)return n.createUnreachable();var I=(R=f.signature.returnType).toNativeType();if(E.is(p.CommonFlags.INSTANCE)){_=assert(this.resolver.resolvedThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0),y=this.currentFunction.getAndFreeTempLocal(R,!1).index;return n.createBlock(null,[this.makeCallDirect(E,[n.createTeeLocal(y,m),t]),this.makeCallDirect(f,[n.createGetLocal(y,I)])],I)}return n.createBlock(null,[this.makeCallDirect(E,[t]),this.makeCallDirect(f)],I)}return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();case l.ElementKind.CLASS:var v=this.resolver.resolvedElementExpression;if(v){var A=this.currentFunction.flow.is(4096),C=i.lookupOverload(l.OperatorKind.INDEXED_GET,A);if(!C)return this.error(o.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.internalName),n.createUnreachable();var N=i.lookupOverload(l.OperatorKind.INDEXED_SET,A);if(!N)return this.error(o.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.internalName),this.currentType=r?C.signature.returnType:d.Type.void,n.createUnreachable();var O=i.type,S=(_=assert(this.resolver.resolvedThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0),this.compileExpression(v,d.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(o.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 l.ElementKind.FUNCTION_PROTOTYPE:var u=s,_=e.typeArguments;if(u.is(p.CommonFlags.AMBIENT|p.CommonFlags.BUILTIN))return this.compileCallExpressionBuiltin(u,e,t);var m=null;if(_){if(!u.is(p.CommonFlags.GENERIC))return this.error(o.DiagnosticCode.Type_0_is_not_generic,e.expression.range,u.internalName),i.createUnreachable();m=this.resolver.resolveFunctionInclTypeArguments(u,_,this.currentFunction.flow.contextualTypeArguments,e)}else{if(u.is(p.CommonFlags.GENERIC)){for(var y=new Map,g=assert(u.declaration.typeParameters),E=g.length,T=0;Ts&&!i)||(this.error(o.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,s.toString(),t.toString()),!1)},t.prototype.compileCallDirect=function(e,t,r,n,i){void 0===n&&(n=0),void 0===i&&(i=!1);var a=t.length,s=e.signature;if(!this.checkCallSignature(s,a,0!=n,r))return this.module.createUnreachable();if(i)return assert(!e.is(p.CommonFlags.TRAMPOLINE)),this.compileCallInlineUnchecked(e,t,r,n);var o=n?a+1:a,c=new Array(o),l=0;n&&(c[0]=n,l=1);for(var u=s.parameterTypes,h=0;h=i);var o=this.module;if(!this.compileFunction(e))return o.createUnreachable();var c=e.signature.returnType,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=T,this.module.createGetLocal(f,T.toNativeType());case l.ElementKind.GLOBAL:if(!this.compileGlobal(E))return this.module.createUnreachable();var I=E.type;return assert(I!=d.Type.void),E.is(p.CommonFlags.INLINED)?this.compileInlineConstant(E,t,r):(this.currentType=I,this.module.createGetGlobal(E.internalName,I.toNativeType()));case l.ElementKind.ENUMVALUE:return E.is(p.CommonFlags.COMPILED)?(this.currentType=d.Type.i32,E.is(p.CommonFlags.INLINED)?this.module.createI32(E.constantValue):this.module.createGetGlobal(E.internalName,c.NativeType.I32)):(this.error(o.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,e.range),this.currentType=d.Type.i32,this.module.createUnreachable());case l.ElementKind.FUNCTION_PROTOTYPE:var v=this.resolver.resolveFunction(E,null,i.flow.contextualTypeArguments);if(!v||!this.compileFunction(v))return n.createUnreachable();var A=this.ensureFunctionTableEntry(v);return this.currentType=v.signature.type,this.module.createI32(A)}return this.error(o.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=d.Type.bool,a?i.is(512)&&!a.is(512)?i.nonNullableType.isAssignableTo(a)?r.createBinary(i.is(64)?c.BinaryOp.NeI64:c.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 h.LiteralKind.ARRAY:assert(!r);var i=t.classReference;return i&&i.prototype==this.program.arrayPrototype?this.compileArrayLiteral(assert(i.typeArguments)[0],e.elementExpressions,e):(this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable());case h.LiteralKind.FLOAT:var a=e.value;return r&&(a=-a),t==d.Type.f32?n.createF32(a):(this.currentType=d.Type.f64,n.createF64(a));case h.LiteralKind.INTEGER:var s=e.value;switch(r&&(s=i64_sub(i64_new(0),s)),t.kind){case 0:if(i64_is_i8(s))return n.createI32(i64_low(s));break;case 5:if(i64_is_u8(s))return n.createI32(i64_low(s));break;case 1:if(i64_is_i16(s))return n.createI32(i64_low(s));break;case 6:if(i64_is_u16(s))return n.createI32(i64_low(s));break;case 2: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=d.Type.i32,n.createI32(i64_low(s))):i64_is_u32(s)?(this.currentType=d.Type.u32,n.createI32(i64_low(s))):(this.currentType=d.Type.i64,n.createI64(i64_low(s),i64_high(s)));case h.LiteralKind.STRING:return assert(!r),this.compileStaticString(e.value)}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,n.createUnreachable()},t.prototype.compileStaticString=function(e){var t=this.module,r=this.options,n=this.stringSegments,i=n.get(e);if(!i){var a=e.length,s=new Uint8Array(4+2*a);s[0]=255&a,s[1]=a>>>8&255,s[2]=a>>>16&255,s[3]=a>>>24&255;for(var o=0;o>>8&255;i=this.addMemorySegment(s,r.usizeType.byteSize),n.set(e,i)}var c=i.offset,p=this.program.typesLookup.get("string");return this.currentType=p||r.usizeType,r.isWasm64?t.createI64(i64_low(c),i64_high(c)):(assert(i64_is_i32(c)),t.createI32(i64_low(c)))},t.prototype.compileArrayLiteral=function(e,t,r){var n=!0,i=this.module,a=assert(this.program.arrayPrototype);if(!a||a.kind!=l.ElementKind.CLASS_PROTOTYPE)return i.createUnreachable();var s=this.resolver.resolveClass(a,[e]);if(!s)return i.createUnreachable();var p=s.type,u=t.length;if(u){var h=e.toNativeType(),d=void 0,m=void 0;switch(h){case c.NativeType.I32:d=changetype(new Int32Array(u)),m=4*u;break;case c.NativeType.I64:d=changetype(new Array(u)),m=8*u;break;case c.NativeType.F32:d=changetype(new Float32Array(u)),m=4*u;break;case c.NativeType.F64:d=changetype(new Float64Array(u)),m=8*u;break;default:return assert(!1),i.createUnreachable()}for(var y=new Array(u),g=void 0,E=0;E=0);var h=this.compileExpressionRetainType(u,this.options.usizeType,0);return this.currentType=i.type,n.createLoad(i.type.byteSize,i.type.is(5),h,i.type.toNativeType(),i.memoryOffset);case l.ElementKind.PROPERTY:var _=i.getterPrototype;if(_){var m=this.resolver.resolveFunction(_,null);if(!m)return n.createUnreachable();var y=m.signature;if(!this.checkCallSignature(y,0,m.is(p.CommonFlags.INSTANCE),e))return n.createUnreachable();var g=0!=(m.decoratorFlags&l.DecoratorFlags.INLINE);if(m.is(p.CommonFlags.INSTANCE)){s=assert(m.parent);assert(s.kind==l.ElementKind.CLASS);u=assert(this.resolver.resolvedThisExpression),h=this.compileExpressionRetainType(u,this.options.usizeType,0);return this.currentType=y.returnType,this.compileCallDirect(m,[],e,h,g)}return this.currentType=y.returnType,this.compileCallDirect(m,[],e,0,g)}return this.error(o.DiagnosticCode.Property_0_does_not_exist_on_type_1,e.range,i.simpleName,i.parent.toString()),n.createUnreachable()}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.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,d.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var l=this.precomputeExpressionRef(s);if(c.getExpressionId(l)==c.ExpressionId.Const&&c.getExpressionType(l)==c.NativeType.I32)return c.getConstValueI32(l)?this.compileExpressionRetainType(r,t,0):this.compileExpressionRetainType(n,t,0);s=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType)}var u=a.fork();i.flow=u;var h=this.compileExpressionRetainType(r,t,0),_=this.currentType;u.free();var m=a.fork();i.flow=m;var y=this.compileExpressionRetainType(n,t,0),g=this.currentType;i.flow=m.free(),a.inheritMutual(u,m);var E=d.Type.commonCompatible(_,g,!1);return E?(h=this.convertExpression(h,_,E,1,0,r),y=this.convertExpression(y,g,E,1,0,n),this.currentType=E,this.module.createIf(s,h,y)):(this.error(o.DiagnosticCode.Type_0_is_not_assignable_to_type_1,e.range,_.toString(),g.toString()),this.currentType=t,this.module.createUnreachable())},t.prototype.compileUnaryPostfixExpression=function(e,t){var r=this.module,n=this.currentFunction,i=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0);if(c.getExpressionId(i)==c.ExpressionId.Unreachable)return i;var a,s,p,l=this.currentType;switch(e.operator){case u.Token.PLUS_PLUS:if(this.currentType.is(256))return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(l.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=c.BinaryOp.AddI32,s=c.NativeType.I32,p=r.createI32(1);break;case 9:case 4:a=(h=this.options).isWasm64?c.BinaryOp.AddI64:c.BinaryOp.AddI32,s=h.nativeSizeType,p=l.toNativeOne(r);break;case 3:case 8:a=c.BinaryOp.AddI64,s=c.NativeType.I64,p=r.createI64(1);break;case 11:a=c.BinaryOp.AddF32,s=c.NativeType.F32,p=r.createF32(1);break;case 12:a=c.BinaryOp.AddF64,s=c.NativeType.F64,p=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;case u.Token.MINUS_MINUS:if(this.currentType.is(256))return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(l.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=c.BinaryOp.SubI32,s=c.NativeType.I32,p=r.createI32(1);break;case 9:case 4:var h;a=(h=this.options).isWasm64?c.BinaryOp.SubI64:c.BinaryOp.SubI32,s=h.nativeSizeType,p=l.toNativeOne(r);break;case 3:case 8:a=c.BinaryOp.SubI64,s=c.NativeType.I64,p=r.createI64(1);break;case 11:a=c.BinaryOp.SubF32,s=c.NativeType.F32,p=r.createF32(1);break;case 12:a=c.BinaryOp.SubF64,s=c.NativeType.F64,p=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;default:return assert(!1),r.createUnreachable()}if(t==d.Type.void)return this.compileAssignmentWithValue(e.operand,r.createBinary(a,i,p),!1);var _=n.getTempLocal(l,!1),m=this.compileAssignmentWithValue(e.operand,r.createBinary(a,this.module.createGetLocal(_.index,s),p),!1);this.currentType=assert(_).type,n.freeTempLocal(_);var y=_.index;return r.createBlock(null,[r.createSetLocal(y,i),m,r.createGetLocal(y,s)],s)},t.prototype.compileUnaryPrefixExpression=function(e,t){var r,n=this.module,i=!1;switch(e.operator){case u.Token.PLUS:if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.PLUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}break;case u.Token.MINUS:if(e.operand.kind==h.NodeKind.LITERAL&&(e.operand.literalKind==h.LiteralKind.INTEGER||e.operand.literalKind==h.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==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.MINUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.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(c.BinaryOp.SubI32,n.createI32(0),r);break;case 9:case 4:r=n.createBinary(this.options.isWasm64?c.BinaryOp.SubI64:c.BinaryOp.SubI32,this.currentType.toNativeZero(n),r);break;case 3:case 8:r=n.createBinary(c.BinaryOp.SubI64,n.createI64(0),r);break;case 11:r=n.createUnary(c.UnaryOp.NegF32,r);break;case 12:r=n.createUnary(c.UnaryOp.NegF64,r);break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.PLUS_PLUS:if(i=!0,r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.PREFIX_INC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.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(c.BinaryOp.AddI32,r,this.module.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?c.BinaryOp.AddI64:c.BinaryOp.AddI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(c.BinaryOp.AddI64,r,n.createI64(1));break;case 11:r=n.createBinary(c.BinaryOp.AddF32,r,n.createF32(1));break;case 12:r=n.createBinary(c.BinaryOp.AddF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.MINUS_MINUS:if(i=!0,r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.PREFIX_DEC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.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(c.BinaryOp.SubI32,r,n.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?c.BinaryOp.SubI64:c.BinaryOp.SubI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(c.BinaryOp.SubI64,r,n.createI64(1));break;case 11:r=n.createBinary(c.BinaryOp.SubF32,r,n.createF32(1));break;case 12:r=n.createBinary(c.BinaryOp.SubF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.EXCLAMATION:if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256))if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}r=this.makeIsFalseish(r,this.currentType),this.currentType=d.Type.bool;break;case u.Token.TILDE:if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t.is(8)?d.Type.i64:t,0,0),this.currentType.is(256)){var a,s;if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.BITWISE_NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.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(c.BinaryOp.XorI32,r,n.createI32(-1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?c.BinaryOp.XorI64:c.BinaryOp.XorI32,r,this.currentType.toNativeNegOne(n));break;case 3:case 8:r=n.createBinary(c.BinaryOp.XorI64,r,n.createI64(-1,-1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.TYPEOF:return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();default:return assert(!1),n.createUnreachable()}return i?this.compileAssignmentWithValue(e.operand,r,t!=d.Type.void):r},t.prototype.ensureSmallIntegerWrap=function(e,t){var r=this.module,n=this.currentFunction.flow;switch(t.kind){case 0:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(c.UnaryOp.ExtendI8ToI32,e):r.createBinary(c.BinaryOp.ShrI32,r.createBinary(c.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24)));break;case 1:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(c.UnaryOp.ExtendI16ToI32,e):r.createBinary(c.BinaryOp.ShrI32,r.createBinary(c.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16)));break;case 5:n.canOverflow(e,t)&&(e=r.createBinary(c.BinaryOp.AndI32,e,r.createI32(255)));break;case 6:n.canOverflow(e,t)&&(e=r.createBinary(c.BinaryOp.AndI32,e,r.createI32(65535)));break;case 10:n.canOverflow(e,t)&&(e=r.createBinary(c.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(c.UnaryOp.EqzI32,e);case 3:case 8:return r.createUnary(c.UnaryOp.EqzI64,e);case 9:case 4:return r.createUnary(64==t.size?c.UnaryOp.EqzI64:c.UnaryOp.EqzI32,e);case 11:return r.createBinary(c.BinaryOp.EqF32,e,r.createF32(0));case 12:return r.createBinary(c.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(c.BinaryOp.NeI64,e,r.createI64(0));case 9:case 4:return 64==t.size?r.createBinary(c.BinaryOp.NeI64,e,r.createI64(0)):e;case 11:return r.createBinary(c.BinaryOp.NeF32,e,r.createF32(0));case 12:return r.createBinary(c.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,o=this.currentFunction,c=this.options.nativeSizeType,u=o.getTempLocal(e.type,!1),h=new Array;if(h.push(a.createSetLocal(u.index,s.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==l.ElementKind.FIELD){var y=m,g=y.type,E=g.toNativeType(),T=y.prototype.declaration;if(assert(!y.isAny(p.CommonFlags.CONST)),T.initializer)h.push(a.createStore(g.byteSize,a.createGetLocal(u.index,c),this.compileExpression(T.initializer,g,1,0),E,y.memoryOffset));else{var f=y.prototype.declaration.parameterIndex;h.push(a.createStore(g.byteSize,a.createGetLocal(u.index,c),f>=0?a.createGetLocal(1+f,E):g.toNativeZero(a),E,y.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(u.index,c)),o.freeTempLocal(u),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(n==c.NativeType.I64?r.createBinary(c.BinaryOp.NeI64,r.createGetLocal(0,c.NativeType.I64),r.createI64(0)):r.createGetLocal(0,c.NativeType.I32),r.createGetLocal(0,n),r.createTeeLocal(0,this.makeAllocate(e,t)))},t.prototype.addDebugLocation=function(e,t){var r=this.currentFunction,n=t.source;n.debugInfoIndex<0&&(n.debugInfoIndex=this.module.addDebugInfoFile(n.normalizedPath)),t.debugInfoRef=e,r.debugLocations.push(t)},t}(o.DiagnosticEmitter);function T(e,t){switch(void 0===t&&(t=e.simpleName),e.kind){case l.ElementKind.FUNCTION:return(r=e.parent||e.prototype.parent)?T(r)+(e.is(p.CommonFlags.INSTANCE)?p.INSTANCE_DELIMITER:p.STATIC_DELIMITER)+t:t;case l.ElementKind.FIELD:case l.ElementKind.ENUMVALUE:return T(r=assert(e.parent))+(e.is(p.CommonFlags.INSTANCE)?p.INSTANCE_DELIMITER:p.STATIC_DELIMITER)+t;case l.ElementKind.CLASS:return(r=e.prototype.parent)?T(r)+p.STATIC_DELIMITER+t:t;default:var r;return(r=e.parent)?T(r)+p.STATIC_DELIMITER+t:t}}function f(e,t,r){if(void 0===r&&(r=null),y=r?r.simpleName:t.range.source.simplePath,g=e.simpleName,e.hasDecorator(l.DecoratorFlags.EXTERNAL)){var n=e.program,i=assert(h.findDecorator(h.DecoratorKind.EXTERNAL,t.decorators)),a=i.arguments;if(a&&a.length){var s=a[0];s.kind==h.NodeKind.LITERAL&&s.literalKind==h.LiteralKind.STRING?(g=s.value,a.length>=2&&((s=a[1]).kind==h.NodeKind.LITERAL&&s.literalKind==h.LiteralKind.STRING?(y=g,g=s.value,a.length>2&&n.error(o.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"2",a.length.toString())):n.error(o.DiagnosticCode.String_literal_expected,s.range))):n.error(o.DiagnosticCode.String_literal_expected,s.range)}else n.error(o.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,i.range,"1","0")}}t.Compiler=E},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var i=r(0),a=r(5),s=r(8),o=r(1),c=r(3),p=r(2),l=i.LIBRARY_PREFIX+"builtins.ts",u=function(e){function t(){var t=e.call(this)||this;return t.backlog=new Array,t.seenlog=new Set,t.donelog=new Set,t.onComment=null,t.tryParseSignatureIsSignature=!1,t.parseParametersThis=null,t.program=new a.Program(t.diagnostics),t}return n(t,e),t.prototype.parseFile=function(e,t,r){var n=c.normalizePath(t),a=p.mangleInternalPath(n);if(!this.donelog.has(a)){this.donelog.add(a),this.seenlog.add(a);var o=new p.Source(n,e,r?p.SourceKind.ENTRY:t.startsWith(i.LIBRARY_PREFIX)&&t.indexOf(i.PATH_DELIMITER,i.LIBRARY_PREFIX.length)<0?p.SourceKind.LIBRARY:p.SourceKind.DEFAULT),u=this.program;u.sources.push(o),o.normalizedPath==l&&o.set(i.CommonFlags.BUILTIN);var h=new s.Tokenizer(o,u.diagnostics);h.onComment=this.onComment,o.tokenizer=h;for(var d=o.statements;!h.skip(s.Token.ENDOFFILE);){var _=this.parseTopLevelStatement(h);_&&(_.parent=o,d.push(_))}h.finish()}},t.prototype.parseTopLevelStatement=function(e,t){void 0===t&&(t=null);for(var r=i.CommonFlags.NONE,n=-1,a=null;e.skip(s.Token.AT);){n<0&&(n=e.tokenPos);var c=this.parseDecorator(e);c?(a||(a=[]),a.push(c)):this.skipStatement(e)}r|=e.source.flags&i.CommonFlags.BUILTIN;var p=0,l=0;e.skip(s.Token.EXPORT)&&(e.skip(s.Token.DEFAULT)&&this.error(o.DiagnosticCode.Operation_not_supported,e.range()),n<0&&(n=e.tokenPos),r|=i.CommonFlags.EXPORT,p=e.tokenPos,l=e.pos);var u=null!=t&&t.is(i.CommonFlags.AMBIENT);e.skip(s.Token.DECLARE)?(n<0&&(n=e.tokenPos),u&&this.error(o.DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,e.range()),r|=i.CommonFlags.DECLARE|i.CommonFlags.AMBIENT):u&&(r|=i.CommonFlags.AMBIENT);var h=null,d=e.peek();switch(n<0&&(n=e.nextTokenPos),d){case s.Token.CONST:if(e.next(),r|=i.CommonFlags.CONST,e.skip(s.Token.ENUM)){h=this.parseEnum(e,r,a,n);break}h=this.parseVariable(e,r,a,n),a=null;break;case s.Token.LET:r|=i.CommonFlags.LET;case s.Token.VAR:e.next(),h=this.parseVariable(e,r,a,n),a=null;break;case s.Token.ENUM:e.next(),h=this.parseEnum(e,r,a,n),a=null;break;case s.Token.FUNCTION:e.next(),h=this.parseFunction(e,r,a,n),a=null;break;case s.Token.ABSTRACT:var _=e.mark();if(e.next(),!e.skip(s.Token.CLASS)){e.reset(_),h=this.parseStatement(e,!0);break}e.discard(_),r|=i.CommonFlags.ABSTRACT;case s.Token.CLASS:case s.Token.INTERFACE:e.next(),h=this.parseClassOrInterface(e,r,a,n),a=null;break;case s.Token.NAMESPACE:_=e.mark();e.next(),e.peek(!1,s.IdentifierHandling.PREFER)==s.Token.IDENTIFIER?(e.discard(_),h=this.parseNamespace(e,r,a,n),a=null):(e.reset(_),h=this.parseStatement(e,!0));break;case s.Token.IMPORT:e.next(),h=(r|=i.CommonFlags.IMPORT)&i.CommonFlags.EXPORT?this.parseExportImport(e,n):this.parseImport(e);break;case s.Token.TYPE:_=e.mark();e.next(),e.peek(!1,s.IdentifierHandling.PREFER)==s.Token.IDENTIFIER?(e.discard(_),h=this.parseTypeDeclaration(e,r,a,n),a=null):(e.reset(_),h=this.parseStatement(e,!0));break;default:r&i.CommonFlags.EXPORT?h=this.parseExport(e,r,n):(l&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(p,l),"export"),t||(h=this.parseStatement(e,!0)))}if(a)for(var m=0,y=a.length;m"),null}if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"null"),null;_=!0}n=p.Node.createType(h,d,_,e.range(a,e.pos))}for(;e.skip(s.Token.OPENBRACKET);){var y=e.tokenPos;if(!e.skip(s.Token.CLOSEBRACKET))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;var g=e.range(y,e.pos);_=!1;if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"null"),null;_=!0}if(n=p.Node.createType(p.Node.createIdentifierExpression("Array",g),[n],_,e.range(a,e.pos)),_)break}return n},t.prototype.tryParseSignature=function(e){var t,r=e.mark(),n=e.tokenPos,i=null,a=null,c=!1;if(e.skip(s.Token.CLOSEPAREN))c=!0,e.discard(r),i=[];else{c=!1;do{var l=p.ParameterKind.DEFAULT;if(e.skip(s.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),l=p.ParameterKind.REST),e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return e.reset(r),this.tryParseSignatureIsSignature=!1,null;c=!0,e.discard(r);var u=this.parseType(e,!1);if(!u)return null;if(u.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,u.range),this.tryParseSignatureIsSignature=!0,null;a=u}else{if(!e.skipIdentifier())return c?this.error(o.DiagnosticCode.Identifier_expected,e.range()):e.reset(r),this.tryParseSignatureIsSignature=c,null;var h=p.Node.createIdentifierExpression(e.readIdentifier(),e.range(e.tokenPos,e.pos));if(e.skip(s.Token.QUESTION)&&(c=!0,e.discard(r),l==p.ParameterKind.REST?this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):l=p.ParameterKind.OPTIONAL),e.skip(s.Token.COLON)){c=!0,e.discard(r);var d=this.parseType(e);if(!d)return this.tryParseSignatureIsSignature=c,null;var _=new p.ParameterNode;_.parameterKind=l,_.name=h,_.type=d,i?i.push(_):i=[_]}else c&&this.error(o.DiagnosticCode.Type_expected,e.range())}}while(e.skip(s.Token.COMMA));if(!e.skip(s.Token.CLOSEPAREN))return 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,p.Node.createSignature(i||[],t,a,!1,e.range(n,e.pos))):(this.tryParseSignatureIsSignature=c,null)):(c?this.error(o.DiagnosticCode._0_expected,e.range(),"=>"):e.reset(r),this.tryParseSignatureIsSignature=c,null)},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skipIdentifier()){for(var r=e.readIdentifier(),n=p.Node.createIdentifierExpression(r,e.range(t,e.pos));e.skip(s.Token.DOT);){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;r=e.readIdentifier(),n=p.Node.createPropertyAccessExpression(n,p.Node.createIdentifierExpression(r,e.range()),e.range(t,e.pos))}var i=void 0;if(!e.skip(s.Token.OPENPAREN))return p.Node.createDecorator(n,null,e.range(t,e.pos));if(i=this.parseArguments(e))return p.Node.createDecorator(n,i,e.range(t,e.pos))}else this.error(o.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r,n){var i=new Array;do{var a=this.parseVariableDeclaration(e,t,r);if(!a)return null;i.push(a)}while(e.skip(s.Token.COMMA));var o=p.Node.createVariableStatement(i,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),o},t.prototype.parseVariableDeclaration=function(e,t,r){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var n=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=t,c=null;e.skip(s.Token.COLON)&&(c=this.parseType(e));var l=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()),!(l=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 p.Node.createVariableDeclaration(n,c,l,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=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.next()!=s.Token.OPENBRACE)return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;for(var c=new Array;!e.skip(s.Token.CLOSEBRACE);){var l=this.parseEnumValue(e,i.CommonFlags.NONE);if(!l)return null;if(c.push(l),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEBRACE))break;return this.error(o.DiagnosticCode._0_expected,e.range(),"}"),null}}var u=p.Node.createEnumDeclaration(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=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),n=null;return e.skip(s.Token.EQUALS)&&!(n=this.parseExpression(e,2))?null:p.Node.createEnumValueDeclaration(r,n,t,s.Range.join(r.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=s.Token.SEMICOLON&&e.nextToken!=s.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=p.Node.createReturnStatement(t,e.range());return e.skip(s.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){for(var t=new Array;!e.skip(s.Token.GREATERTHAN);){var r=this.parseTypeParameter(e);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.GREATERTHAN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),">"),null}}return 0===t.length&&this.error(o.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range()),t},t.prototype.parseTypeParameter=function(e){if(e.next()==s.Token.IDENTIFIER){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(s.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return p.Node.createTypeParameter(t,r,s.Range.join(t.range,e.range()))}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e,t){void 0===t&&(t=!1);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==p.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 l=this.parseParameter(e,t);if(!l)return null;switch(n&&!a&&(this.error(o.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,n.name.range),a=!0),l.parameterKind){default:i&&this.error(o.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,l.name.range);break;case p.ParameterKind.OPTIONAL:i=!0;break;case p.ParameterKind.REST:n=l}if(r.push(l),!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 l=e.mark();e.next(),e.peek()!=s.Token.COLON?(e.discard(l),a||(a=e.range()),c|=i.CommonFlags.READONLY):e.reset(l)}if(e.skip(s.Token.DOT_DOT_DOT)&&(c?this.error(o.DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,e.range()):a=e.range(),r=!0),e.skipIdentifier()){r||(a=e.range());var u=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),h=null;if((n=e.skip(s.Token.QUESTION))&&r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,u.range),e.skip(s.Token.COLON)){if(!(h=this.parseType(e)))return null}else h=p.Node.createOmittedType(e.range(e.pos));var d=null;if(e.skip(s.Token.EQUALS)&&(r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,u.range),n?this.error(o.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,u.range):n=!0,!(d=this.parseExpression(e,2))))return null;var _=p.Node.createParameter(u,h,d,r?p.ParameterKind.REST:n?p.ParameterKind.OPTIONAL:p.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=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=-1,l=null;if(e.skip(s.Token.LESSTHAN)){if(c=e.tokenPos,!(l=this.parseTypeParameters(e)))return null;t|=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;_||(_=p.Node.createOmittedType(e.range(e.pos)),d||this.error(o.DiagnosticCode.Type_expected,_.range));var m=p.Node.createSignature(u,_,h,!1,e.range(c,e.pos)),y=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()),!(y=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 g=p.Node.createFunctionDeclaration(a,l,m,y,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),g},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==s.Token.FUNCTION){if(t=e.skipIdentifier()?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==s.Token.OPENPAREN),t=p.Node.createEmptyIdentifierExpression(e.range(e.tokenPos));var i=e.pos,a=this.parseParameters(e);return a?this.parseFunctionExpressionCommon(e,t,a,n,r,i):null},t.prototype.parseFunctionExpressionCommon=function(e,t,r,n,a,c){void 0===a&&(a=-1),void 0===c&&(c=-1),a<0&&(a=t.range.start),c<0&&(c=a);var l=null;if(e.skip(s.Token.COLON)){if(!(l=this.parseType(e)))return null}else l=p.Node.createOmittedType(e.range(e.pos)),this.error(o.DiagnosticCode.Type_expected,l.range);if(n&&!e.skip(s.Token.EQUALS_GREATERTHAN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var u,h=p.Node.createSignature(r,l,null,!1,e.range(c,e.pos));if(n)u=this.parseStatement(e,!1);else{if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;u=this.parseBlockStatement(e,!1)}if(!u)return null;var d=p.Node.createFunctionDeclaration(t,null,h,u,null,n?i.CommonFlags.ARROW:i.CommonFlags.NONE,e.range(a,e.pos));return p.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,l=p.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!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,h.range),null;u=h}var d=null;if(e.skip(s.Token.IMPLEMENTS)){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,y=new Array;if(a?(assert(!d),m=p.Node.createInterfaceDeclaration(l,c,u,y,r,t,e.range(n,e.pos))):m=p.Node.createClassDeclaration(l,c,u,d,y,r,t,e.range(n,e.pos)),!e.skip(s.Token.CLOSEBRACE))do{var g=this.parseClassMember(e,m);if(!g)return null;g.parent=m,y.push(g)}while(!e.skip(s.Token.CLOSEBRACE));return m},t.prototype.parseClassExpression=function(e){var t,r=e.tokenPos;if(t=e.skipIdentifier()?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.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=p.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 p.Node.createClassExpression(a)},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=t.kind==p.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 l=t.flags&i.CommonFlags.AMBIENT;n&&(l|=i.CommonFlags.VIRTUAL),e.skip(s.Token.PUBLIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"public"),l|=i.CommonFlags.PUBLIC):e.skip(s.Token.PRIVATE)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"private"),l|=i.CommonFlags.PRIVATE):e.skip(s.Token.PROTECTED)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"protected"),l|=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"),l|=i.CommonFlags.STATIC,u=e.tokenPos,h=e.pos):(l|=i.CommonFlags.INSTANCE,e.skip(s.Token.ABSTRACT)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"abstract"),l|=i.CommonFlags.ABSTRACT,d=e.tokenPos,_=e.pos),t.flags&i.CommonFlags.GENERIC&&(l|=i.CommonFlags.GENERIC_CONTEXT));var m=0,y=0;e.skip(s.Token.READONLY)&&(l|=i.CommonFlags.READONLY,m=e.tokenPos,y=e.pos);var g=e.mark(),E=!1,T=!1,f=!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(g):(l|=i.CommonFlags.GET,T=!0,I=e.tokenPos,v=e.pos,l&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly")):e.skip(s.Token.SET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(g):(l|=i.CommonFlags.SET|i.CommonFlags.SET,f=!0,I=e.tokenPos,v=e.pos,l&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly")):e.skip(s.Token.CONSTRUCTOR)&&(E=!0,(l|=i.CommonFlags.CONSTRUCTOR)&i.CommonFlags.STATIC&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(u,h),"static"),l&i.CommonFlags.ABSTRACT&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(d,_),"abstract"),l&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly"))),!E&&!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var A=E?p.Node.createConstructorExpression(e.range()):p.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)):T||f?this.error(o.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(N,e.pos)):l|=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 p.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case s.Token.THIS:return p.Node.createThisExpression(e.range(r,e.pos));case s.Token.CONSTRUCTOR:return p.Node.createConstructorExpression(e.range(r,e.pos));case s.Token.SUPER:return p.Node.createSuperExpression(e.range(r,e.pos));case s.Token.STRINGLITERAL:return p.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case s.Token.INTEGERLITERAL:return p.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case s.Token.FLOATLITERAL:return p.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case s.Token.SLASH:var d=e.readRegexpPattern();return e.skip(s.Token.SLASH)?p.Node.createRegexpLiteralExpression(d,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(o.DiagnosticCode._0_expected,e.range(),"/"),null);case s.Token.FUNCTION:return this.parseFunctionExpression(e);case s.Token.CLASS:return this.parseClassExpression(e);default:return this.error(o.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){var t=e.mark();if(!e.skip(s.Token.LESSTHAN))return null;var r=new Array;do{if(e.peek()===s.Token.GREATERTHAN)break;var n=this.parseType(e,!0,!0);if(!n)return e.reset(t),null;r.push(n)}while(e.skip(s.Token.COMMA));return e.skip(s.Token.GREATERTHAN)&&e.skip(s.Token.OPENPAREN)?r:(e.reset(t),null)},t.prototype.parseArguments=function(e){for(var t=new Array;!e.skip(s.Token.CLOSEPAREN);){var r=this.parseExpression(e,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(p.nodeIsCallable(r.kind))for(var a=null;e.skip(s.Token.OPENPAREN)||p.nodeIsGenericCallable(r.kind)&&null!==(a=this.tryParseTypeArgumentsBeforeArguments(e));){var c=this.parseArguments(e);if(!c)return null;r=p.Node.createCallExpression(r,a,c,e.range(i,e.pos))}for(var l,u=null;(l=h(n=e.peek()))>=t;)switch(e.next(),n){case s.Token.AS:var _=this.parseType(e);if(!_)return null;r=p.Node.createAssertionExpression(p.AssertionKind.AS,r,_,e.range(i,e.pos));break;case s.Token.INSTANCEOF:var m=this.parseType(e);if(!m)return null;r=p.Node.createInstanceOfExpression(r,m,e.range(i,e.pos));break;case s.Token.OPENBRACKET:if(!(u=this.parseExpression(e)))return null;if(!e.skip(s.Token.CLOSEBRACKET))return this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;r=p.Node.createElementAccessExpression(r,u,e.range(i,e.pos));break;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:r.kind!=p.NodeKind.IDENTIFIER&&r.kind!=p.NodeKind.ELEMENTACCESS&&r.kind!=p.NodeKind.PROPERTYACCESS&&this.error(o.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,r.range),r=p.Node.createUnaryPostfixExpression(n,r,e.range(i,e.pos));break;case s.Token.QUESTION:var y=this.parseExpression(e);if(!y)return null;if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;var g=this.parseExpression(e,t>1?2:1);if(!g)return null;r=p.Node.createTernaryExpression(r,y,g,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=p.Node.createCommaExpression(E,e.range(i,e.pos));break;default:if(!(u=this.parseExpression(e,d(n)?l:l+1)))return null;if(n==s.Token.DOT)if(u.kind==p.NodeKind.IDENTIFIER)r=p.Node.createPropertyAccessExpression(r,u,e.range(i,e.pos));else{if(u.kind!=p.NodeKind.CALL)return this.error(o.DiagnosticCode.Identifier_expected,u.range),null;var T=u;if(T.expression.kind!=p.NodeKind.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,T.expression.range),null;T.expression=p.Node.createPropertyAccessExpression(r,T.expression,e.range(i,e.pos)),r=T}else r=p.Node.createBinaryExpression(n,r,u,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 h(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 d(e){switch(e){case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:case s.Token.QUESTION:case s.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=u,function(e){e[e.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,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),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(5),c=r(3),p=function(){function e(e,t){void 0===t&&(t=!1),this.todo=[],this.seen=new Set,this.program=e,this.includePrivate}return e.prototype.walk=function(){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)}}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;00&&this.push(", "),this.push("$"),this.push(i.toString(10)),this.push(": "),this.push(a(n.getFunctionParamType(e,i)));this.push("): "),this.push(a(n.getFunctionResultType(e))),this.push(" "),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("{\n"),this.decompileExpression(r),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("\n}\n"),++this.functionId},e.prototype.decompileExpression=function(e){var t,r,i,s,o=n.getExpressionId(e),c=n.getExpressionType(e);switch(o){case n.ExpressionId.Block:for(null!=(r=n.getBlockName(e))&&(this.push(r),this.push(": ")),this.push("{\n"),s=n.getBlockChildCount(e),i=0;i("),this.push(n.getLoadOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getLoadPtr(e)),void this.push(")");case n.ExpressionId.Store:return this.push("store<"),this.push(a(c)),this.push(">("),this.push(n.getStoreOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getStorePtr(e)),this.push(", "),this.decompileExpression(n.getStoreValue(e)),void this.push(")");case n.ExpressionId.Const:switch(c){case n.NativeType.I32:return void this.push(n.getConstValueI32(e).toString(10));case n.NativeType.I64:return void this.push(i64_to_string(i64_new(n.getConstValueI64Low(e),n.getConstValueI64High(e))));case n.NativeType.F32:return void this.push(n.getConstValueF32(e).toString(10));case n.NativeType.F64:return void this.push(n.getConstValueF64(e).toString(10))}break;case n.ExpressionId.Unary:switch(n.getUnaryOp(e)){case n.UnaryOp.ClzI32:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI32:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI32:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NegF32:case n.UnaryOp.NegF64:return this.push("-"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.AbsF32:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF32:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF32:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF32:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF32:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF32:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.EqzI32:case n.UnaryOp.EqzI64:return this.push("!"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ClzI64:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI64:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI64:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.AbsF64:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF64:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF64:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF64:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF64:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF64:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ExtendI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ExtendU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.WrapI64:case n.UnaryOp.TruncF32ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretF32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretF64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ConvertI32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.PromoteF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.DemoteF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretI32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretI64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")")}break;case n.ExpressionId.Binary:switch(n.getBinaryOp(e)){case n.BinaryOp.AddI32:case n.BinaryOp.AddI64:case n.BinaryOp.AddF32:case n.BinaryOp.AddF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" + "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.SubI32:case n.BinaryOp.SubI64:case n.BinaryOp.SubF32:case n.BinaryOp.SubF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" - "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.MulI32:case n.BinaryOp.MulI64:case n.BinaryOp.MulF32:case n.BinaryOp.MulF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" * "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivI32:case n.BinaryOp.DivI64:case n.BinaryOp.DivF32:case n.BinaryOp.DivF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RemI32:case n.BinaryOp.RemI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.AndI32:case n.BinaryOp.AndI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" & "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.OrI32:case n.BinaryOp.OrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" | "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.XorI32:case n.BinaryOp.XorI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" ^ "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShlI32:case n.BinaryOp.ShlI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" << "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrU32:case n.BinaryOp.ShrU64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >>> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrI32:case n.BinaryOp.ShrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI32:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI32:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.EqI32:case n.BinaryOp.EqI64:case n.BinaryOp.EqF32:case n.BinaryOp.EqF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" == "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.NeI32:case n.BinaryOp.NeI64:case n.BinaryOp.NeF32:case n.BinaryOp.NeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" != "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtI32:case n.BinaryOp.LtI64:case n.BinaryOp.LtF32:case n.BinaryOp.LtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeI32:case n.BinaryOp.LeI64:case n.BinaryOp.LeF32:case n.BinaryOp.LeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtI32:case n.BinaryOp.GtI64:case n.BinaryOp.GtF32:case n.BinaryOp.GtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeI32:case n.BinaryOp.GeI64:case n.BinaryOp.GeF32:case n.BinaryOp.GeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI64:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI64:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.LtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.CopysignF32:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF32:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF32:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.CopysignF64:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF64:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF64:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")")}return;case n.ExpressionId.Select:return this.push("select<"),this.push(a(c)),this.push(">("),this.decompileExpression(n.getSelectThen(e)),this.push(", "),this.decompileExpression(n.getSelectElse(e)),this.push(", "),this.decompileExpression(n.getSelectCondition(e)),void this.push(")");case n.ExpressionId.Drop:return this.decompileExpression(n.getDropValue(e)),void this.push(";\n");case n.ExpressionId.Return:return void((t=n.getReturnValue(e))?(this.push("return "),this.decompileExpression(t),this.push(";\n")):this.push("return;\n"));case n.ExpressionId.Host:switch(n.getHostOp(e)){case n.HostOp.CurrentMemory:return void this.push("current_memory()");case n.HostOp.GrowMemory:return this.push("grow_memory("),this.decompileExpression(n.getHostOperand(e,0)),void this.push(")")}break;case n.ExpressionId.Nop:return void this.push(";\n");case n.ExpressionId.Unreachable:return void this.push("unreachable()");case n.ExpressionId.AtomicCmpxchg:case n.ExpressionId.AtomicRMW:case n.ExpressionId.AtomicWait:case n.ExpressionId.AtomicWake:}throw new Error("not implemented")},e.prototype.push=function(e){this.text.push(e)},e.prototype.finish=function(){var e=this.text.join("");return this.text=[],e},e}();function a(e){switch(e){case n.NativeType.None:return"void";case n.NativeType.I32:return"i32";case n.NativeType.I64:return"i64";case n.NativeType.F32:return"f32";case n.NativeType.F64:return"f64";case n.NativeType.Unreachable:throw new Error("unreachable type");case n.NativeType.Auto:throw new Error("auto type");default:throw new Error("unexpected type")}}t.Decompiler=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(10),i=r(13),a=r(12),s=r(1);t.formatDiagnostic=s.formatDiagnosticMessage;var o=r(11);t.parseFile=function(e,t,r,n){return void 0===r&&(r=!1),void 0===n&&(n=null),n||(n=new o.Parser),n.parseFile(e,t,r),n},t.nextFile=function(e){return e.nextFile()},t.nextDiagnostic=function(e){var t=e.program;return t.diagnosticsOffset>>=0)&&e<256)&&(n=s[e])?n:(r=p(e,(0|e)<0?-1:0,!0),i&&(s[e]=r),r):(i=-128<=(e|=0)&&e<128)&&(n=a[e])?n:(r=p(e,e<0?-1:0,!1),i&&(a[e]=r),r)}function c(e,t){if(isNaN(e))return t?E:g;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():p(e%d|0,e/d|0,t)}function p(e,t,r){return new n(e,t,r)}n.fromInt=o,n.fromNumber=c,n.fromBits=p;var l=Math.pow;function u(e,t,r){if(0===e.length)throw Error("empty string");if("NaN"===e||"Infinity"===e||"+Infinity"===e||"-Infinity"===e)return g;if("number"==typeof t?(r=t,t=!1):t=!!t,(r=r||10)<2||360)throw Error("interior hyphen");if(0===n)return u(e.substring(1),t,r).neg();for(var i=c(l(r,8)),a=g,s=0;s>>0:this.low},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 p+s;for(;p.length<6;)p="0"+p;s=""+p+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(T)},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,l=0,u=0,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,u+=(d+=n+c)>>>16,l+=(u+=r+o)>>>16,l+=t+s,p((d&=65535)<<16|(_&=65535),(l&=65535)<<16|(u&=65535),this.unsigned)},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 g;if(i(e)||(e=h(e)),r)return p(r.mul(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned);if(e.isZero())return g;if(this.eq(C))return e.isOdd()?C:g;if(e.eq(C))return this.isOdd()?C:g;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(y)&&e.lt(y))return c(this.toNumber()*e.toNumber(),this.unsigned);var t=this.high>>>16,n=65535&this.high,a=this.low>>>16,s=65535&this.low,o=e.high>>>16,l=65535&e.high,u=e.low>>>16,d=65535&e.low,_=0,m=0,E=0,T=0;return E+=(T+=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*l)>>>16,_+=t*d+n*u+a*l+s*o,p((E&=65535)<<16|(T&=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?p((this.unsigned?r.div_u:r.div_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?E:g;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return E;if(e.gt(this.shru(1)))return f;a=E}else{if(this.eq(C))return e.eq(T)||e.eq(I)?C:e.eq(C)?T:(t=this.shr(1).div(e).shl(1)).eq(g)?e.isNegative()?T:I:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(C))return this.unsigned?E:g;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();a=g}for(n=this;n.gte(e);){t=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var s=Math.ceil(Math.log(t)/Math.LN2),o=s<=48?1:l(2,s-48),u=c(t),d=u.mul(e);d.isNegative()||d.gt(n);)d=(u=c(t-=o,this.unsigned)).mul(e);u.isZero()&&(u=T),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?p((this.unsigned?r.rem_u:r.rem_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this.sub(this.div(e).mul(e))},N.mod=N.modulo,N.rem=N.modulo,N.not=function(){return p(~this.low,~this.high,this.unsigned)},N.and=function(e){return i(e)||(e=h(e)),p(this.low&e.low,this.high&e.high,this.unsigned)},N.or=function(e){return i(e)||(e=h(e)),p(this.low|e.low,this.high|e.high,this.unsigned)},N.xor=function(e){return i(e)||(e=h(e)),p(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?p(this.low<>>32-e,this.unsigned):p(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):p(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},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?p(this.low>>>e|t<<32-e,t>>>e,this.unsigned):p(32===e?t:t>>>e-32,0,this.unsigned)},N.shru=N.shiftRightUnsigned,N.shr_u=N.shiftRightUnsigned,N.toSigned=function(){return this.unsigned?p(this.low,this.high,!1):this},N.toUnsigned=function(){return this.unsigned?this:p(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){(function(e){const t=e.Long||r(15);e.i64_zero=t.ZERO,e.i64_one=t.ONE,e.i64_new=function(e,r){return t.fromBits(e,r)},e.i64_low=function(e){return e.low},e.i64_high=function(e){return e.high},e.i64_add=function(e,t){return e.add(t)},e.i64_sub=function(e,t){return e.sub(t)},e.i64_mul=function(e,t){return e.mul(t)},e.i64_div=function(e,t){return e.div(t)},e.i64_div_u=function(e,t){return e.toUnsigned().div(t.toUnsigned()).toSigned()},e.i64_rem=function(e,t){return e.mod(t)},e.i64_rem_u=function(e,t){return e.toUnsigned().mod(t.toUnsigned()).toSigned()},e.i64_and=function(e,t){return e.and(t)},e.i64_or=function(e,t){return e.or(t)},e.i64_xor=function(e,t){return e.xor(t)},e.i64_shl=function(e,t){return e.shl(t)},e.i64_shr=function(e,t){return e.shr(t)},e.i64_shr_u=function(e,t){return e.shru(t)},e.i64_not=function(e){return e.not()},e.i64_eq=function(e,t){return e.eq(t)},e.i64_ne=function(e,t){return e.ne(t)},e.i64_align=function(e,r){assert(r&&0==(r&r-1));var n=t.fromInt(r-1);return e.add(n).and(n.not())},e.i64_is_i8=function(e){return 0===e.high&&e.low>=0&&e.low<=i8.MAX_VALUE||-1===e.high&&e.low>=i8.MIN_VALUE&&e.low<0},e.i64_is_i16=function(e){return 0===e.high&&e.low>=0&&e.low<=i16.MAX_VALUE||-1===e.high&&e.low>=i16.MIN_VALUE&&e.low<0},e.i64_is_i32=function(e){return 0===e.high&&e.low>=0||-1===e.high&&e.low<0},e.i64_is_u8=function(e){return 0===e.high&&e.low>=0&&e.low<=u8.MAX_VALUE},e.i64_is_u16=function(e){return 0===e.high&&e.low>=0&&e.low<=u16.MAX_VALUE},e.i64_is_u32=function(e){return 0===e.high},e.i64_is_bool=function(e){return 0===e.high&&(0===e.low||1===e.low)};const n=t.fromNumber(f32.MIN_SAFE_INTEGER),i=t.fromNumber(f32.MAX_SAFE_INTEGER);e.i64_is_f32=function(e){return e.gte(n)&&e.lte(i)};const a=t.fromNumber(f64.MIN_SAFE_INTEGER),s=t.fromNumber(f64.MAX_SAFE_INTEGER);e.i64_is_f64=function(e){return e.gte(a)&&e.lte(s)},e.i64_to_f32=function(t){return e.Math.fround(t.toNumber())},e.i64_to_f64=function(e){return e.toNumber()},e.i64_to_string=function(e,t){return(t?e.toUnsigned():e).toString(10)}}).call(this,r(7))},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(7))},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),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(5),p=r(2),l=r(6),u=r(0);!function(e){e[e.REPORT=0]="REPORT",e[e.SWALLOW=1]="SWALLOW"}(s||(s={}));var h=function(e){function t(t){var r=e.call(this,t.diagnostics)||this;return r.resolvedThisExpression=null,r.resolvedElementExpression=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==p.NodeKind.SIGNATURE){var n=this.resolveSignature(e,t,r);return n?e.isNullable?n.type.asNullable():n.type:null}assert(e.kind==p.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):l.Type.i32;case c.ElementKind.CLASS_PROTOTYPE:var y=this.resolveClassInclTypeArguments(m,i.typeArguments,t,e);return y?e.isNullable?y.type.asNullable():y.type:null}var g=this.program.typeAliases.get(a);if(g)return this.resolveType(g.type,t,r);var E=i.typeArguments;if(E){for(var T=E.length,f=new Array(T),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,H,V,R||g,r),e.instances.set(d,_),this.program.instancesLookup.set(H,_),_},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=l.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,y,g,E,T;void 0===r&&(r=null),void 0===n&&(n=s.REPORT);var f=t?l.typesToString(t):"",I=e.instances.get(f);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+="<"+f+">"),(I=new c.Class(e,B,U,t,F)).contextualTypeArguments=r,e.instances.set(f,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()),V=z.next();!V.done;V=z.next()){var H=V.value;switch(H.kind){case c.ElementKind.FIELD_PROTOTYPE:I.members||(I.members=new Map);var X=H.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(H.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(H,U+u.INSTANCE_DELIMITER+H.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(H.simpleName,Q);break;case c.ElementKind.FUNCTION_PROTOTYPE:I.members||(I.members=new Map);var q=this.resolveFunctionPartially(H,t,n);if(!q)return null;q.internalName=U+u.INSTANCE_DELIMITER+q.simpleName,I.members.set(H.simpleName,q);break;case c.ElementKind.PROPERTY:I.members||(I.members=new Map);var j=assert(H.getterPrototype),Z=H.setterPrototype,$=new c.Property(this.program,H.simpleName,U+u.INSTANCE_DELIMITER+H.simpleName,e),J=this.resolveFunctionPartially(j,t,n);if(!J)return null;if(J.internalName=U+u.INSTANCE_DELIMITER+J.simpleName,$.getterPrototype=J,Z){var ee=this.resolveFunctionPartially(Z,t,n);if(!ee)return null;ee.internalName=U+u.INSTANCE_DELIMITER+ee.simpleName,$.setterPrototype=ee}I.members.set(H.simpleName,$);break;default:assert(!1)}}}catch(e){y={error:e}}finally{try{V&&!V.done&&(g=z.return)&&g.call(z)}finally{if(y)throw y.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&&(T=te.return)&&T.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,p=c.length;assert(p>0);var l=null!==t?t.length:0;if(p!=l)return i==s.REPORT&&this.error(o.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,p.toString(10),l.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){"use strict";function n(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24}function i(e,t,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function a(e,t){var r=n(e,t),i=n(e,t+4);return i64_new(r,i)}Object.defineProperty(t,"__esModule",{value:!0}),t.readI32=n,t.writeI32=i,t.readI64=a,t.writeI64=function(e,t,r){i(i64_low(e),t,r),i(i64_high(e),t,r+4)},t.readF32=function(e,t){return i32_as_f32(n(e,t))},t.writeF32=function(e,t,r){i(f32_as_i32(e),t,r)},t.readF64=function(e,t){return i64_as_f64(a(e,t))},t.writeF64=function(e,t,r){var n=f64_as_i64(e);i(i64_low(n),t,r),i(i64_high(n),t,r+4)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=" ",i=" ",a=" ";t.indent=function(e,t){for(;t>=4;)e.push(a),t-=4;t>=2&&(e.push(i),t-=2),t&&e.push(n)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=47;function i(e){for(var t,r=0,i=e.length;r+10||i=0;)if(e.charCodeAt(a)==n){r-a==3&&46==e.charCodeAt(a+1)&&46==e.charCodeAt(a+2)||(e=t?e.substring(0,a):e.substring(0,a)+e.substring(r+3),i-=r+3-a,r=a-1);break}if(a<0&&r>0&&(2!=r||46!=e.charCodeAt(0)||46!=e.charCodeAt(1))){i=(e=e.substring(r+4)).length;continue}}}r++}return i>0?e:"."}function a(e){for(var t=e.length;--t>0;)if(e.charCodeAt(t)==n)return e.substring(0,t);return"."}t.normalizePath=i,t.resolvePath=function(e,t){return e.startsWith("std/")?e:i(a(t)+String.fromCharCode(n)+e)},t.dirname=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NULL=0]="NULL",e[e.LINEFEED=10]="LINEFEED",e[e.CARRIAGERETURN=13]="CARRIAGERETURN",e[e.LINESEPARATOR=8232]="LINESEPARATOR",e[e.PARAGRAPHSEPARATOR=8233]="PARAGRAPHSEPARATOR",e[e.NEXTLINE=133]="NEXTLINE",e[e.SPACE=32]="SPACE",e[e.NONBREAKINGSPACE=160]="NONBREAKINGSPACE",e[e.ENQUAD=8192]="ENQUAD",e[e.EMQUAD=8193]="EMQUAD",e[e.ENSPACE=8194]="ENSPACE",e[e.EMSPACE=8195]="EMSPACE",e[e.THREEPEREMSPACE=8196]="THREEPEREMSPACE",e[e.FOURPEREMSPACE=8197]="FOURPEREMSPACE",e[e.SIXPEREMSPACE=8198]="SIXPEREMSPACE",e[e.FIGURESPACE=8199]="FIGURESPACE",e[e.PUNCTUATIONSPACE=8200]="PUNCTUATIONSPACE",e[e.THINSPACE=8201]="THINSPACE",e[e.HAIRSPACE=8202]="HAIRSPACE",e[e.ZEROWIDTHSPACE=8203]="ZEROWIDTHSPACE",e[e.NARROWNOBREAKSPACE=8239]="NARROWNOBREAKSPACE",e[e.IDEOGRAPHICSPACE=12288]="IDEOGRAPHICSPACE",e[e.MATHEMATICALSPACE=8287]="MATHEMATICALSPACE",e[e.OGHAM=5760]="OGHAM",e[e._=95]="_",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.AMPERSAND=38]="AMPERSAND",e[e.ASTERISK=42]="ASTERISK",e[e.AT=64]="AT",e[e.BACKSLASH=92]="BACKSLASH",e[e.BACKTICK=96]="BACKTICK",e[e.BAR=124]="BAR",e[e.CARET=94]="CARET",e[e.CLOSEBRACE=125]="CLOSEBRACE",e[e.CLOSEBRACKET=93]="CLOSEBRACKET",e[e.CLOSEPAREN=41]="CLOSEPAREN",e[e.COLON=58]="COLON",e[e.COMMA=44]="COMMA",e[e.DOLLAR=36]="DOLLAR",e[e.DOT=46]="DOT",e[e.DOUBLEQUOTE=34]="DOUBLEQUOTE",e[e.EQUALS=61]="EQUALS",e[e.EXCLAMATION=33]="EXCLAMATION",e[e.GREATERTHAN=62]="GREATERTHAN",e[e.HASH=35]="HASH",e[e.LESSTHAN=60]="LESSTHAN",e[e.MINUS=45]="MINUS",e[e.OPENBRACE=123]="OPENBRACE",e[e.OPENBRACKET=91]="OPENBRACKET",e[e.OPENPAREN=40]="OPENPAREN",e[e.PERCENT=37]="PERCENT",e[e.PLUS=43]="PLUS",e[e.QUESTION=63]="QUESTION",e[e.SEMICOLON=59]="SEMICOLON",e[e.SINGLEQUOTE=39]="SINGLEQUOTE",e[e.SLASH=47]="SLASH",e[e.TILDE=126]="TILDE",e[e.BACKSPACE=8]="BACKSPACE",e[e.FORMFEED=12]="FORMFEED",e[e.BYTEORDERMARK=65279]="BYTEORDERMARK",e[e.TAB=9]="TAB",e[e.VERTICALTAB=11]="VERTICALTAB"}(t.CharCode||(t.CharCode={})),t.isLineBreak=function(e){switch(e){case 10:case 13:case 8232:case 8233:return!0;default:return!1}},t.isWhiteSpace=function(e){switch(e){case 32:case 9:case 11:case 12:case 160:case 133:case 5760:case 8239:case 8287:case 12288:case 65279:return!0;default:return e>=8192&&e<=8203}},t.isDecimalDigit=function(e){return e>=48&&e<=57},t.isOctalDigit=function(e){return e>=48&&e<=55},t.isIdentifierStart=function(e){return e>=65&&e<=90||e>=97&&e<=122||36==e||95==e||e>127&&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(e2?(r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),c.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",c.length.toString(10)),T.createUnreachable()):r&&1==r.length?(m=e.compileExpression(c[0],e.options.usizeType,1,0),(b=2==c.length?u(e,c[1]):0)<0?T.createUnreachable():(e.currentType=r[0],T.createLoad(r[0].byteSize,r[0].is(5),m,r[0].is(4)&&h.is(4)&&h.size>r[0].size?(e.currentType=h).toNativeType():(e.currentType=r[0]).toNativeType(),b))):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),T.createUnreachable());case"store":if(e.currentType=a.Type.void,c.length<2||c.length>3)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),c.length<2?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"2",c.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();m=e.compileExpression(c[0],e.options.usizeType,1,0),y=e.compileExpression(c[1],r[0],r[0].is(4)?0:1,0);f=void 0;return r[0].is(4)&&(!e.currentType.is(4)||e.currentType.size1)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();var L;if(!(L=r[0].classReference))return e.error(n.DiagnosticCode.Operation_not_supported,d.range),T.createUnreachable();var b=void 0;if(c.length){if(c[0].kind!=i.NodeKind.LITERAL||c[0].literalKind!=i.LiteralKind.STRING)return e.error(n.DiagnosticCode.String_literal_expected,c[0].range),T.createUnreachable();var k=c[0].value,R=L.members?L.members.get(k):null;if(!R||R.kind!=o.ElementKind.FIELD)return e.error(n.DiagnosticCode.Type_0_has_no_property_1,c[0].range,L.internalName,k),T.createUnreachable();b=R.memoryOffset}else b=L.currentMemoryOffset;return e.options.isWasm64?h.is(4)&&h.size<=32?(e.currentType=a.Type.u32,T.createI32(b)):T.createI64(b):h.is(4)&&64==h.size?(e.currentType=a.Type.u64,T.createI64(b)):T.createI32(b);case"select":if(3!=c.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();m=e.compileExpression(c[0],r[0],1,0)}else m=e.compileExpressionRetainType(c[0],a.Type.i32,0);f=e.currentType;switch(y=e.compileExpression(c[1],f,1,0),g=e.makeIsTrueish(e.compileExpressionRetainType(c[2],a.Type.bool,0),e.currentType),e.currentType=f,e.currentType.kind){case 0:case 1:case 5:case 6:case 10:default:E=T.createSelect(m,y,g);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return E;case"unreachable":return 0!=c.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),T.createUnreachable();case"current_memory":return e.currentType=a.Type.i32,0!=c.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),T.createHost(s.HostOp.CurrentMemory);case"grow_memory":return e.currentType=a.Type.i32,1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),m=T.createUnreachable()):m=e.compileExpression(c[0],a.Type.i32,1,0),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),T.createHost(s.HostOp.GrowMemory,null,[m]);case"move_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=c.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),e.currentType=a.Type.void,T.createUnreachable();throw m=e.compileExpression(c[0],e.options.usizeType,1,0),y=e.compileExpression(c[1],e.options.usizeType,1,0),g=e.compileExpression(c[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"set_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=c.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),e.currentType=a.Type.void,T.createUnreachable();throw m=e.compileExpression(c[0],e.options.usizeType,1,0),y=e.compileExpression(c[1],a.Type.u32,1,0),g=e.compileExpression(c[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=r[0],T.createUnreachable()):(m=e.compileExpressionRetainType(c[0],r[0],0),e.currentType=r[0],e.currentType.size!=r[0].size?(e.error(n.DiagnosticCode.Operation_not_supported,d.range),T.createUnreachable()):m):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),T.createUnreachable());case"assert":if(c.length<1||c.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),c.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)):c.length>2&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",c.length.toString(10)),T.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();m=e.compileExpression(c[0],r[0],1,1)}else m=e.compileExpressionRetainType(c[0],a.Type.bool,1);f=e.currentType;if(e.currentType=f.nonNullableType,e.options.noAssert)return h==a.Type.void?(e.currentType=a.Type.void,T.createNop()):m;var x=_(e,2==c.length?c[1]:null,d);if(e.currentType=f.nonNullableType,h==a.Type.void){switch(e.currentType.kind){default:E=T.createIf(T.createUnary(s.UnaryOp.EqzI32,m),x);break;case 3:case 8:E=T.createIf(T.createUnary(s.UnaryOp.EqzI64,m),x);break;case 4:case 9:E=T.createIf(T.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,m),x);break;case 11:E=T.createIf(T.createBinary(s.BinaryOp.EqF32,m,T.createF32(0)),x);break;case 12:E=T.createIf(T.createBinary(s.BinaryOp.EqF64,m,T.createF64(0)),x);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),E=x}e.currentType=a.Type.void}else switch(e.currentType.kind){case 0:case 1:case 5:case 6:case 10:A=e.currentFunction.flow,v=e.currentFunction.getAndFreeTempLocal(e.currentType,!A.canOverflow(m,e.currentType));E=T.createIf(T.createTeeLocal(v.index,m),T.createGetLocal(v.index,s.NativeType.I32),x);break;case 2:case 7:default:v=e.currentFunction.getAndFreeTempLocal(a.Type.i32,!1);E=T.createIf(T.createTeeLocal(v.index,m),T.createGetLocal(v.index,s.NativeType.I32),x);break;case 3:case 8:v=e.currentFunction.getAndFreeTempLocal(a.Type.i64,!1);E=T.createIf(T.createUnary(s.UnaryOp.EqzI64,T.createTeeLocal(v.index,m)),x,T.createGetLocal(v.index,s.NativeType.I64));break;case 4:case 9:v=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);E=T.createIf(T.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,T.createTeeLocal(v.index,m)),x,T.createGetLocal(v.index,e.options.nativeSizeType));break;case 11:v=e.currentFunction.getAndFreeTempLocal(a.Type.f32,!1);E=T.createIf(T.createBinary(s.BinaryOp.EqF32,T.createTeeLocal(v.index,m),T.createF32(0)),x,T.createGetLocal(v.index,s.NativeType.F32));break;case 12:v=e.currentFunction.getAndFreeTempLocal(a.Type.f64,!1);E=T.createIf(T.createBinary(s.BinaryOp.EqF64,T.createTeeLocal(v.index,m),T.createF64(0)),x,T.createGetLocal(v.index,s.NativeType.F64));break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),E=x}return E;case"unchecked":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),T.createUnreachable()):((A=e.currentFunction.flow).set(4096),E=e.compileExpressionRetainType(c[0],h,0),A.unset(4096),E);case"call_indirect":if(c.length<1)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),T.createUnreachable();var F=void 0;if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();F=r[0]}else F=h;if(m=e.compileExpressionRetainType(c[0],a.Type.u32,0),7!=e.currentType.kind)return e.error(n.DiagnosticCode.Operation_not_supported,c[0].range),T.createUnreachable();for(var D=c.length-1,B=new Array(D),U=new Array(D+1),P=F.toNativeType(),w=new Array(D),M=0;M1&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,i.range,"1",t.length.toString(10)),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"1",r.length.toString(10)),null}function u(e,t){var r,i;return e.options.isWasm64?(r=e.precomputeExpression(t,a.Type.usize64,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I64||0!=s.getConstValueI64High(r)||(i=s.getConstValueI64Low(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)):(r=e.precomputeExpression(t,a.Type.usize32,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I32||(i=s.getConstValueI32(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)),i}t.compileCall=c;var h="allocate_memory";t.compileAllocate=function(e,t,r){var i=e.program;assert(t.program==i);var a=e.module,s=e.options,c=i.elementsLookup.get(h);if(!c)return i.error(n.DiagnosticCode.Cannot_find_name_0,r.range,h),i.info(n.DiagnosticCode.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf,r.range),a.createUnreachable();if(c.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.error(n.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,c.internalName),a.createUnreachable();var p=e.resolver.resolveFunction(c,null);return p&&e.compileFunction(p)?(e.currentType=t.type,a.createCall(p.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],s.nativeSizeType)):a.createUnreachable()};var d="abort";function _(e,t,r){var n=e.program,i=e.module,c=n.typesLookup.get("string");if(!c)return i.createUnreachable();var p=n.elementsLookup.get(d);if(!p||p.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.createUnreachable();var l=e.resolver.resolveFunction(p,null);if(!l||!e.compileFunction(l))return i.createUnreachable();var u=null!=t?e.compileExpression(t,c,1,0):c.toNativeZero(i),h=e.compileStaticString(r.range.source.normalizedPath);return e.currentType=a.Type.void,i.createBlock(null,[i.createCallImport(l.internalName,[u,h,i.createI32(r.range.line),i.createI32(r.range.column)],s.NativeType.None),i.createUnreachable()])}t.compileAbort=_},function(t,r){t.exports=e},function(e,t,r){(function(e){const t=e.Binaryen||r(24);for(var n in t)(n.startsWith("_Binaryen")||n.startsWith("_Relooper"))&&(e[n]=t[n]);e.allocate_memory=function(e){return e?t._malloc(e):0},e.free_memory=function(e){e&&t._free(e)},e.move_memory=function(e,r,n){return t._memmove(e,r,n)},e.store=function(e,r){t.HEAPU8[e]=r},e.load=function(e){return t.HEAPU8[e]};const i=r(4).Module;i.prototype.toText=function(){return new t.Module(this.ref).emitText()},i.prototype.toAsmjs=function(){return new t.Module(this.ref).emitAsmjs()}}).call(this,r(7))},function(e,t){e.exports=(e=>{var t=new Uint8Array(0),r=0;e.allocate_memory=function(e){if(!(e>>>=0))return 0;if(r+e>t.length){var n=t;(t=new Uint8Array(Math.max(65536,t.length+e,2*t.length))).set(n)}var i=r;return 7&(r+=e)&&(r=1+(7|r)),i},e.free_memory=function(e){},e.move_memory=function(e,r,n){t.copyWithin(e,r,r+n)},e.store=function(e,r,n){t[e+(0|n)]=r},e.load=function(e,r){return t[e+(0|r)]}})},function(e,t,r){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self;function n(){Error.captureStackTrace?Error.captureStackTrace(this,n):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function i(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,i):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}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},n.prototype=Object.create(Error.prototype),n.prototype.name="UnreachableError",n.prototype.message="unreachable",t.unreachable=function(){throw new n},i.prototype=Object.create(Error.prototype),i.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new i(t)},t.changetype=function(e){return e},t.parseI32=function(e,t){return 0|parseInt(e,void 0)},String.fromCharCodes=function(e){return String.fromCharCode.apply(String,e)},String.fromCodePoints=function(e){return String.fromCodePoint.apply(String,e)},t.isInteger=Number.isInteger,t.isFloat=function(e){return"number"==typeof e},t.isReference=function(e){return"object"==typeof e||"string"==typeof e},t.isString=function(e){return"string"==typeof e||e instanceof String},t.isArray=Array.isArray,t.unchecked=function(e){return e},t.fmod=function(e,t){return e%t},t.fmodf=function(e,t){return Math.fround(e%t)},t.JSMath=Math,r(26)(t)}).call(this,r(7))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(27),r(25),r(17),r(16)},function(e,t,r){r(28),e.exports=r(14)}])}); +!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=29)}([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.BUILTIN=2097152]="BUILTIN",e[e.COMPILED=4194304]="COMPILED",e[e.INLINED=8388608]="INLINED",e[e.SCOPED=16777216]="SCOPED",e[e.TRAMPOLINE=33554432]="TRAMPOLINE",e[e.VIRTUAL=67108864]="VIRTUAL",e[e.MAIN=134217728]="MAIN",e[e.QUOTED=268435456]="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(9),a=r(3),s=r(9);function o(e){switch(e){case n.INFO:return"INFO";case n.WARNING:return"WARNING";case n.ERROR:return"ERROR";default:return assert(!1),""}}function c(e){switch(e){case n.INFO:return t.COLOR_BLUE;case n.WARNING:return t.COLOR_YELLOW;case n.ERROR:return t.COLOR_RED;default:return assert(!1),""}}t.DiagnosticCode=s.DiagnosticCode,t.diagnosticCodeToString=s.diagnosticCodeToString,function(e){e[e.INFO=0]="INFO",e[e.WARNING=1]="WARNING",e[e.ERROR=2]="ERROR"}(n=t.DiagnosticCategory||(t.DiagnosticCategory={})),t.diagnosticCategoryToString=o,t.COLOR_BLUE="",t.COLOR_YELLOW="",t.COLOR_RED="",t.COLOR_RESET="",t.diagnosticCategoryToColor=c;var p=function(){function e(e,t,r){this.range=null,this.code=e,this.category=t,this.message=r}return e.create=function(t,r,n,a,s){void 0===n&&(n=null),void 0===a&&(a=null),void 0===s&&(s=null);var o=i.diagnosticCodeToString(t);return null!=n&&(o=o.replace("{0}",n)),null!=a&&(o=o.replace("{1}",a)),null!=s&&(o=o.replace("{2}",s)),new e(t,r,o)},e.createInfo=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.INFO,r,i)},e.createWarning=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.WARNING,r,i)},e.createError=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.ERROR,r,i)},e.prototype.withRange=function(e){return this.range=e,this},e.prototype.toString=function(){return this.range?o(this.category)+" "+this.code.toString(10)+': "'+this.message+'" in '+this.range.source.normalizedPath+":"+this.range.line.toString(10)+":"+this.range.column.toString(10):o(this.category)+" "+this.code.toString(10)+": "+this.message},e}();function l(e,r){void 0===r&&(r=!1);for(var n=e.source.text,i=n.length,s=e.start,o=e.end;s>0&&!a.isLineBreak(n.charCodeAt(s-1));)s--;for(;o=0?c.substring(p+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 pe=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=pe;var le=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=le;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 ye=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=ye;var ge=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=ge;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 Te=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=Te;var fe=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=fe;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=0;--s)free_memory(a[s])}},e.prototype.createCall=function(e,t,r){var n=h(e),i=u(t);try{return _BinaryenCall(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallImport=function(e,t,r){var n=h(e),i=u(t);try{return _BinaryenCallImport(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallIndirect=function(e,t,r){var n=u(t),i=h(r);try{return _BinaryenCallIndirect(this.ref,e,n,t&&t.length||0,i)}finally{free_memory(i),free_memory(n)}},e.prototype.createUnreachable=function(){return _BinaryenUnreachable(this.ref)},e.prototype.addGlobal=function(e,t,r,n){var i=h(e);try{return _BinaryenAddGlobal(this.ref,i,t,r?1:0,n)}finally{free_memory(i)}},e.prototype.addFunction=function(e,t,r,n){var i=h(e),a=l(r);try{return _BinaryenAddFunction(this.ref,i,t,a,r?r.length:0,n)}finally{free_memory(a),free_memory(i)}},e.prototype.removeFunction=function(e){var t=h(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{free_memory(t)}},e.prototype.addTemporaryFunction=function(e,t,r){this.hasTemporaryFunction=assert(!this.hasTemporaryFunction);var n=this.cachedTemporaryName;n||(this.cachedTemporaryName=n=h(""));var i=l(t);try{var a=_BinaryenAddFunctionType(this.ref,n,e,i,t?t.length:0);return _BinaryenAddFunction(this.ref,n,a,0,0,r)}finally{free_memory(i)}},e.prototype.removeTemporaryFunction=function(){this.hasTemporaryFunction=!assert(this.hasTemporaryFunction);var e=assert(this.cachedTemporaryName);_BinaryenRemoveFunction(this.ref,e),_BinaryenRemoveFunctionType(this.ref,e)},e.prototype.addFunctionExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addTableExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addMemoryExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addGlobalExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.removeExport=function(e){var t=h(e);try{_BinaryenRemoveExport(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=h(e),a=h(t),s=h(r);try{return _BinaryenAddFunctionImport(this.ref,i,a,s,n)}finally{free_memory(s),free_memory(a),free_memory(i)}},e.prototype.addTableImport=function(e,t,r){var n=h(e),i=h(t),a=h(r);try{return _BinaryenAddTableImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addMemoryImport=function(e,t,r){var n=h(e),i=h(t),a=h(r);try{return _BinaryenAddMemoryImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addGlobalImport=function(e,t,r,n){var i=h(e),a=h(t),s=h(r);try{return _BinaryenAddGlobalImport(this.ref,i,a,s,n)}finally{free_memory(s),free_memory(a),free_memory(i)}},e.prototype.removeImport=function(e){var t=h(e);try{_BinaryenRemoveImport(this.ref,t)}finally{free_memory(t)}},e.prototype.setMemory=function(e,t,r,n,i){void 0===i&&(i=null);for(var s=h(i),o=r.length,c=new Array(o),u=new Array(o),d=new Array(o),_=0;_=0;--_)free_memory(c[_]);free_memory(s)}},e.prototype.setFunctionTable=function(e){var t=u(e);try{_BinaryenSetFunctionTable(this.ref,t,e.length)}finally{free_memory(t)}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.setShrinkLevel=function(e){void 0===e&&(e=1),_BinaryenSetShrinkLevel(e)},e.prototype.setDebugInfo=function(e){void 0===e&&(e=!1),_BinaryenSetDebugInfo(e)},e.prototype.optimize=function(e){void 0===e&&(e=0),e?_BinaryenFunctionOptimize(e,this.ref):_BinaryenModuleOptimize(this.ref)},e.prototype.runPasses=function(e,t){void 0===t&&(t=0);for(var r=e.length,n=new Array(r),i=0;i=0;--i)free_memory(n[i])}},e.prototype.precomputeFunction=function(e){var t=this.cachedPrecomputeNames;if(!t){var r=h("precompute");this.cachedPrecomputeName=r,this.cachedPrecomputeNames=t=l([r])}_BinaryenFunctionRunPasses(e,this.ref,t,1)},e.prototype.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.cachedByValue,r=h(e),n=0,i=0;try{_BinaryenModuleAllocateAndWrite(t,this.ref,r),n=d(t);var a=d(t+4);i=d(t+8);var s=new m;return s.output=function(e,t){for(var r=new Uint8Array(t),n=0;n>8&255),store(r+2,a>>16&255),store(r+3,a>>>24),r+=4}return t}function u(e){return l(e)}function h(e){if(null==e)return 0;for(var t=allocate_memory(function(e){for(var t=0,r=0,n=e.length;r=55296&&i<=57343&&r+1=55296&&a<=57343&&n+1>>6),store(r++,128|63&a)):a<=65535?(store(r++,224|a>>>12),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=2097151?(store(r++,240|a>>>18),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=67108863?(store(r++,248|a>>>24),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):(store(r++,252|a>>>30),store(r++,128|a>>>24&63),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a))}return store(r,0),t}function d(e){return load(e)|load(e+1)<<8|load(e+2)<<16|load(e+3)<<24}function _(e){if(!e)return null;for(var t,r,n,i,a,s=new Array;t=load(e++);)128&t?(r=63&load(e++),192!=(224&t)?(n=63&load(e++),224==(240&t)?t=(15&t)<<12|r<<6|n:(i=63&load(e++),240==(248&t)?t=(7&t)<<18|r<<12|n<<6|i:(a=63&load(e++),t=248==(252&t)?(3&t)<<24|r<<18|n<<12|i<<6|a:(1&t)<<30|r<<24|n<<18|i<<12|a<<6|63&load(e++))),s.push(t)):s.push((31&t)<<6|r)):s.push(t);return String.fromCodePoints(s)}t.Relooper=c,t.readString=_;var m=function(){return function(){}}();t.BinaryModule=m},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),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(0),c=r(1),p=r(6),l=r(2),u=r(4),h=r(18),d=function(){return function(){}}(),_=function(){return function(){}}(),m=function(){return function(){}}();function y(e,t){switch(assert(t.length),e){case l.DecoratorKind.OPERATOR:case l.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 l.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 l.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 g,E,T=new Map,f=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=T,r.typeAliases=new Map,r.fileLevelExports=new Map,r.moduleLevelExports=new Map,r.arrayPrototype=null,r.stringInstance=null,r.mainFunction=null,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 u.NativeType.I32:t=this.tempI32s||(this.tempI32s=[]);break;case u.NativeType.I64:t=this.tempI64s||(this.tempI64s=[]);break;case u.NativeType.F32:t=this.tempF32s||(this.tempF32s=[]);break;case u.NativeType.F64:t=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}assert(e.index>=0),t.push(e)}},t.prototype.getAndFreeTempLocal=function(e,t){var r,n;switch(e.toNativeType()){case u.NativeType.I32:r=this.tempI32s||(this.tempI32s=[]);break;case u.NativeType.I64:r=this.tempI64s||(this.tempI64s=[]);break;case u.NativeType.F32:r=this.tempF32s||(this.tempF32s=[]);break;case u.NativeType.F64:r=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}return r.length?(n=r[r.length-1]).type=e:(n=this.addLocal(e),r.push(n)),e.is(36)&&this.flow.setLocalWrapped(n.index,t),n},t.prototype.enterBreakContext=function(){var e=this.nextBreakId++;return this.breakStack?this.breakStack.push(e):this.breakStack=[e],this.breakContext=e.toString(10)},t.prototype.leaveBreakContext=function(){assert(null!=this.breakStack);var e=this.breakStack.length;assert(e>0),this.breakStack.pop(),e>1?this.breakContext=this.breakStack[e-2].toString(10):(this.breakContext=null,this.breakStack=null)},t.prototype.finalize=function(e,t){if(this.ref=t,assert(!this.breakStack||!this.breakStack.length),this.breakStack=null,this.breakContext=null,this.tempI32s=this.tempI64s=this.tempF32s=this.tempF64s=null,this.program.options.sourceMap)for(var r=this.debugLocations,n=0,i=r.length;n=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 u.NativeType.I32:s=u.getConstValueI32(e);break;case u.NativeType.I64:s=u.getConstValueI64Low(e);break;case u.NativeType.F32:s=i32(u.getConstValueF32(e));break;case u.NativeType.F64: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)?p.Type.i8:p.Type.u8;break;case 2:o=u.isLoadSigned(e)?p.Type.i16:p.Type.u16;break;default:o=u.isLoadSigned(e)?p.Type.i32:p.Type.u32}return z(o,t);case u.ExpressionId.Block:if(!u.getBlockName(e)){var c=assert(u.getBlockChildCount(e)),l=u.getBlockChild(e,c-1);return this.canOverflow(l,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==g.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=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.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 n.NativeType.I32;case 3:case 8:return n.NativeType.I64;case 4:case 9:return 64==this.size?n.NativeType.I64:n.NativeType.I32;case 11:return n.NativeType.F32;case 12:return n.NativeType.F64;case 13:return n.NativeType.None}},e.prototype.toNativeZero=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(0);case 4:case 9:if(64!=this.size)return e.createI32(0);case 3:case 8:return e.createI64(0);case 11:return e.createF32(0);case 12:return e.createF64(0)}},e.prototype.toNativeOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(1);case 4:case 9:if(64!=this.size)return e.createI32(1);case 3:case 8:return e.createI64(1);case 11:return e.createF32(1);case 12:return e.createF64(1)}},e.prototype.toNativeNegOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(-1);case 4:case 9:if(64!=this.size)return e.createI32(-1);case 3:case 8:return e.createI64(-1,-1);case 11:return e.createF32(-1);case 12:return e.createF64(-1)}},e.prototype.toSignatureString=function(){switch(this.kind){default:return"i";case 3:case 8:return"I";case 4:case 9:return 64==this.size?"I":"i";case 11:return"f";case 12:return"F";case 13:return"v"}},e.i8=new e(0,165,8),e.i16=new e(1,165,16),e.i32=new e(2,133,32),e.i64=new e(3,197,64),e.isize32=new e(4,149,32),e.isize64=new e(4,213,64),e.u8=new e(5,166,8),e.u16=new e(6,166,16),e.u32=new e(7,134,32),e.u64=new e(8,198,64),e.usize32=new e(9,150,32),e.usize64=new e(9,214,64),e.bool=new e(10,166,1),e.f32=new e(11,137,32),e.f64=new e(12,201,64),e.void=new e(13,0,0),e}();t.Type=i,t.typesToNativeTypes=function(e){for(var t=e.length,r=new Array(t),n=0;ne?t[e]:o(e)},e.prototype.isAssignableTo=function(e){var t=this.thisType,r=e.thisType;if(t){if(!r||!t.isAssignableTo(r))return!1}else if(r)return!1;if(this.hasRest!=e.hasRest)return!1;var n=this.parameterTypes,i=e.parameterTypes,a=n.length;if(a!=i.length)return!1;for(var s=0;s=p&&u!=l?t.push("?: "):t.push(": "),t.push(i[u].toString());return t.push(") => "),t.push(this.returnType.toString()),t.join("")},e}();t.Signature=a;var s=null;function o(e){s||(s=[]);for(var t=s.length;t<=e;++t)s.push("arg$"+t.toString(10));return s[e-1]}t.getDefaultParameterName=o},function(e,t){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";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var i,a,s=r(1),o=r(2),c=r(3);function p(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 l(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=p,t.tokenIsAlsoIdentifier=l,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";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Operation_not_supported=100]="Operation_not_supported",e[e.Operation_is_unsafe=101]="Operation_is_unsafe",e[e.Conversion_from_type_0_to_1_requires_an_explicit_cast=200]="Conversion_from_type_0_to_1_requires_an_explicit_cast",e[e.Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit=201]="Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit",e[e.Type_0_cannot_be_changed_to_type_1=202]="Type_0_cannot_be_changed_to_type_1",e[e.Type_0_cannot_be_reinterpreted_as_type_1=203]="Type_0_cannot_be_reinterpreted_as_type_1",e[e.Basic_type_0_cannot_be_nullable=204]="Basic_type_0_cannot_be_nullable",e[e.Cannot_export_a_mutable_global=205]="Cannot_export_a_mutable_global",e[e.Compiling_constant_with_non_constant_initializer_as_mutable=206]="Compiling_constant_with_non_constant_initializer_as_mutable",e[e.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa=207]="Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa",e[e.Unmanaged_classes_cannot_implement_interfaces=208]="Unmanaged_classes_cannot_implement_interfaces",e[e.Invalid_regular_expression_flags=209]="Invalid_regular_expression_flags",e[e.Implementation_0_must_match_the_signature_1=210]="Implementation_0_must_match_the_signature_1",e[e.Class_0_is_sealed_and_cannot_be_extended=211]="Class_0_is_sealed_and_cannot_be_extended",e[e.Decorator_0_is_not_valid_here=212]="Decorator_0_is_not_valid_here",e[e.Duplicate_decorator=213]="Duplicate_decorator",e[e.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.Unterminated_string_literal=1002]="Unterminated_string_literal",e[e.Identifier_expected=1003]="Identifier_expected",e[e._0_expected=1005]="_0_expected",e[e.A_file_cannot_have_a_reference_to_itself=1006]="A_file_cannot_have_a_reference_to_itself",e[e.Trailing_comma_not_allowed=1009]="Trailing_comma_not_allowed",e[e.Unexpected_token=1012]="Unexpected_token",e[e.A_rest_parameter_must_be_last_in_a_parameter_list=1014]="A_rest_parameter_must_be_last_in_a_parameter_list",e[e.Parameter_cannot_have_question_mark_and_initializer=1015]="Parameter_cannot_have_question_mark_and_initializer",e[e.A_required_parameter_cannot_follow_an_optional_parameter=1016]="A_required_parameter_cannot_follow_an_optional_parameter",e[e.Enum_member_must_have_initializer=1061]="Enum_member_must_have_initializer",e[e.Statements_are_not_allowed_in_ambient_contexts=1036]="Statements_are_not_allowed_in_ambient_contexts",e[e.Initializers_are_not_allowed_in_ambient_contexts=1039]="Initializers_are_not_allowed_in_ambient_contexts",e[e._0_modifier_cannot_be_used_here=1042]="_0_modifier_cannot_be_used_here",e[e.A_rest_parameter_cannot_be_optional=1047]="A_rest_parameter_cannot_be_optional",e[e.A_rest_parameter_cannot_have_an_initializer=1048]="A_rest_parameter_cannot_have_an_initializer",e[e.A_set_accessor_must_have_exactly_one_parameter=1049]="A_set_accessor_must_have_exactly_one_parameter",e[e.A_set_accessor_parameter_cannot_have_an_initializer=1052]="A_set_accessor_parameter_cannot_have_an_initializer",e[e.A_get_accessor_cannot_have_parameters=1054]="A_get_accessor_cannot_have_parameters",e[e.Type_parameters_cannot_appear_on_a_constructor_declaration=1092]="Type_parameters_cannot_appear_on_a_constructor_declaration",e[e.Type_annotation_cannot_appear_on_a_constructor_declaration=1093]="Type_annotation_cannot_appear_on_a_constructor_declaration",e[e.An_accessor_cannot_have_type_parameters=1094]="An_accessor_cannot_have_type_parameters",e[e.A_set_accessor_cannot_have_a_return_type_annotation=1095]="A_set_accessor_cannot_have_a_return_type_annotation",e[e.Type_parameter_list_cannot_be_empty=1098]="Type_parameter_list_cannot_be_empty",e[e.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement=1104]="A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement",e[e.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement=1105]="A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement",e[e.A_return_statement_can_only_be_used_within_a_function_body=1108]="A_return_statement_can_only_be_used_within_a_function_body",e[e.Expression_expected=1109]="Expression_expected",e[e.Type_expected=1110]="Type_expected",e[e.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement=1113]="A_default_clause_cannot_appear_more_than_once_in_a_switch_statement",e[e.Duplicate_label_0=1114]="Duplicate_label_0",e[e.Octal_literals_are_not_allowed_in_strict_mode=1121]="Octal_literals_are_not_allowed_in_strict_mode",e[e.Digit_expected=1124]="Digit_expected",e[e.Hexadecimal_digit_expected=1125]="Hexadecimal_digit_expected",e[e.Unexpected_end_of_text=1126]="Unexpected_end_of_text",e[e.Invalid_character=1127]="Invalid_character",e[e._case_or_default_expected=1130]="_case_or_default_expected",e[e.A_declare_modifier_cannot_be_used_in_an_already_ambient_context=1038]="A_declare_modifier_cannot_be_used_in_an_already_ambient_context",e[e.Type_argument_expected=1140]="Type_argument_expected",e[e.String_literal_expected=1141]="String_literal_expected",e[e.Line_break_not_permitted_here=1142]="Line_break_not_permitted_here",e[e.Declaration_expected=1146]="Declaration_expected",e[e._const_declarations_must_be_initialized=1155]="_const_declarations_must_be_initialized",e[e.Unterminated_regular_expression_literal=1161]="Unterminated_regular_expression_literal",e[e.Interface_declaration_cannot_have_implements_clause=1176]="Interface_declaration_cannot_have_implements_clause",e[e.Binary_digit_expected=1177]="Binary_digit_expected",e[e.Octal_digit_expected=1178]="Octal_digit_expected",e[e.An_implementation_cannot_be_declared_in_ambient_contexts=1183]="An_implementation_cannot_be_declared_in_ambient_contexts",e[e.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive=1198]="An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive",e[e.Unterminated_Unicode_escape_sequence=1199]="Unterminated_Unicode_escape_sequence",e[e.Decorators_are_not_valid_here=1206]="Decorators_are_not_valid_here",e[e._abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration=1242]="_abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration",e[e.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.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 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 1002:return"Unterminated string literal.";case 1003:return"Identifier expected.";case 1005:return"'{0}' expected.";case 1006:return"A file cannot have a reference to itself.";case 1009:return"Trailing comma not allowed.";case 1012:return"Unexpected token.";case 1014:return"A rest parameter must be last in a parameter list.";case 1015:return"Parameter cannot have question mark and initializer.";case 1016:return"A required parameter cannot follow an optional parameter.";case 1061:return"Enum member must have initializer.";case 1036:return"Statements are not allowed in ambient contexts.";case 1039:return"Initializers are not allowed in ambient contexts.";case 1042:return"'{0}' modifier cannot be used here.";case 1047:return"A rest parameter cannot be optional.";case 1048:return"A rest parameter cannot have an initializer.";case 1049:return"A 'set' accessor must have exactly one parameter.";case 1052:return"A 'set' accessor parameter cannot have an initializer.";case 1054:return"A 'get' accessor cannot have parameters.";case 1092:return"Type parameters cannot appear on a constructor declaration.";case 1093:return"Type annotation cannot appear on a constructor declaration.";case 1094:return"An accessor cannot have type parameters.";case 1095:return"A 'set' accessor cannot have a return type annotation.";case 1098:return"Type parameter list cannot be empty.";case 1104:return"A 'continue' statement can only be used within an enclosing iteration statement.";case 1105:return"A 'break' statement can only be used within an enclosing iteration or switch statement.";case 1108:return"A 'return' statement can only be used within a function body.";case 1109:return"Expression expected.";case 1110:return"Type expected.";case 1113:return"A 'default' clause cannot appear more than once in a 'switch' statement.";case 1114:return"Duplicate label '{0}'.";case 1121:return"Octal literals are not allowed in strict mode.";case 1124:return"Digit expected.";case 1125:return"Hexadecimal digit expected.";case 1126:return"Unexpected end of text.";case 1127:return"Invalid character.";case 1130:return"'case' or 'default' expected.";case 1038:return"A 'declare' modifier cannot be used in an already ambient context.";case 1140:return"Type argument expected.";case 1141:return"String literal expected.";case 1142:return"Line break not permitted here.";case 1146:return"Declaration expected.";case 1155:return"'const' declarations must be initialized.";case 1161:return"Unterminated regular expression literal.";case 1176:return"Interface declaration cannot have 'implements' clause.";case 1177:return"Binary digit expected.";case 1178:return"Octal digit expected.";case 1183:return"An implementation cannot be declared in ambient contexts.";case 1198:return"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.";case 1199:return"Unterminated Unicode escape sequence.";case 1206:return"Decorators are not valid here.";case 1242:return"'abstract' modifier can only appear on a class, method, or property declaration.";case 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 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=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),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}}}};Object.defineProperty(t,"__esModule",{value:!0});var a,s=r(23),o=r(1),c=r(4),p=r(0),l=r(5),u=r(8),h=r(2),d=r(6),_=r(3);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(a=t.Target||(t.Target={}));var m=function(){function e(){this.target=a.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==a.WASM64},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"usizeType",{get:function(){return this.target==a.WASM64?d.Type.usize64:d.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==a.WASM64?d.Type.isize64:d.Type.isize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nativeSizeType",{get:function(){return this.target==a.WASM64?c.NativeType.I64:c.NativeType.I32},enumerable:!0,configurable:!0}),e.prototype.hasFeature=function(e){return 0!=(this.features&e)},e}();t.Options=m,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,g,E=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.currentOuterFunction=null,n.currentEnum=null,n.currentType=d.Type.void,n.memorySegments=[],n.stringSegments=new Map,n.functionTable=[],n.argcVar=0,n.argcSet=0,n.f32ModInstance=null,n.f64ModInstance=null,n.f32PowInstance=null,n.f64PowInstance=null,n.program=t,n.resolver=t.resolver,r||(r=new m),n.options=r,n.memoryOffset=i64_new(max(r.memoryBase,8)),n.module=c.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=this.options,t=this.module,r=this.program;r.initialize(e);var n=new l.Function(r.startFunction,"start",new d.Signature([],d.Type.void));this.startFunctionInstance=n;var i=new Array;this.startFunctionBody=i,this.currentFunction=n;for(var a=r.sources,s=0,o=a.length;s"),!1;e.type=this.currentType}else assert(!1);if(e.is(p.CommonFlags.AMBIENT|p.CommonFlags.BUILTIN))return!0;var a=e.type.toNativeType(),s=e.isAny(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?f(e,r,e.parent):(y="env",g=e.simpleName),t.addGlobalImport(e.internalName,y,g,a),e.set(p.CommonFlags.COMPILED),!0):(this.error(o.DiagnosticCode.Operation_not_supported,assert(r).range),!1);var l=!1;e.is(p.CommonFlags.INLINED)?n=this.compileInlineConstant(e,e.type,!0):r&&r.initializer?(n||(n=this.compileExpression(r.initializer,e.type,1,1)),c.getExpressionId(n)!=c.ExpressionId.Const&&(s?(n=this.precomputeExpressionRef(n),c.getExpressionId(n)!=c.ExpressionId.Const&&(this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,r.range),l=!0)):l=!0)):n=e.type.toNativeZero(t);var u=e.internalName;if(l)t.addGlobal(u,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(u,n));else if(s){switch(c.getExpressionType(n)){case c.NativeType.I32:e.constantValueKind=1,e.constantIntegerValue=i64_new(c.getConstValueI32(n),0);break;case c.NativeType.I64:e.constantValueKind=1,e.constantIntegerValue=i64_new(c.getConstValueI64Low(n),c.getConstValueI64High(n));break;case c.NativeType.F32:e.constantValueKind=2,e.constantFloatValue=c.getConstValueF32(n);break;case c.NativeType.F64:e.constantValueKind=2,e.constantFloatValue=c.getConstValueF64(n);break;default:return assert(!1),!1}e.set(p.CommonFlags.INLINED),e.is(p.CommonFlags.MODULE_EXPORT)?(t.addGlobal(u,a,!1,n),t.addGlobalExport(u,T(e))):r&&r.isTopLevel&&t.addGlobal(u,a,!1,n)}else t.addGlobal(u,a,!s,n);return!0},t.prototype.compileEnumDeclaration=function(e){var t=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(t.kind==l.ElementKind.ENUM),this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){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;if(e.members)try{for(var s=i(e.members.values()),u=s.next();!u.done;u=s.next()){var h=u.value;if(h.kind==l.ElementKind.ENUMVALUE){var _=!1,m=h,y=m.declaration;if(m.set(p.CommonFlags.COMPILED),m.is(p.CommonFlags.INLINED))e.declaration.isTopLevelExport&&n.addGlobal(m.internalName,c.NativeType.I32,!1,n.createI32(m.constantValue));else{var g=void 0;y.value?(g=this.compileExpression(y.value,d.Type.i32,1,0),c.getExpressionId(g)!=c.ExpressionId.Const&&(g=this.precomputeExpressionRef(g),c.getExpressionId(g)!=c.ExpressionId.Const&&(e.is(p.CommonFlags.CONST)&&this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),_=!0))):null==a?g=n.createI32(0):a.is(p.CommonFlags.INLINED)?g=n.createI32(a.constantValue+1):(g=n.createBinary(c.BinaryOp.AddI32,n.createGetGlobal(a.internalName,c.NativeType.I32),n.createI32(1)),e.is(p.CommonFlags.CONST)&&this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),_=!0),_?(n.addGlobal(m.internalName,c.NativeType.I32,!0,n.createI32(0)),this.startFunctionBody.push(n.createSetGlobal(m.internalName,g))):(n.addGlobal(m.internalName,c.NativeType.I32,!1,g),c.getExpressionType(g)==c.NativeType.I32?(m.constantValue=c.getConstValueI32(g),m.set(p.CommonFlags.INLINED)):(assert(!1),m.constantValue=0))}a=m,e.is(p.CommonFlags.MODULE_EXPORT)&&(h.is(p.CommonFlags.INLINED)||this.options.hasFeature(2)?n.addGlobalExport(h.internalName,T(h)):y&&this.warning(o.DiagnosticCode.Cannot_export_a_mutable_global,y.range))}}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=s.return)&&r.call(s)}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==l.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 y=t.createBlock("case0|"+a,l,c.NativeType.None),g=!0,E=!0,T=!0,f=!0;for(_=0;_=0&&(g&&s.set(1),E&&s.set(2),T&&s.set(4),f&&s.set(32)),y},t.prototype.compileThrowStatement=function(e){var t=this.currentFunction.flow;return t.set(4),t.set(1),s.compileAbort(this,null,e)},t.prototype.compileTryStatement=function(e){return this.error(o.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==h.NodeKind.SOURCE){for(var s=0;s");continue}E=this.currentType}var f=!1;if(y.is(p.CommonFlags.CONST))if(T)if(T=this.precomputeExpressionRef(T),c.getExpressionId(T)==c.ExpressionId.Const){var I=new l.Local(r,g,-1,E);switch(c.getExpressionType(T)){case c.NativeType.I32:I=I.withConstantIntegerValue(i64_new(c.getConstValueI32(T),0));break;case c.NativeType.I64:I=I.withConstantIntegerValue(i64_new(c.getConstValueI64Low(T),c.getConstValueI64High(T)));break;case c.NativeType.F32:I=I.withConstantFloatValue(c.getConstValueF32(T));break;case c.NativeType.F64:I=I.withConstantFloatValue(c.getConstValueF64(T));break;default:return assert(!1),this.module.createUnreachable()}var v=n.flow.scopedLocals;if(v){if(v.has(g))return this.error(o.DiagnosticCode.Duplicate_identifier_0,y.name.range,g),this.module.createUnreachable()}else n.flow.scopedLocals=v=new Map;v.set(g,I),f=!0}else this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range);else this.error(o.DiagnosticCode._const_declarations_must_be_initialized,y.range);if(!f){I=void 0;I=y.isAny(p.CommonFlags.LET|p.CommonFlags.CONST)||_.is(2048)?_.addScopedLocal(E,g,!1,y):n.addLocal(E,g,y),T?(u.push(this.compileAssignmentWithValue(y.name,T)),I.type.is(36)&&_.setLocalWrapped(I.index,!_.canOverflow(T,E))):I.type.is(36)&&_.setLocalWrapped(I.index,!0)}}return u.length?1==u.length?u[0]:this.module.createBlock(null,u,c.NativeType.None):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,d.Type.void,2,0)},t.prototype.compileWhileStatement=function(e){var t=this.module,r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var n=this.precomputeExpressionRef(r);if(c.getExpressionId(n)==c.ExpressionId.Const&&c.getExpressionType(n)==c.NativeType.I32){if(!c.getConstValueI32(n))return t.createNop()}else r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType)}var i=this.currentFunction,a=i.enterBreakContext(),s=i.flow,o=s.fork();i.flow=o;var l="break|"+a;o.breakLabel=l;var u="continue|"+a;o.continueLabel=u;var h=this.compileStatement(e.statement),_=o.isAny(29);return i.flow=o.free(),i.leaveBreakContext(),o.unset(792),s.inheritConditional(o),t.createBlock(l,[t.createLoop(u,t.createIf(r,_?h:t.createBlock(null,[h,t.createBreak(u)],c.NativeType.None)))],c.NativeType.None)},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(d.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&a:0);case 2:case 7:return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 4:case 9:if(!e.program.options.isWasm64)return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 3:case 8:return 1==e.constantValueKind?this.module.createI64(i64_low(e.constantIntegerValue),i64_high(e.constantIntegerValue)):this.module.createI64(0);case 12:if(!e.is(p.CommonFlags.BUILTIN)||t!=d.Type.f32)return this.module.createF64(e.constantFloatValue);this.currentType=d.Type.f32;case 11:return this.module.createF32(e.constantFloatValue);default:return assert(!1),this.module.createUnreachable()}},t.prototype.compileExpression=function(e,t,r,n){var i;switch(this.currentType=t,e.kind){case h.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case h.NodeKind.BINARY:i=this.compileBinaryExpression(e,t);break;case h.NodeKind.CALL:i=this.compileCallExpression(e,t);break;case h.NodeKind.COMMA:i=this.compileCommaExpression(e,t);break;case h.NodeKind.ELEMENTACCESS:i=this.compileElementAccessExpression(e,t);break;case h.NodeKind.FUNCTION:i=this.compileFunctionExpression(e,t);break;case h.NodeKind.IDENTIFIER:case h.NodeKind.FALSE:case h.NodeKind.NULL:case h.NodeKind.THIS:case h.NodeKind.SUPER:case h.NodeKind.TRUE:i=this.compileIdentifierExpression(e,t,0==r);break;case h.NodeKind.INSTANCEOF:i=this.compileInstanceOfExpression(e,t);break;case h.NodeKind.LITERAL:i=this.compileLiteralExpression(e,t);break;case h.NodeKind.NEW:i=this.compileNewExpression(e,t);break;case h.NodeKind.PARENTHESIZED:i=this.compileParenthesizedExpression(e,t);break;case h.NodeKind.PROPERTYACCESS:i=this.compilePropertyAccessExpression(e,t,0==r);break;case h.NodeKind.TERNARY:i=this.compileTernaryExpression(e,t);break;case h.NodeKind.UNARYPOSTFIX:i=this.compileUnaryPostfixExpression(e,t);break;case h.NodeKind.UNARYPREFIX:i=this.compileUnaryPrefixExpression(e,t);break;default:this.error(o.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==d.Type.void?d.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r,n){return this.precomputeExpressionRef(this.compileExpression(e,t,r,n))},t.prototype.precomputeExpressionRef=function(e){var t=this.module,r=this.currentType.toNativeType(),n=t.addTemporaryFunction(r,null,e);t.runPasses(["precompute"],n);var i=c.getFunctionBody(n);return t.removeTemporaryFunction(),i},t.prototype.convertExpression=function(e,t,r,n,i,a){assert(0!=n);var s=this.module;return 13==t.kind?(assert(13!=r.kind),this.error(o.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(o.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(c.UnaryOp.PromoteF32,e)):11==r.kind&&(e=s.createUnary(c.UnaryOp.DemoteF64,e)):r.is(4)?e=11==t.kind?r.is(1)?r.is(64)?s.createUnary(c.UnaryOp.TruncF32ToI64,e):s.createUnary(c.UnaryOp.TruncF32ToI32,e):r.is(64)?s.createUnary(c.UnaryOp.TruncF32ToU64,e):s.createUnary(c.UnaryOp.TruncF32ToU32,e):r.is(1)?r.is(64)?s.createUnary(c.UnaryOp.TruncF64ToI64,e):s.createUnary(c.UnaryOp.TruncF64ToI32,e):r.is(64)?s.createUnary(c.UnaryOp.TruncF64ToU64,e):s.createUnary(c.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)?c.UnaryOp.ConvertI64ToF32:c.UnaryOp.ConvertU64ToF32,e):s.createUnary(t.is(1)?c.UnaryOp.ConvertI32ToF32:c.UnaryOp.ConvertU32ToF32,e):t.is(64)?s.createUnary(t.is(1)?c.UnaryOp.ConvertI64ToF64:c.UnaryOp.ConvertU64ToF64,e):s.createUnary(t.is(1)?c.UnaryOp.ConvertI32ToF64:c.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=s.createUnary(c.UnaryOp.WrapI64,e)):r.is(64)?(e=s.createUnary(r.is(1)?c.UnaryOp.ExtendI32:c.UnaryOp.ExtendU32,this.ensureSmallIntegerWrap(e,t)),i=0):t.is(32)&&t.size",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.GtI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.GtI64:c.BinaryOp.GtI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.GtI64,r,i);break;case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.GtU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.GtU64:c.BinaryOp.GtU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.GtU64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.GtF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.GtF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.LESSTHAN_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.LE)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!0)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"<=",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.LeI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.LeI64:c.BinaryOp.LeI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.LeI64,r,i);break;case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.LeU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.LeU64:c.BinaryOp.LeU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.LeU64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.LeF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.LeF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.GREATERTHAN_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.GE)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!0)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,">=",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.GeI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.GeI64:c.BinaryOp.GeI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.GeI64,r,i);break;case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.GeU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.GeU64:c.BinaryOp.GeU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.GeU64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.GeF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.GeF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EQUALS_EQUALS_EQUALS:case u.Token.EQUALS_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,g==u.Token.EQUALS_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.EQ)){p=this.compileBinaryOverload(v,_,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.EqI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.EqI64:c.BinaryOp.EqI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.EqI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.EqF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.EqF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EXCLAMATION_EQUALS_EQUALS:case u.Token.EXCLAMATION_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,g==u.Token.EXCLAMATION_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.NE)){p=this.compileBinaryOverload(v,_,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.NeI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.NeI64:c.BinaryOp.NeI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.NeI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.NeF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.NeF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EQUALS:return this.compileAssignment(_,m,t);case u.Token.PLUS_EQUALS:y=!0;case u.Token.PLUS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.ADD)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"+",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:p=h.createBinary(c.BinaryOp.AddI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.AddI64:c.BinaryOp.AddI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.AddI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.AddF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.AddF64,r,i);break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.MINUS_EQUALS:y=!0;case u.Token.MINUS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.SUB)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"-",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:p=h.createBinary(c.BinaryOp.SubI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.SubI64:c.BinaryOp.SubI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.SubI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.SubF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.SubF64,r,i);break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.ASTERISK_EQUALS:y=!0;case u.Token.ASTERISK:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.MUL)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"*",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:p=h.createBinary(c.BinaryOp.MulI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.MulI64:c.BinaryOp.MulI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.MulI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.MulF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.MulF64,r,i);break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.ASTERISK_ASTERISK_EQUALS:y=!0;case u.Token.ASTERISK_ASTERISK:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.POW)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var E=void 0;if(11==this.currentType.kind){if(i=this.compileExpression(m,d.Type.f32,1,0),a=this.currentType,!(E=this.f32PowInstance)){if(!(T=this.program.elementsLookup.get("Mathf"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),p=h.createUnreachable();break}if(!(f=T.members?T.members.get("pow"):null)){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),p=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=E=this.resolver.resolveFunction(f,null)}}else if(r=this.convertExpression(r,this.currentType,d.Type.f64,1,0,_),n=this.currentType,i=this.compileExpression(m,d.Type.f64,1,0),a=this.currentType,!(E=this.f64PowInstance)){if(!(T=this.program.elementsLookup.get("Math"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),p=h.createUnreachable();break}if(!(f=T.members?T.members.get("pow"):null)){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),p=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=E=this.resolver.resolveFunction(f,null)}p=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):h.createUnreachable();break;case u.Token.SLASH_EQUALS:y=!0;case u.Token.SLASH:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.DIV)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)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=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"/",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.DivI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.DivI64:c.BinaryOp.DivI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.DivI64,r,i);break;case 5:case 6:case 10:case 7:p=h.createBinary(c.BinaryOp.DivU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.DivU64:c.BinaryOp.DivU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.DivU64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.DivF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.DivF64,r,i);break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.PERCENT_EQUALS:y=!0;case u.Token.PERCENT:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.REM)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)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=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"%",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.RemI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.RemI64:c.BinaryOp.RemI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.RemI64,r,i);break;case 5:case 6:case 10:case 7:p=h.createBinary(c.BinaryOp.RemU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.RemU64:c.BinaryOp.RemU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.RemU64,r,i);break;case 11:if(!(E=this.f32ModInstance)){if(!(T=this.program.elementsLookup.get("Mathf"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),p=h.createUnreachable();break}if(!(f=T.members?T.members.get("mod"):null)){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),p=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=E=this.resolver.resolveFunction(f,null)}p=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):h.createUnreachable();break;case 12:if(!(E=this.f64ModInstance)){var T,f;if(!(T=this.program.elementsLookup.get("Math"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),p=h.createUnreachable();break}if(!(f=T.members?T.members.get("mod"):null)){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),p=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=E=this.resolver.resolveFunction(f,null)}p=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):h.createUnreachable();break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.LESSTHAN_LESSTHAN_EQUALS:y=!0;case u.Token.LESSTHAN_LESSTHAN:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_SHL)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.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:p=h.createBinary(c.BinaryOp.ShlI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.ShlI64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.ShlI64:c.BinaryOp.ShlI32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_EQUALS:y=!0;case u.Token.GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_SHR)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.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:p=h.createBinary(c.BinaryOp.ShrI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.ShrI64,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.ShrI64:c.BinaryOp.ShrI32,r,i);break;case 5:case 6:case 10:case 7:p=h.createBinary(c.BinaryOp.ShrU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.ShrU64,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.ShrU64:c.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:y=!0;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_SHR_U)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.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:p=h.createBinary(c.BinaryOp.ShrU32,r,i);case 0:case 1:case 2:case 7:p=h.createBinary(c.BinaryOp.ShrU32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.ShrU64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.ShrU64:c.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.AMPERSAND_EQUALS:y=!0;case u.Token.AMPERSAND:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_AND)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"&",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 10:case 7:p=h.createBinary(c.BinaryOp.AndI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.AndI64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.AndI64:c.BinaryOp.AndI32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.BAR_EQUALS:y=!0;case u.Token.BAR:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_OR)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"|",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:p=h.createBinary(c.BinaryOp.OrI32,r,i);break;case 2:case 7:p=h.createBinary(c.BinaryOp.OrI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.OrI64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.OrI64:c.BinaryOp.OrI32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.CARET_EQUALS:y=!0;case u.Token.CARET:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){var I,v;if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_XOR)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"^",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:p=h.createBinary(c.BinaryOp.XorI32,r,i);break;case 2:case 7:p=h.createBinary(c.BinaryOp.XorI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.XorI64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.XorI64:c.BinaryOp.XorI32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.AMPERSAND_AMPERSAND:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,p=h.cloneExpression(r,!0,0))this.makeIsTrueish(r,this.currentType),p=h.createIf(this.makeIsTrueish(r,this.currentType),i,p);else{var A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));p=h.createIf(this.makeIsTrueish(h.createTeeLocal(C.index,r),this.currentType),i,h.createGetLocal(assert(C).index,this.currentType.toNativeType()))}break;case u.Token.BAR_BAR:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,p=this.module.cloneExpression(r,!0,0))p=this.module.createIf(this.makeIsTrueish(r,this.currentType),p,i);else{A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));p=h.createIf(this.makeIsTrueish(h.createTeeLocal(C.index,r),this.currentType),h.createGetLocal(assert(C).index,this.currentType.toNativeType()),i)}break;default:assert(!1),p=this.module.createUnreachable()}return y?this.compileAssignmentWithValue(_,p,t!=d.Type.void):p},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(l.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==l.ElementKind.CLASS),s=r,a=[n]}else a=[t,n];return this.compileCallDirect(e,a,i,s,e.hasDecorator(l.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 l.ElementKind.GLOBAL:if(!this.compileGlobal(s))return this.module.createUnreachable();assert(s.type!=d.Type.void);case l.ElementKind.LOCAL:case l.ElementKind.FIELD:n=s.type;break;case l.ElementKind.PROPERTY:var c=s.setterPrototype;if(c){var p=this.resolver.resolveFunction(c,null);if(!p)return this.module.createUnreachable();assert(1==p.signature.parameterTypes.length),n=p.signature.parameterTypes[0];break}return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,s.internalName),this.module.createUnreachable();case l.ElementKind.CLASS:if(i.resolvedElementExpression){var u=a.flow.is(4096),h=s.lookupOverload(l.OperatorKind.INDEXED_SET,u);if(!h)return s.lookupOverload(l.OperatorKind.INDEXED_GET,u)?this.error(o.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,s.internalName):this.error(o.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(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}assert(n!=d.Type.void);var _=this.compileExpression(t,n,1,0);return this.compileAssignmentWithValue(e,_,r!=d.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.resolver.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();switch(i.kind){case l.ElementKind.LOCAL:var a=i.type;if(assert(a!=d.Type.void),this.currentType=r?a:d.Type.void,i.is(p.CommonFlags.CONST))return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var s=this.currentFunction.flow;return a.is(36)&&s.setLocalWrapped(i.index,!s.canOverflow(t,a)),r?n.createTeeLocal(i.index,t):n.createSetLocal(i.index,t);case l.ElementKind.GLOBAL:if(!this.compileGlobal(i))return n.createUnreachable();a=i.type;if(assert(a!=d.Type.void),this.currentType=r?a:d.Type.void,i.is(p.CommonFlags.CONST))return this.error(o.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 c=a.toNativeType(),u=i.internalName;return n.createBlock(null,[n.createSetGlobal(u,t),n.createGetGlobal(u,c)],c)}return n.createSetGlobal(i.internalName,t);case l.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(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var _=assert(this.resolver.resolvedThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0);a=i.type;this.currentType=r?a:d.Type.void;c=a.toNativeType();if(10==a.kind&&(t=this.ensureSmallIntegerWrap(t,a)),r){s=(L=this.currentFunction).flow;var y=L.getAndFreeTempLocal(a,!s.canOverflow(t,a)).index;return n.createBlock(null,[n.createSetLocal(y,t),n.createStore(a.byteSize,m,n.createGetLocal(y,c),c,i.memoryOffset),n.createGetLocal(y,c)],c)}return n.createStore(a.byteSize,m,t,c,i.memoryOffset);case l.ElementKind.PROPERTY:var g=i.setterPrototype;if(g){var E=this.resolver.resolveFunction(g,null);if(!E)return n.createUnreachable();if(!r){if(E.is(p.CommonFlags.INSTANCE)){_=assert(this.resolver.resolvedThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0);return this.makeCallDirect(E,[m,t])}return this.makeCallDirect(E,[t])}var T=i.getterPrototype;assert(null!=T);var f=this.resolver.resolveFunction(T,null);if(!f)return n.createUnreachable();var I=(R=f.signature.returnType).toNativeType();if(E.is(p.CommonFlags.INSTANCE)){_=assert(this.resolver.resolvedThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0),y=this.currentFunction.getAndFreeTempLocal(R,!1).index;return n.createBlock(null,[this.makeCallDirect(E,[n.createTeeLocal(y,m),t]),this.makeCallDirect(f,[n.createGetLocal(y,I)])],I)}return n.createBlock(null,[this.makeCallDirect(E,[t]),this.makeCallDirect(f)],I)}return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();case l.ElementKind.CLASS:var v=this.resolver.resolvedElementExpression;if(v){var A=this.currentFunction.flow.is(4096),C=i.lookupOverload(l.OperatorKind.INDEXED_GET,A);if(!C)return this.error(o.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.internalName),n.createUnreachable();var N=i.lookupOverload(l.OperatorKind.INDEXED_SET,A);if(!N)return this.error(o.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.internalName),this.currentType=r?C.signature.returnType:d.Type.void,n.createUnreachable();var O=i.type,S=(_=assert(this.resolver.resolvedThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0),this.compileExpression(v,d.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(o.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 l.ElementKind.FUNCTION_PROTOTYPE:var u=s,_=e.typeArguments;if(u.is(p.CommonFlags.AMBIENT|p.CommonFlags.BUILTIN))return this.compileCallExpressionBuiltin(u,e,t);var m=null;if(_){if(!u.is(p.CommonFlags.GENERIC))return this.error(o.DiagnosticCode.Type_0_is_not_generic,e.expression.range,u.internalName),i.createUnreachable();m=this.resolver.resolveFunctionInclTypeArguments(u,_,this.currentFunction.flow.contextualTypeArguments,e)}else{if(u.is(p.CommonFlags.GENERIC)){for(var y=new Map,g=assert(u.declaration.typeParameters),E=g.length,T=0;Ts&&!i)||(this.error(o.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,s.toString(),t.toString()),!1)},t.prototype.compileCallDirect=function(e,t,r,n,i){void 0===n&&(n=0),void 0===i&&(i=!1);var a=t.length,s=e.signature;if(!this.checkCallSignature(s,a,0!=n,r))return this.module.createUnreachable();if(i)return assert(!e.is(p.CommonFlags.TRAMPOLINE)),this.compileCallInlineUnchecked(e,t,r,n);var o=n?a+1:a,c=new Array(o),l=0;n&&(c[0]=n,l=1);for(var u=s.parameterTypes,h=0;h=i);var o=this.module;if(!this.compileFunction(e))return o.createUnreachable();var c=e.signature.returnType,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=T,this.module.createGetLocal(f,T.toNativeType());case l.ElementKind.GLOBAL:if(!this.compileGlobal(E))return this.module.createUnreachable();var I=E.type;return assert(I!=d.Type.void),E.is(p.CommonFlags.INLINED)?this.compileInlineConstant(E,t,r):(this.currentType=I,this.module.createGetGlobal(E.internalName,I.toNativeType()));case l.ElementKind.ENUMVALUE:return E.is(p.CommonFlags.COMPILED)?(this.currentType=d.Type.i32,E.is(p.CommonFlags.INLINED)?this.module.createI32(E.constantValue):this.module.createGetGlobal(E.internalName,c.NativeType.I32)):(this.error(o.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,e.range),this.currentType=d.Type.i32,this.module.createUnreachable());case l.ElementKind.FUNCTION_PROTOTYPE:var v=this.resolver.resolveFunction(E,null,i.flow.contextualTypeArguments);if(!v||!this.compileFunction(v))return n.createUnreachable();var A=this.ensureFunctionTableEntry(v);return this.currentType=v.signature.type,this.module.createI32(A)}return this.error(o.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=d.Type.bool,a?i.is(512)&&!a.is(512)?i.nonNullableType.isAssignableTo(a)?r.createBinary(i.is(64)?c.BinaryOp.NeI64:c.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 h.LiteralKind.ARRAY:assert(!r);var i=t.classReference;return i&&i.prototype==this.program.arrayPrototype?this.compileArrayLiteral(assert(i.typeArguments)[0],e.elementExpressions,e):(this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable());case h.LiteralKind.FLOAT:var a=e.value;return r&&(a=-a),t==d.Type.f32?n.createF32(a):(this.currentType=d.Type.f64,n.createF64(a));case h.LiteralKind.INTEGER:var s=e.value;switch(r&&(s=i64_sub(i64_new(0),s)),t.kind){case 0:if(i64_is_i8(s))return n.createI32(i64_low(s));break;case 5:if(i64_is_u8(s))return n.createI32(i64_low(s));break;case 1:if(i64_is_i16(s))return n.createI32(i64_low(s));break;case 6:if(i64_is_u16(s))return n.createI32(i64_low(s));break;case 2: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=d.Type.i32,n.createI32(i64_low(s))):i64_is_u32(s)?(this.currentType=d.Type.u32,n.createI32(i64_low(s))):(this.currentType=d.Type.i64,n.createI64(i64_low(s),i64_high(s)));case h.LiteralKind.STRING:return assert(!r),this.compileStaticString(e.value);case h.LiteralKind.OBJECT:return assert(!r),this.compileObjectLiteral(e,t)}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,n.createUnreachable()},t.prototype.compileStaticString=function(e){var t=this.module,r=this.options,n=this.stringSegments,i=n.get(e);if(!i){var a=e.length,s=new Uint8Array(4+2*a);s[0]=255&a,s[1]=a>>>8&255,s[2]=a>>>16&255,s[3]=a>>>24&255;for(var o=0;o>>8&255;i=this.addMemorySegment(s,r.usizeType.byteSize),n.set(e,i)}var c=i.offset,p=this.program.typesLookup.get("string");return this.currentType=p||r.usizeType,r.isWasm64?t.createI64(i64_low(c),i64_high(c)):(assert(i64_is_i32(c)),t.createI32(i64_low(c)))},t.prototype.compileArrayLiteral=function(e,t,r){var n=!0,i=this.module,a=assert(this.program.arrayPrototype);if(!a||a.kind!=l.ElementKind.CLASS_PROTOTYPE)return i.createUnreachable();var s=this.resolver.resolveClass(a,[e]);if(!s)return i.createUnreachable();var p=s.type,u=t.length;if(u){var h=e.toNativeType(),d=void 0,m=void 0;switch(h){case c.NativeType.I32:d=changetype(new Int32Array(u)),m=4*u;break;case c.NativeType.I64:d=changetype(new Array(u)),m=8*u;break;case c.NativeType.F32:d=changetype(new Float32Array(u)),m=4*u;break;case c.NativeType.F64:d=changetype(new Float64Array(u)),m=8*u;break;default:return assert(!1),i.createUnreachable()}for(var y=new Array(u),g=void 0,E=0;E",t.toString()),r.createUnreachable();var i=n.constructorInstance;if(i){if(i.signature.requiredParameters)return this.error(o.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(o.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(o.DiagnosticCode.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,e.range,n.toString()),r.createUnreachable()}var a=e.names,c=a.length,u=e.values,h=n.members,d=!1,_=new Array(c+2),m=this.currentFunction.getTempLocal(this.options.usizeType);assert(c==u.length);for(var y=0,g=c;y=0);var h=this.compileExpressionRetainType(u,this.options.usizeType,0);return this.currentType=i.type,n.createLoad(i.type.byteSize,i.type.is(5),h,i.type.toNativeType(),i.memoryOffset);case l.ElementKind.PROPERTY:var _=i.getterPrototype;if(_){var m=this.resolver.resolveFunction(_,null);if(!m)return n.createUnreachable();var y=m.signature;if(!this.checkCallSignature(y,0,m.is(p.CommonFlags.INSTANCE),e))return n.createUnreachable();var g=0!=(m.decoratorFlags&l.DecoratorFlags.INLINE);if(m.is(p.CommonFlags.INSTANCE)){s=assert(m.parent);assert(s.kind==l.ElementKind.CLASS);u=assert(this.resolver.resolvedThisExpression),h=this.compileExpressionRetainType(u,this.options.usizeType,0);return this.currentType=y.returnType,this.compileCallDirect(m,[],e,h,g)}return this.currentType=y.returnType,this.compileCallDirect(m,[],e,0,g)}return this.error(o.DiagnosticCode.Property_0_does_not_exist_on_type_1,e.range,i.simpleName,i.parent.toString()),n.createUnreachable()}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.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,d.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var l=this.precomputeExpressionRef(s);if(c.getExpressionId(l)==c.ExpressionId.Const&&c.getExpressionType(l)==c.NativeType.I32)return c.getConstValueI32(l)?this.compileExpressionRetainType(r,t,0):this.compileExpressionRetainType(n,t,0);s=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType)}var u=a.fork();i.flow=u;var h=this.compileExpressionRetainType(r,t,0),_=this.currentType;u.free();var m=a.fork();i.flow=m;var y=this.compileExpressionRetainType(n,t,0),g=this.currentType;i.flow=m.free(),a.inheritMutual(u,m);var E=d.Type.commonCompatible(_,g,!1);return E?(h=this.convertExpression(h,_,E,1,0,r),y=this.convertExpression(y,g,E,1,0,n),this.currentType=E,this.module.createIf(s,h,y)):(this.error(o.DiagnosticCode.Type_0_is_not_assignable_to_type_1,e.range,_.toString(),g.toString()),this.currentType=t,this.module.createUnreachable())},t.prototype.compileUnaryPostfixExpression=function(e,t){var r=this.module,n=this.currentFunction,i=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0);if(c.getExpressionId(i)==c.ExpressionId.Unreachable)return i;var a,s,p,l=this.currentType;switch(e.operator){case u.Token.PLUS_PLUS:if(this.currentType.is(256))return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(l.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=c.BinaryOp.AddI32,s=c.NativeType.I32,p=r.createI32(1);break;case 9:case 4:a=(h=this.options).isWasm64?c.BinaryOp.AddI64:c.BinaryOp.AddI32,s=h.nativeSizeType,p=l.toNativeOne(r);break;case 3:case 8:a=c.BinaryOp.AddI64,s=c.NativeType.I64,p=r.createI64(1);break;case 11:a=c.BinaryOp.AddF32,s=c.NativeType.F32,p=r.createF32(1);break;case 12:a=c.BinaryOp.AddF64,s=c.NativeType.F64,p=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;case u.Token.MINUS_MINUS:if(this.currentType.is(256))return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(l.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=c.BinaryOp.SubI32,s=c.NativeType.I32,p=r.createI32(1);break;case 9:case 4:var h;a=(h=this.options).isWasm64?c.BinaryOp.SubI64:c.BinaryOp.SubI32,s=h.nativeSizeType,p=l.toNativeOne(r);break;case 3:case 8:a=c.BinaryOp.SubI64,s=c.NativeType.I64,p=r.createI64(1);break;case 11:a=c.BinaryOp.SubF32,s=c.NativeType.F32,p=r.createF32(1);break;case 12:a=c.BinaryOp.SubF64,s=c.NativeType.F64,p=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;default:return assert(!1),r.createUnreachable()}if(t==d.Type.void)return this.compileAssignmentWithValue(e.operand,r.createBinary(a,i,p),!1);var _=n.getTempLocal(l,!1),m=this.compileAssignmentWithValue(e.operand,r.createBinary(a,this.module.createGetLocal(_.index,s),p),!1);this.currentType=assert(_).type,n.freeTempLocal(_);var y=_.index;return r.createBlock(null,[r.createSetLocal(y,i),m,r.createGetLocal(y,s)],s)},t.prototype.compileUnaryPrefixExpression=function(e,t){var r,n=this.module,i=!1;switch(e.operator){case u.Token.PLUS:if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.PLUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}break;case u.Token.MINUS:if(e.operand.kind==h.NodeKind.LITERAL&&(e.operand.literalKind==h.LiteralKind.INTEGER||e.operand.literalKind==h.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==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.MINUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.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(c.BinaryOp.SubI32,n.createI32(0),r);break;case 9:case 4:r=n.createBinary(this.options.isWasm64?c.BinaryOp.SubI64:c.BinaryOp.SubI32,this.currentType.toNativeZero(n),r);break;case 3:case 8:r=n.createBinary(c.BinaryOp.SubI64,n.createI64(0),r);break;case 11:r=n.createUnary(c.UnaryOp.NegF32,r);break;case 12:r=n.createUnary(c.UnaryOp.NegF64,r);break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.PLUS_PLUS:if(i=!0,r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.PREFIX_INC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.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(c.BinaryOp.AddI32,r,this.module.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?c.BinaryOp.AddI64:c.BinaryOp.AddI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(c.BinaryOp.AddI64,r,n.createI64(1));break;case 11:r=n.createBinary(c.BinaryOp.AddF32,r,n.createF32(1));break;case 12:r=n.createBinary(c.BinaryOp.AddF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.MINUS_MINUS:if(i=!0,r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.PREFIX_DEC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.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(c.BinaryOp.SubI32,r,n.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?c.BinaryOp.SubI64:c.BinaryOp.SubI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(c.BinaryOp.SubI64,r,n.createI64(1));break;case 11:r=n.createBinary(c.BinaryOp.SubF32,r,n.createF32(1));break;case 12:r=n.createBinary(c.BinaryOp.SubF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.EXCLAMATION:if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256))if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}r=this.makeIsFalseish(r,this.currentType),this.currentType=d.Type.bool;break;case u.Token.TILDE:if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t.is(8)?d.Type.i64:t,0,0),this.currentType.is(256)){var a,s;if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.BITWISE_NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.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(c.BinaryOp.XorI32,r,n.createI32(-1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?c.BinaryOp.XorI64:c.BinaryOp.XorI32,r,this.currentType.toNativeNegOne(n));break;case 3:case 8:r=n.createBinary(c.BinaryOp.XorI64,r,n.createI64(-1,-1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.TYPEOF:return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();default:return assert(!1),n.createUnreachable()}return i?this.compileAssignmentWithValue(e.operand,r,t!=d.Type.void):r},t.prototype.ensureSmallIntegerWrap=function(e,t){var r=this.module,n=this.currentFunction.flow;switch(t.kind){case 0:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(c.UnaryOp.ExtendI8ToI32,e):r.createBinary(c.BinaryOp.ShrI32,r.createBinary(c.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24)));break;case 1:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(c.UnaryOp.ExtendI16ToI32,e):r.createBinary(c.BinaryOp.ShrI32,r.createBinary(c.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16)));break;case 5:n.canOverflow(e,t)&&(e=r.createBinary(c.BinaryOp.AndI32,e,r.createI32(255)));break;case 6:n.canOverflow(e,t)&&(e=r.createBinary(c.BinaryOp.AndI32,e,r.createI32(65535)));break;case 10:n.canOverflow(e,t)&&(e=r.createBinary(c.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(c.UnaryOp.EqzI32,e);case 3:case 8:return r.createUnary(c.UnaryOp.EqzI64,e);case 9:case 4:return r.createUnary(64==t.size?c.UnaryOp.EqzI64:c.UnaryOp.EqzI32,e);case 11:return r.createBinary(c.BinaryOp.EqF32,e,r.createF32(0));case 12:return r.createBinary(c.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(c.BinaryOp.NeI64,e,r.createI64(0));case 9:case 4:return 64==t.size?r.createBinary(c.BinaryOp.NeI64,e,r.createI64(0)):e;case 11:return r.createBinary(c.BinaryOp.NeF32,e,r.createF32(0));case 12:return r.createBinary(c.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,o=this.currentFunction,c=this.options.nativeSizeType,u=o.getTempLocal(e.type,!1),h=new Array;if(h.push(a.createSetLocal(u.index,s.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==l.ElementKind.FIELD){var y=m,g=y.type,E=g.toNativeType(),T=y.prototype.declaration;if(assert(!y.isAny(p.CommonFlags.CONST)),T.initializer)h.push(a.createStore(g.byteSize,a.createGetLocal(u.index,c),this.compileExpression(T.initializer,g,1,0),E,y.memoryOffset));else{var f=y.prototype.declaration.parameterIndex;h.push(a.createStore(g.byteSize,a.createGetLocal(u.index,c),f>=0?a.createGetLocal(1+f,E):g.toNativeZero(a),E,y.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(u.index,c)),o.freeTempLocal(u),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(n==c.NativeType.I64?r.createBinary(c.BinaryOp.NeI64,r.createGetLocal(0,c.NativeType.I64),r.createI64(0)):r.createGetLocal(0,c.NativeType.I32),r.createGetLocal(0,n),r.createTeeLocal(0,this.makeAllocate(e,t)))},t.prototype.addDebugLocation=function(e,t){var r=this.currentFunction,n=t.source;n.debugInfoIndex<0&&(n.debugInfoIndex=this.module.addDebugInfoFile(n.normalizedPath)),t.debugInfoRef=e,r.debugLocations.push(t)},t}(o.DiagnosticEmitter);function T(e,t){switch(void 0===t&&(t=e.simpleName),e.kind){case l.ElementKind.FUNCTION:return(r=e.parent||e.prototype.parent)?T(r)+(e.is(p.CommonFlags.INSTANCE)?p.INSTANCE_DELIMITER:p.STATIC_DELIMITER)+t:t;case l.ElementKind.FIELD:case l.ElementKind.ENUMVALUE:return T(r=assert(e.parent))+(e.is(p.CommonFlags.INSTANCE)?p.INSTANCE_DELIMITER:p.STATIC_DELIMITER)+t;case l.ElementKind.CLASS:return(r=e.prototype.parent)?T(r)+p.STATIC_DELIMITER+t:t;default:var r;return(r=e.parent)?T(r)+p.STATIC_DELIMITER+t:t}}function f(e,t,r){if(void 0===r&&(r=null),y=r?r.simpleName:t.range.source.simplePath,g=e.simpleName,e.hasDecorator(l.DecoratorFlags.EXTERNAL)){var n=e.program,i=assert(h.findDecorator(h.DecoratorKind.EXTERNAL,t.decorators)),a=i.arguments;if(a&&a.length){var s=a[0];s.kind==h.NodeKind.LITERAL&&s.literalKind==h.LiteralKind.STRING?(g=s.value,a.length>=2&&((s=a[1]).kind==h.NodeKind.LITERAL&&s.literalKind==h.LiteralKind.STRING?(y=g,g=s.value,a.length>2&&n.error(o.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"2",a.length.toString())):n.error(o.DiagnosticCode.String_literal_expected,s.range))):n.error(o.DiagnosticCode.String_literal_expected,s.range)}else n.error(o.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,i.range,"1","0")}}t.Compiler=E},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var i=r(0),a=r(5),s=r(8),o=r(1),c=r(3),p=r(2),l=i.LIBRARY_PREFIX+"builtins.ts",u=function(e){function t(){var t=e.call(this)||this;return t.backlog=new Array,t.seenlog=new Set,t.donelog=new Set,t.onComment=null,t.tryParseSignatureIsSignature=!1,t.parseParametersThis=null,t.program=new a.Program(t.diagnostics),t}return n(t,e),t.prototype.parseFile=function(e,t,r){var n=c.normalizePath(t),a=p.mangleInternalPath(n);if(!this.donelog.has(a)){this.donelog.add(a),this.seenlog.add(a);var o=new p.Source(n,e,r?p.SourceKind.ENTRY:t.startsWith(i.LIBRARY_PREFIX)&&t.indexOf(i.PATH_DELIMITER,i.LIBRARY_PREFIX.length)<0?p.SourceKind.LIBRARY:p.SourceKind.DEFAULT),u=this.program;u.sources.push(o),o.normalizedPath==l&&o.set(i.CommonFlags.BUILTIN);var h=new s.Tokenizer(o,u.diagnostics);h.onComment=this.onComment,o.tokenizer=h;for(var d=o.statements;!h.skip(s.Token.ENDOFFILE);){var _=this.parseTopLevelStatement(h);_&&(_.parent=o,d.push(_))}h.finish()}},t.prototype.parseTopLevelStatement=function(e,t){void 0===t&&(t=null);for(var r=i.CommonFlags.NONE,n=-1,a=null;e.skip(s.Token.AT);){n<0&&(n=e.tokenPos);var c=this.parseDecorator(e);c?(a||(a=[]),a.push(c)):this.skipStatement(e)}r|=e.source.flags&i.CommonFlags.BUILTIN;var p=0,l=0;e.skip(s.Token.EXPORT)&&(e.skip(s.Token.DEFAULT)&&this.error(o.DiagnosticCode.Operation_not_supported,e.range()),n<0&&(n=e.tokenPos),r|=i.CommonFlags.EXPORT,p=e.tokenPos,l=e.pos);var u=null!=t&&t.is(i.CommonFlags.AMBIENT);e.skip(s.Token.DECLARE)?(n<0&&(n=e.tokenPos),u&&this.error(o.DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,e.range()),r|=i.CommonFlags.DECLARE|i.CommonFlags.AMBIENT):u&&(r|=i.CommonFlags.AMBIENT);var h=null,d=e.peek();switch(n<0&&(n=e.nextTokenPos),d){case s.Token.CONST:if(e.next(),r|=i.CommonFlags.CONST,e.skip(s.Token.ENUM)){h=this.parseEnum(e,r,a,n);break}h=this.parseVariable(e,r,a,n),a=null;break;case s.Token.LET:r|=i.CommonFlags.LET;case s.Token.VAR:e.next(),h=this.parseVariable(e,r,a,n),a=null;break;case s.Token.ENUM:e.next(),h=this.parseEnum(e,r,a,n),a=null;break;case s.Token.FUNCTION:e.next(),h=this.parseFunction(e,r,a,n),a=null;break;case s.Token.ABSTRACT:var _=e.mark();if(e.next(),!e.skip(s.Token.CLASS)){e.reset(_),h=this.parseStatement(e,!0);break}e.discard(_),r|=i.CommonFlags.ABSTRACT;case s.Token.CLASS:case s.Token.INTERFACE:e.next(),h=this.parseClassOrInterface(e,r,a,n),a=null;break;case s.Token.NAMESPACE:_=e.mark();e.next(),e.peek(!1,s.IdentifierHandling.PREFER)==s.Token.IDENTIFIER?(e.discard(_),h=this.parseNamespace(e,r,a,n),a=null):(e.reset(_),h=this.parseStatement(e,!0));break;case s.Token.IMPORT:e.next(),h=(r|=i.CommonFlags.IMPORT)&i.CommonFlags.EXPORT?this.parseExportImport(e,n):this.parseImport(e);break;case s.Token.TYPE:_=e.mark();e.next(),e.peek(!1,s.IdentifierHandling.PREFER)==s.Token.IDENTIFIER?(e.discard(_),h=this.parseTypeDeclaration(e,r,a,n),a=null):(e.reset(_),h=this.parseStatement(e,!0));break;default:r&i.CommonFlags.EXPORT?h=this.parseExport(e,r,n):(l&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(p,l),"export"),t||(h=this.parseStatement(e,!0)))}if(a)for(var m=0,y=a.length;m"),null}if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"null"),null;_=!0}n=p.Node.createType(h,d,_,e.range(a,e.pos))}for(;e.skip(s.Token.OPENBRACKET);){var y=e.tokenPos;if(!e.skip(s.Token.CLOSEBRACKET))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;var g=e.range(y,e.pos);_=!1;if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"null"),null;_=!0}if(n=p.Node.createType(p.Node.createIdentifierExpression("Array",g),[n],_,e.range(a,e.pos)),_)break}return n},t.prototype.tryParseSignature=function(e){var t,r=e.mark(),n=e.tokenPos,i=null,a=null,c=!1;if(e.skip(s.Token.CLOSEPAREN))c=!0,e.discard(r),i=[];else{c=!1;do{var l=p.ParameterKind.DEFAULT;if(e.skip(s.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),l=p.ParameterKind.REST),e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return e.reset(r),this.tryParseSignatureIsSignature=!1,null;c=!0,e.discard(r);var u=this.parseType(e,!1);if(!u)return null;if(u.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,u.range),this.tryParseSignatureIsSignature=!0,null;a=u}else{if(!e.skipIdentifier())return c?this.error(o.DiagnosticCode.Identifier_expected,e.range()):e.reset(r),this.tryParseSignatureIsSignature=c,null;var h=p.Node.createIdentifierExpression(e.readIdentifier(),e.range(e.tokenPos,e.pos));if(e.skip(s.Token.QUESTION)&&(c=!0,e.discard(r),l==p.ParameterKind.REST?this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):l=p.ParameterKind.OPTIONAL),e.skip(s.Token.COLON)){c=!0,e.discard(r);var d=this.parseType(e);if(!d)return this.tryParseSignatureIsSignature=c,null;var _=new p.ParameterNode;_.parameterKind=l,_.name=h,_.type=d,i?i.push(_):i=[_]}else c&&this.error(o.DiagnosticCode.Type_expected,e.range())}}while(e.skip(s.Token.COMMA));if(!e.skip(s.Token.CLOSEPAREN))return 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,p.Node.createSignature(i||[],t,a,!1,e.range(n,e.pos))):(this.tryParseSignatureIsSignature=c,null)):(c?this.error(o.DiagnosticCode._0_expected,e.range(),"=>"):e.reset(r),this.tryParseSignatureIsSignature=c,null)},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skipIdentifier()){for(var r=e.readIdentifier(),n=p.Node.createIdentifierExpression(r,e.range(t,e.pos));e.skip(s.Token.DOT);){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;r=e.readIdentifier(),n=p.Node.createPropertyAccessExpression(n,p.Node.createIdentifierExpression(r,e.range()),e.range(t,e.pos))}var i=void 0;if(!e.skip(s.Token.OPENPAREN))return p.Node.createDecorator(n,null,e.range(t,e.pos));if(i=this.parseArguments(e))return p.Node.createDecorator(n,i,e.range(t,e.pos))}else this.error(o.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r,n){var i=new Array;do{var a=this.parseVariableDeclaration(e,t,r);if(!a)return null;i.push(a)}while(e.skip(s.Token.COMMA));var o=p.Node.createVariableStatement(i,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),o},t.prototype.parseVariableDeclaration=function(e,t,r){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var n=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=t,c=null;e.skip(s.Token.COLON)&&(c=this.parseType(e));var l=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()),!(l=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 p.Node.createVariableDeclaration(n,c,l,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=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.next()!=s.Token.OPENBRACE)return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;for(var c=new Array;!e.skip(s.Token.CLOSEBRACE);){var l=this.parseEnumValue(e,i.CommonFlags.NONE);if(!l)return null;if(c.push(l),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEBRACE))break;return this.error(o.DiagnosticCode._0_expected,e.range(),"}"),null}}var u=p.Node.createEnumDeclaration(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=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),n=null;return e.skip(s.Token.EQUALS)&&!(n=this.parseExpression(e,2))?null:p.Node.createEnumValueDeclaration(r,n,t,s.Range.join(r.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=s.Token.SEMICOLON&&e.nextToken!=s.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=p.Node.createReturnStatement(t,e.range());return e.skip(s.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){for(var t=new Array;!e.skip(s.Token.GREATERTHAN);){var r=this.parseTypeParameter(e);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.GREATERTHAN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),">"),null}}return 0===t.length&&this.error(o.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range()),t},t.prototype.parseTypeParameter=function(e){if(e.next()==s.Token.IDENTIFIER){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(s.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return p.Node.createTypeParameter(t,r,s.Range.join(t.range,e.range()))}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e,t){void 0===t&&(t=!1);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==p.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 l=this.parseParameter(e,t);if(!l)return null;switch(n&&!a&&(this.error(o.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,n.name.range),a=!0),l.parameterKind){default:i&&this.error(o.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,l.name.range);break;case p.ParameterKind.OPTIONAL:i=!0;break;case p.ParameterKind.REST:n=l}if(r.push(l),!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 l=e.mark();e.next(),e.peek()!=s.Token.COLON?(e.discard(l),a||(a=e.range()),c|=i.CommonFlags.READONLY):e.reset(l)}if(e.skip(s.Token.DOT_DOT_DOT)&&(c?this.error(o.DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,e.range()):a=e.range(),r=!0),e.skipIdentifier()){r||(a=e.range());var u=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),h=null;if((n=e.skip(s.Token.QUESTION))&&r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,u.range),e.skip(s.Token.COLON)){if(!(h=this.parseType(e)))return null}else h=p.Node.createOmittedType(e.range(e.pos));var d=null;if(e.skip(s.Token.EQUALS)&&(r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,u.range),n?this.error(o.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,u.range):n=!0,!(d=this.parseExpression(e,2))))return null;var _=p.Node.createParameter(u,h,d,r?p.ParameterKind.REST:n?p.ParameterKind.OPTIONAL:p.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=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=-1,l=null;if(e.skip(s.Token.LESSTHAN)){if(c=e.tokenPos,!(l=this.parseTypeParameters(e)))return null;t|=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;_||(_=p.Node.createOmittedType(e.range(e.pos)),d||this.error(o.DiagnosticCode.Type_expected,_.range));var m=p.Node.createSignature(u,_,h,!1,e.range(c,e.pos)),y=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()),!(y=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 g=p.Node.createFunctionDeclaration(a,l,m,y,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),g},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==s.Token.FUNCTION){if(t=e.skipIdentifier()?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==s.Token.OPENPAREN),t=p.Node.createEmptyIdentifierExpression(e.range(e.tokenPos));var i=e.pos,a=this.parseParameters(e);return a?this.parseFunctionExpressionCommon(e,t,a,n,r,i):null},t.prototype.parseFunctionExpressionCommon=function(e,t,r,n,a,c){void 0===a&&(a=-1),void 0===c&&(c=-1),a<0&&(a=t.range.start),c<0&&(c=a);var l=null;if(e.skip(s.Token.COLON)){if(!(l=this.parseType(e)))return null}else l=p.Node.createOmittedType(e.range(e.pos)),this.error(o.DiagnosticCode.Type_expected,l.range);if(n&&!e.skip(s.Token.EQUALS_GREATERTHAN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var u,h=p.Node.createSignature(r,l,null,!1,e.range(c,e.pos));if(n)u=this.parseStatement(e,!1);else{if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;u=this.parseBlockStatement(e,!1)}if(!u)return null;var d=p.Node.createFunctionDeclaration(t,null,h,u,null,n?i.CommonFlags.ARROW:i.CommonFlags.NONE,e.range(a,e.pos));return p.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,l=p.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!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,h.range),null;u=h}var d=null;if(e.skip(s.Token.IMPLEMENTS)){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,y=new Array;if(a?(assert(!d),m=p.Node.createInterfaceDeclaration(l,c,u,y,r,t,e.range(n,e.pos))):m=p.Node.createClassDeclaration(l,c,u,d,y,r,t,e.range(n,e.pos)),!e.skip(s.Token.CLOSEBRACE))do{var g=this.parseClassMember(e,m);if(!g)return null;g.parent=m,y.push(g)}while(!e.skip(s.Token.CLOSEBRACE));return m},t.prototype.parseClassExpression=function(e){var t,r=e.tokenPos;if(t=e.skipIdentifier()?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.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=p.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 p.Node.createClassExpression(a)},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=t.kind==p.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 l=t.flags&i.CommonFlags.AMBIENT;n&&(l|=i.CommonFlags.VIRTUAL),e.skip(s.Token.PUBLIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"public"),l|=i.CommonFlags.PUBLIC):e.skip(s.Token.PRIVATE)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"private"),l|=i.CommonFlags.PRIVATE):e.skip(s.Token.PROTECTED)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"protected"),l|=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"),l|=i.CommonFlags.STATIC,u=e.tokenPos,h=e.pos):(l|=i.CommonFlags.INSTANCE,e.skip(s.Token.ABSTRACT)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"abstract"),l|=i.CommonFlags.ABSTRACT,d=e.tokenPos,_=e.pos),t.flags&i.CommonFlags.GENERIC&&(l|=i.CommonFlags.GENERIC_CONTEXT));var m=0,y=0;e.skip(s.Token.READONLY)&&(l|=i.CommonFlags.READONLY,m=e.tokenPos,y=e.pos);var g=e.mark(),E=!1,T=!1,f=!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(g):(l|=i.CommonFlags.GET,T=!0,I=e.tokenPos,v=e.pos,l&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly")):e.skip(s.Token.SET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(g):(l|=i.CommonFlags.SET|i.CommonFlags.SET,f=!0,I=e.tokenPos,v=e.pos,l&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly")):e.skip(s.Token.CONSTRUCTOR)&&(E=!0,(l|=i.CommonFlags.CONSTRUCTOR)&i.CommonFlags.STATIC&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(u,h),"static"),l&i.CommonFlags.ABSTRACT&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(d,_),"abstract"),l&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly"))),!E&&!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var A=E?p.Node.createConstructorExpression(e.range()):p.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)):T||f?this.error(o.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(N,e.pos)):l|=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 p.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case s.Token.THIS:return p.Node.createThisExpression(e.range(r,e.pos));case s.Token.CONSTRUCTOR:return p.Node.createConstructorExpression(e.range(r,e.pos));case s.Token.SUPER:return p.Node.createSuperExpression(e.range(r,e.pos));case s.Token.STRINGLITERAL:return p.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case s.Token.INTEGERLITERAL:return p.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case s.Token.FLOATLITERAL:return p.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case s.Token.SLASH:var T=e.readRegexpPattern();return e.skip(s.Token.SLASH)?p.Node.createRegexpLiteralExpression(T,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 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(p.nodeIsCallable(r.kind))for(var a=null;e.skip(s.Token.OPENPAREN)||p.nodeIsGenericCallable(r.kind)&&null!==(a=this.tryParseTypeArgumentsBeforeArguments(e));){var c=this.parseArguments(e);if(!c)return null;r=p.Node.createCallExpression(r,a,c,e.range(i,e.pos))}for(var l,u=null;(l=h(n=e.peek()))>=t;)switch(e.next(),n){case s.Token.AS:var _=this.parseType(e);if(!_)return null;r=p.Node.createAssertionExpression(p.AssertionKind.AS,r,_,e.range(i,e.pos));break;case s.Token.INSTANCEOF:var m=this.parseType(e);if(!m)return null;r=p.Node.createInstanceOfExpression(r,m,e.range(i,e.pos));break;case s.Token.OPENBRACKET:if(!(u=this.parseExpression(e)))return null;if(!e.skip(s.Token.CLOSEBRACKET))return this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;r=p.Node.createElementAccessExpression(r,u,e.range(i,e.pos));break;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:r.kind!=p.NodeKind.IDENTIFIER&&r.kind!=p.NodeKind.ELEMENTACCESS&&r.kind!=p.NodeKind.PROPERTYACCESS&&this.error(o.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,r.range),r=p.Node.createUnaryPostfixExpression(n,r,e.range(i,e.pos));break;case s.Token.QUESTION:var y=this.parseExpression(e);if(!y)return null;if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;var g=this.parseExpression(e,t>1?2:1);if(!g)return null;r=p.Node.createTernaryExpression(r,y,g,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=p.Node.createCommaExpression(E,e.range(i,e.pos));break;default:if(!(u=this.parseExpression(e,d(n)?l:l+1)))return null;if(n==s.Token.DOT)if(u.kind==p.NodeKind.IDENTIFIER)r=p.Node.createPropertyAccessExpression(r,u,e.range(i,e.pos));else{if(u.kind!=p.NodeKind.CALL)return this.error(o.DiagnosticCode.Identifier_expected,u.range),null;var T=u;if(T.expression.kind!=p.NodeKind.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,T.expression.range),null;T.expression=p.Node.createPropertyAccessExpression(r,T.expression,e.range(i,e.pos)),r=T}else r=p.Node.createBinaryExpression(n,r,u,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 h(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 d(e){switch(e){case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:case s.Token.QUESTION:case s.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=u,function(e){e[e.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,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),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(5),c=r(3),p=function(){function e(e,t){void 0===t&&(t=!1),this.todo=[],this.seen=new Set,this.program=e,this.includePrivate}return e.prototype.walk=function(){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)}}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;00&&this.push(", "),this.push("$"),this.push(i.toString(10)),this.push(": "),this.push(a(n.getFunctionParamType(e,i)));this.push("): "),this.push(a(n.getFunctionResultType(e))),this.push(" "),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("{\n"),this.decompileExpression(r),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("\n}\n"),++this.functionId},e.prototype.decompileExpression=function(e){var t,r,i,s,o=n.getExpressionId(e),c=n.getExpressionType(e);switch(o){case n.ExpressionId.Block:for(null!=(r=n.getBlockName(e))&&(this.push(r),this.push(": ")),this.push("{\n"),s=n.getBlockChildCount(e),i=0;i("),this.push(n.getLoadOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getLoadPtr(e)),void this.push(")");case n.ExpressionId.Store:return this.push("store<"),this.push(a(c)),this.push(">("),this.push(n.getStoreOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getStorePtr(e)),this.push(", "),this.decompileExpression(n.getStoreValue(e)),void this.push(")");case n.ExpressionId.Const:switch(c){case n.NativeType.I32:return void this.push(n.getConstValueI32(e).toString(10));case n.NativeType.I64:return void this.push(i64_to_string(i64_new(n.getConstValueI64Low(e),n.getConstValueI64High(e))));case n.NativeType.F32:return void this.push(n.getConstValueF32(e).toString(10));case n.NativeType.F64:return void this.push(n.getConstValueF64(e).toString(10))}break;case n.ExpressionId.Unary:switch(n.getUnaryOp(e)){case n.UnaryOp.ClzI32:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI32:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI32:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NegF32:case n.UnaryOp.NegF64:return this.push("-"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.AbsF32:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF32:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF32:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF32:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF32:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF32:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.EqzI32:case n.UnaryOp.EqzI64:return this.push("!"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ClzI64:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI64:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI64:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.AbsF64:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF64:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF64:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF64:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF64:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF64:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ExtendI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ExtendU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.WrapI64:case n.UnaryOp.TruncF32ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretF32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretF64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ConvertI32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.PromoteF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.DemoteF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretI32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretI64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")")}break;case n.ExpressionId.Binary:switch(n.getBinaryOp(e)){case n.BinaryOp.AddI32:case n.BinaryOp.AddI64:case n.BinaryOp.AddF32:case n.BinaryOp.AddF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" + "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.SubI32:case n.BinaryOp.SubI64:case n.BinaryOp.SubF32:case n.BinaryOp.SubF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" - "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.MulI32:case n.BinaryOp.MulI64:case n.BinaryOp.MulF32:case n.BinaryOp.MulF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" * "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivI32:case n.BinaryOp.DivI64:case n.BinaryOp.DivF32:case n.BinaryOp.DivF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RemI32:case n.BinaryOp.RemI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.AndI32:case n.BinaryOp.AndI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" & "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.OrI32:case n.BinaryOp.OrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" | "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.XorI32:case n.BinaryOp.XorI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" ^ "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShlI32:case n.BinaryOp.ShlI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" << "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrU32:case n.BinaryOp.ShrU64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >>> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrI32:case n.BinaryOp.ShrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI32:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI32:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.EqI32:case n.BinaryOp.EqI64:case n.BinaryOp.EqF32:case n.BinaryOp.EqF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" == "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.NeI32:case n.BinaryOp.NeI64:case n.BinaryOp.NeF32:case n.BinaryOp.NeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" != "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtI32:case n.BinaryOp.LtI64:case n.BinaryOp.LtF32:case n.BinaryOp.LtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeI32:case n.BinaryOp.LeI64:case n.BinaryOp.LeF32:case n.BinaryOp.LeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtI32:case n.BinaryOp.GtI64:case n.BinaryOp.GtF32:case n.BinaryOp.GtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeI32:case n.BinaryOp.GeI64:case n.BinaryOp.GeF32:case n.BinaryOp.GeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI64:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI64:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.LtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.CopysignF32:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF32:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF32:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.CopysignF64:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF64:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF64:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")")}return;case n.ExpressionId.Select:return this.push("select<"),this.push(a(c)),this.push(">("),this.decompileExpression(n.getSelectThen(e)),this.push(", "),this.decompileExpression(n.getSelectElse(e)),this.push(", "),this.decompileExpression(n.getSelectCondition(e)),void this.push(")");case n.ExpressionId.Drop:return this.decompileExpression(n.getDropValue(e)),void this.push(";\n");case n.ExpressionId.Return:return void((t=n.getReturnValue(e))?(this.push("return "),this.decompileExpression(t),this.push(";\n")):this.push("return;\n"));case n.ExpressionId.Host:switch(n.getHostOp(e)){case n.HostOp.CurrentMemory:return void this.push("current_memory()");case n.HostOp.GrowMemory:return this.push("grow_memory("),this.decompileExpression(n.getHostOperand(e,0)),void this.push(")")}break;case n.ExpressionId.Nop:return void this.push(";\n");case n.ExpressionId.Unreachable:return void this.push("unreachable()");case n.ExpressionId.AtomicCmpxchg:case n.ExpressionId.AtomicRMW:case n.ExpressionId.AtomicWait:case n.ExpressionId.AtomicWake:}throw new Error("not implemented")},e.prototype.push=function(e){this.text.push(e)},e.prototype.finish=function(){var e=this.text.join("");return this.text=[],e},e}();function a(e){switch(e){case n.NativeType.None:return"void";case n.NativeType.I32:return"i32";case n.NativeType.I64:return"i64";case n.NativeType.F32:return"f32";case n.NativeType.F64:return"f64";case n.NativeType.Unreachable:throw new Error("unreachable type");case n.NativeType.Auto:throw new Error("auto type");default:throw new Error("unexpected type")}}t.Decompiler=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(10),i=r(13),a=r(12),s=r(1);t.formatDiagnostic=s.formatDiagnosticMessage;var o=r(11);t.parseFile=function(e,t,r,n){return void 0===r&&(r=!1),void 0===n&&(n=null),n||(n=new o.Parser),n.parseFile(e,t,r),n},t.nextFile=function(e){return e.nextFile()},t.nextDiagnostic=function(e){var t=e.program;return t.diagnosticsOffset>>=0)&&e<256)&&(n=s[e])?n:(r=p(e,(0|e)<0?-1:0,!0),i&&(s[e]=r),r):(i=-128<=(e|=0)&&e<128)&&(n=a[e])?n:(r=p(e,e<0?-1:0,!1),i&&(a[e]=r),r)}function c(e,t){if(isNaN(e))return t?E:g;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():p(e%d|0,e/d|0,t)}function p(e,t,r){return new n(e,t,r)}n.fromInt=o,n.fromNumber=c,n.fromBits=p;var l=Math.pow;function u(e,t,r){if(0===e.length)throw Error("empty string");if("NaN"===e||"Infinity"===e||"+Infinity"===e||"-Infinity"===e)return g;if("number"==typeof t?(r=t,t=!1):t=!!t,(r=r||10)<2||360)throw Error("interior hyphen");if(0===n)return u(e.substring(1),t,r).neg();for(var i=c(l(r,8)),a=g,s=0;s>>0:this.low},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 p+s;for(;p.length<6;)p="0"+p;s=""+p+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(T)},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,l=0,u=0,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,u+=(d+=n+c)>>>16,l+=(u+=r+o)>>>16,l+=t+s,p((d&=65535)<<16|(_&=65535),(l&=65535)<<16|(u&=65535),this.unsigned)},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 g;if(i(e)||(e=h(e)),r)return p(r.mul(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned);if(e.isZero())return g;if(this.eq(C))return e.isOdd()?C:g;if(e.eq(C))return this.isOdd()?C:g;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(y)&&e.lt(y))return c(this.toNumber()*e.toNumber(),this.unsigned);var t=this.high>>>16,n=65535&this.high,a=this.low>>>16,s=65535&this.low,o=e.high>>>16,l=65535&e.high,u=e.low>>>16,d=65535&e.low,_=0,m=0,E=0,T=0;return E+=(T+=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*l)>>>16,_+=t*d+n*u+a*l+s*o,p((E&=65535)<<16|(T&=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?p((this.unsigned?r.div_u:r.div_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?E:g;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return E;if(e.gt(this.shru(1)))return f;a=E}else{if(this.eq(C))return e.eq(T)||e.eq(I)?C:e.eq(C)?T:(t=this.shr(1).div(e).shl(1)).eq(g)?e.isNegative()?T:I:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(C))return this.unsigned?E:g;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();a=g}for(n=this;n.gte(e);){t=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var s=Math.ceil(Math.log(t)/Math.LN2),o=s<=48?1:l(2,s-48),u=c(t),d=u.mul(e);d.isNegative()||d.gt(n);)d=(u=c(t-=o,this.unsigned)).mul(e);u.isZero()&&(u=T),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?p((this.unsigned?r.rem_u:r.rem_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this.sub(this.div(e).mul(e))},N.mod=N.modulo,N.rem=N.modulo,N.not=function(){return p(~this.low,~this.high,this.unsigned)},N.and=function(e){return i(e)||(e=h(e)),p(this.low&e.low,this.high&e.high,this.unsigned)},N.or=function(e){return i(e)||(e=h(e)),p(this.low|e.low,this.high|e.high,this.unsigned)},N.xor=function(e){return i(e)||(e=h(e)),p(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?p(this.low<>>32-e,this.unsigned):p(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):p(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},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?p(this.low>>>e|t<<32-e,t>>>e,this.unsigned):p(32===e?t:t>>>e-32,0,this.unsigned)},N.shru=N.shiftRightUnsigned,N.shr_u=N.shiftRightUnsigned,N.toSigned=function(){return this.unsigned?p(this.low,this.high,!1):this},N.toUnsigned=function(){return this.unsigned?this:p(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){(function(e){const t=e.Long||r(15);e.i64_zero=t.ZERO,e.i64_one=t.ONE,e.i64_new=function(e,r){return t.fromBits(e,r)},e.i64_low=function(e){return e.low},e.i64_high=function(e){return e.high},e.i64_add=function(e,t){return e.add(t)},e.i64_sub=function(e,t){return e.sub(t)},e.i64_mul=function(e,t){return e.mul(t)},e.i64_div=function(e,t){return e.div(t)},e.i64_div_u=function(e,t){return e.toUnsigned().div(t.toUnsigned()).toSigned()},e.i64_rem=function(e,t){return e.mod(t)},e.i64_rem_u=function(e,t){return e.toUnsigned().mod(t.toUnsigned()).toSigned()},e.i64_and=function(e,t){return e.and(t)},e.i64_or=function(e,t){return e.or(t)},e.i64_xor=function(e,t){return e.xor(t)},e.i64_shl=function(e,t){return e.shl(t)},e.i64_shr=function(e,t){return e.shr(t)},e.i64_shr_u=function(e,t){return e.shru(t)},e.i64_not=function(e){return e.not()},e.i64_eq=function(e,t){return e.eq(t)},e.i64_ne=function(e,t){return e.ne(t)},e.i64_align=function(e,r){assert(r&&0==(r&r-1));var n=t.fromInt(r-1);return e.add(n).and(n.not())},e.i64_is_i8=function(e){return 0===e.high&&e.low>=0&&e.low<=i8.MAX_VALUE||-1===e.high&&e.low>=i8.MIN_VALUE&&e.low<0},e.i64_is_i16=function(e){return 0===e.high&&e.low>=0&&e.low<=i16.MAX_VALUE||-1===e.high&&e.low>=i16.MIN_VALUE&&e.low<0},e.i64_is_i32=function(e){return 0===e.high&&e.low>=0||-1===e.high&&e.low<0},e.i64_is_u8=function(e){return 0===e.high&&e.low>=0&&e.low<=u8.MAX_VALUE},e.i64_is_u16=function(e){return 0===e.high&&e.low>=0&&e.low<=u16.MAX_VALUE},e.i64_is_u32=function(e){return 0===e.high},e.i64_is_bool=function(e){return 0===e.high&&(0===e.low||1===e.low)};const n=t.fromNumber(f32.MIN_SAFE_INTEGER),i=t.fromNumber(f32.MAX_SAFE_INTEGER);e.i64_is_f32=function(e){return e.gte(n)&&e.lte(i)};const a=t.fromNumber(f64.MIN_SAFE_INTEGER),s=t.fromNumber(f64.MAX_SAFE_INTEGER);e.i64_is_f64=function(e){return e.gte(a)&&e.lte(s)},e.i64_to_f32=function(t){return e.Math.fround(t.toNumber())},e.i64_to_f64=function(e){return e.toNumber()},e.i64_to_string=function(e,t){return(t?e.toUnsigned():e).toString(10)}}).call(this,r(7))},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(7))},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),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(5),p=r(2),l=r(6),u=r(0);!function(e){e[e.REPORT=0]="REPORT",e[e.SWALLOW=1]="SWALLOW"}(s||(s={}));var h=function(e){function t(t){var r=e.call(this,t.diagnostics)||this;return r.resolvedThisExpression=null,r.resolvedElementExpression=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==p.NodeKind.SIGNATURE){var n=this.resolveSignature(e,t,r);return n?e.isNullable?n.type.asNullable():n.type:null}assert(e.kind==p.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):l.Type.i32;case c.ElementKind.CLASS_PROTOTYPE:var y=this.resolveClassInclTypeArguments(m,i.typeArguments,t,e);return y?e.isNullable?y.type.asNullable():y.type:null}var g=this.program.typeAliases.get(a);if(g)return this.resolveType(g.type,t,r);var E=i.typeArguments;if(E){for(var T=E.length,f=new Array(T),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,H,V,R||g,r),e.instances.set(d,_),this.program.instancesLookup.set(H,_),_},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=l.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,y,g,E,T;void 0===r&&(r=null),void 0===n&&(n=s.REPORT);var f=t?l.typesToString(t):"",I=e.instances.get(f);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+="<"+f+">"),(I=new c.Class(e,B,U,t,F)).contextualTypeArguments=r,e.instances.set(f,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()),V=z.next();!V.done;V=z.next()){var H=V.value;switch(H.kind){case c.ElementKind.FIELD_PROTOTYPE:I.members||(I.members=new Map);var X=H.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(H.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(H,U+u.INSTANCE_DELIMITER+H.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(H.simpleName,Q);break;case c.ElementKind.FUNCTION_PROTOTYPE:I.members||(I.members=new Map);var q=this.resolveFunctionPartially(H,t,n);if(!q)return null;q.internalName=U+u.INSTANCE_DELIMITER+q.simpleName,I.members.set(H.simpleName,q);break;case c.ElementKind.PROPERTY:I.members||(I.members=new Map);var j=assert(H.getterPrototype),Z=H.setterPrototype,J=new c.Property(this.program,H.simpleName,U+u.INSTANCE_DELIMITER+H.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(H.simpleName,J);break;default:assert(!1)}}}catch(e){y={error:e}}finally{try{V&&!V.done&&(g=z.return)&&g.call(z)}finally{if(y)throw y.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&&(T=te.return)&&T.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,p=c.length;assert(p>0);var l=null!==t?t.length:0;if(p!=l)return i==s.REPORT&&this.error(o.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,p.toString(10),l.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){"use strict";function n(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24}function i(e,t,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function a(e,t){var r=n(e,t),i=n(e,t+4);return i64_new(r,i)}Object.defineProperty(t,"__esModule",{value:!0}),t.readI32=n,t.writeI32=i,t.readI64=a,t.writeI64=function(e,t,r){i(i64_low(e),t,r),i(i64_high(e),t,r+4)},t.readF32=function(e,t){return i32_as_f32(n(e,t))},t.writeF32=function(e,t,r){i(f32_as_i32(e),t,r)},t.readF64=function(e,t){return i64_as_f64(a(e,t))},t.writeF64=function(e,t,r){var n=f64_as_i64(e);i(i64_low(n),t,r),i(i64_high(n),t,r+4)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=" ",i=" ",a=" ";t.indent=function(e,t){for(;t>=4;)e.push(a),t-=4;t>=2&&(e.push(i),t-=2),t&&e.push(n)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=47;function i(e){for(var t,r=0,i=e.length;r+10||i=0;)if(e.charCodeAt(a)==n){r-a==3&&46==e.charCodeAt(a+1)&&46==e.charCodeAt(a+2)||(e=t?e.substring(0,a):e.substring(0,a)+e.substring(r+3),i-=r+3-a,r=a-1);break}if(a<0&&r>0&&(2!=r||46!=e.charCodeAt(0)||46!=e.charCodeAt(1))){i=(e=e.substring(r+4)).length;continue}}}r++}return i>0?e:"."}function a(e){for(var t=e.length;--t>0;)if(e.charCodeAt(t)==n)return e.substring(0,t);return"."}t.normalizePath=i,t.resolvePath=function(e,t){return e.startsWith("std/")?e:i(a(t)+String.fromCharCode(n)+e)},t.dirname=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NULL=0]="NULL",e[e.LINEFEED=10]="LINEFEED",e[e.CARRIAGERETURN=13]="CARRIAGERETURN",e[e.LINESEPARATOR=8232]="LINESEPARATOR",e[e.PARAGRAPHSEPARATOR=8233]="PARAGRAPHSEPARATOR",e[e.NEXTLINE=133]="NEXTLINE",e[e.SPACE=32]="SPACE",e[e.NONBREAKINGSPACE=160]="NONBREAKINGSPACE",e[e.ENQUAD=8192]="ENQUAD",e[e.EMQUAD=8193]="EMQUAD",e[e.ENSPACE=8194]="ENSPACE",e[e.EMSPACE=8195]="EMSPACE",e[e.THREEPEREMSPACE=8196]="THREEPEREMSPACE",e[e.FOURPEREMSPACE=8197]="FOURPEREMSPACE",e[e.SIXPEREMSPACE=8198]="SIXPEREMSPACE",e[e.FIGURESPACE=8199]="FIGURESPACE",e[e.PUNCTUATIONSPACE=8200]="PUNCTUATIONSPACE",e[e.THINSPACE=8201]="THINSPACE",e[e.HAIRSPACE=8202]="HAIRSPACE",e[e.ZEROWIDTHSPACE=8203]="ZEROWIDTHSPACE",e[e.NARROWNOBREAKSPACE=8239]="NARROWNOBREAKSPACE",e[e.IDEOGRAPHICSPACE=12288]="IDEOGRAPHICSPACE",e[e.MATHEMATICALSPACE=8287]="MATHEMATICALSPACE",e[e.OGHAM=5760]="OGHAM",e[e._=95]="_",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.AMPERSAND=38]="AMPERSAND",e[e.ASTERISK=42]="ASTERISK",e[e.AT=64]="AT",e[e.BACKSLASH=92]="BACKSLASH",e[e.BACKTICK=96]="BACKTICK",e[e.BAR=124]="BAR",e[e.CARET=94]="CARET",e[e.CLOSEBRACE=125]="CLOSEBRACE",e[e.CLOSEBRACKET=93]="CLOSEBRACKET",e[e.CLOSEPAREN=41]="CLOSEPAREN",e[e.COLON=58]="COLON",e[e.COMMA=44]="COMMA",e[e.DOLLAR=36]="DOLLAR",e[e.DOT=46]="DOT",e[e.DOUBLEQUOTE=34]="DOUBLEQUOTE",e[e.EQUALS=61]="EQUALS",e[e.EXCLAMATION=33]="EXCLAMATION",e[e.GREATERTHAN=62]="GREATERTHAN",e[e.HASH=35]="HASH",e[e.LESSTHAN=60]="LESSTHAN",e[e.MINUS=45]="MINUS",e[e.OPENBRACE=123]="OPENBRACE",e[e.OPENBRACKET=91]="OPENBRACKET",e[e.OPENPAREN=40]="OPENPAREN",e[e.PERCENT=37]="PERCENT",e[e.PLUS=43]="PLUS",e[e.QUESTION=63]="QUESTION",e[e.SEMICOLON=59]="SEMICOLON",e[e.SINGLEQUOTE=39]="SINGLEQUOTE",e[e.SLASH=47]="SLASH",e[e.TILDE=126]="TILDE",e[e.BACKSPACE=8]="BACKSPACE",e[e.FORMFEED=12]="FORMFEED",e[e.BYTEORDERMARK=65279]="BYTEORDERMARK",e[e.TAB=9]="TAB",e[e.VERTICALTAB=11]="VERTICALTAB"}(t.CharCode||(t.CharCode={})),t.isLineBreak=function(e){switch(e){case 10:case 13:case 8232:case 8233:return!0;default:return!1}},t.isWhiteSpace=function(e){switch(e){case 32:case 9:case 11:case 12:case 160:case 133:case 5760:case 8239:case 8287:case 12288:case 65279:return!0;default:return e>=8192&&e<=8203}},t.isDecimalDigit=function(e){return e>=48&&e<=57},t.isOctalDigit=function(e){return e>=48&&e<=55},t.isIdentifierStart=function(e){return e>=65&&e<=90||e>=97&&e<=122||36==e||95==e||e>127&&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(e2?(r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),c.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",c.length.toString(10)),T.createUnreachable()):r&&1==r.length?(m=e.compileExpression(c[0],e.options.usizeType,1,0),(b=2==c.length?u(e,c[1]):0)<0?T.createUnreachable():(e.currentType=r[0],T.createLoad(r[0].byteSize,r[0].is(5),m,r[0].is(4)&&h.is(4)&&h.size>r[0].size?(e.currentType=h).toNativeType():(e.currentType=r[0]).toNativeType(),b))):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),T.createUnreachable());case"store":if(e.currentType=a.Type.void,c.length<2||c.length>3)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),c.length<2?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"2",c.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();m=e.compileExpression(c[0],e.options.usizeType,1,0),y=e.compileExpression(c[1],r[0],r[0].is(4)?0:1,0);f=void 0;return r[0].is(4)&&(!e.currentType.is(4)||e.currentType.size1)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();var L;if(!(L=r[0].classReference))return e.error(n.DiagnosticCode.Operation_not_supported,d.range),T.createUnreachable();var b=void 0;if(c.length){if(c[0].kind!=i.NodeKind.LITERAL||c[0].literalKind!=i.LiteralKind.STRING)return e.error(n.DiagnosticCode.String_literal_expected,c[0].range),T.createUnreachable();var k=c[0].value,R=L.members?L.members.get(k):null;if(!R||R.kind!=o.ElementKind.FIELD)return e.error(n.DiagnosticCode.Type_0_has_no_property_1,c[0].range,L.internalName,k),T.createUnreachable();b=R.memoryOffset}else b=L.currentMemoryOffset;return e.options.isWasm64?h.is(4)&&h.size<=32?(e.currentType=a.Type.u32,T.createI32(b)):T.createI64(b):h.is(4)&&64==h.size?(e.currentType=a.Type.u64,T.createI64(b)):T.createI32(b);case"select":if(3!=c.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();m=e.compileExpression(c[0],r[0],1,0)}else m=e.compileExpressionRetainType(c[0],a.Type.i32,0);f=e.currentType;switch(y=e.compileExpression(c[1],f,1,0),g=e.makeIsTrueish(e.compileExpressionRetainType(c[2],a.Type.bool,0),e.currentType),e.currentType=f,e.currentType.kind){case 0:case 1:case 5:case 6:case 10:default:E=T.createSelect(m,y,g);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return E;case"unreachable":return 0!=c.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),T.createUnreachable();case"current_memory":return e.currentType=a.Type.i32,0!=c.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),T.createHost(s.HostOp.CurrentMemory);case"grow_memory":return e.currentType=a.Type.i32,1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),m=T.createUnreachable()):m=e.compileExpression(c[0],a.Type.i32,1,0),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),T.createHost(s.HostOp.GrowMemory,null,[m]);case"move_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=c.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),e.currentType=a.Type.void,T.createUnreachable();throw m=e.compileExpression(c[0],e.options.usizeType,1,0),y=e.compileExpression(c[1],e.options.usizeType,1,0),g=e.compileExpression(c[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"set_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=c.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),e.currentType=a.Type.void,T.createUnreachable();throw m=e.compileExpression(c[0],e.options.usizeType,1,0),y=e.compileExpression(c[1],a.Type.u32,1,0),g=e.compileExpression(c[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=r[0],T.createUnreachable()):(m=e.compileExpressionRetainType(c[0],r[0],0),e.currentType=r[0],e.currentType.size!=r[0].size?(e.error(n.DiagnosticCode.Operation_not_supported,d.range),T.createUnreachable()):m):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),T.createUnreachable());case"assert":if(c.length<1||c.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),c.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)):c.length>2&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",c.length.toString(10)),T.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();m=e.compileExpression(c[0],r[0],1,1)}else m=e.compileExpressionRetainType(c[0],a.Type.bool,1);f=e.currentType;if(e.currentType=f.nonNullableType,e.options.noAssert)return h==a.Type.void?(e.currentType=a.Type.void,T.createNop()):m;var x=_(e,2==c.length?c[1]:null,d);if(e.currentType=f.nonNullableType,h==a.Type.void){switch(e.currentType.kind){default:E=T.createIf(T.createUnary(s.UnaryOp.EqzI32,m),x);break;case 3:case 8:E=T.createIf(T.createUnary(s.UnaryOp.EqzI64,m),x);break;case 4:case 9:E=T.createIf(T.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,m),x);break;case 11:E=T.createIf(T.createBinary(s.BinaryOp.EqF32,m,T.createF32(0)),x);break;case 12:E=T.createIf(T.createBinary(s.BinaryOp.EqF64,m,T.createF64(0)),x);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),E=x}e.currentType=a.Type.void}else switch(e.currentType.kind){case 0:case 1:case 5:case 6:case 10:A=e.currentFunction.flow,v=e.currentFunction.getAndFreeTempLocal(e.currentType,!A.canOverflow(m,e.currentType));E=T.createIf(T.createTeeLocal(v.index,m),T.createGetLocal(v.index,s.NativeType.I32),x);break;case 2:case 7:default:v=e.currentFunction.getAndFreeTempLocal(a.Type.i32,!1);E=T.createIf(T.createTeeLocal(v.index,m),T.createGetLocal(v.index,s.NativeType.I32),x);break;case 3:case 8:v=e.currentFunction.getAndFreeTempLocal(a.Type.i64,!1);E=T.createIf(T.createUnary(s.UnaryOp.EqzI64,T.createTeeLocal(v.index,m)),x,T.createGetLocal(v.index,s.NativeType.I64));break;case 4:case 9:v=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);E=T.createIf(T.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,T.createTeeLocal(v.index,m)),x,T.createGetLocal(v.index,e.options.nativeSizeType));break;case 11:v=e.currentFunction.getAndFreeTempLocal(a.Type.f32,!1);E=T.createIf(T.createBinary(s.BinaryOp.EqF32,T.createTeeLocal(v.index,m),T.createF32(0)),x,T.createGetLocal(v.index,s.NativeType.F32));break;case 12:v=e.currentFunction.getAndFreeTempLocal(a.Type.f64,!1);E=T.createIf(T.createBinary(s.BinaryOp.EqF64,T.createTeeLocal(v.index,m),T.createF64(0)),x,T.createGetLocal(v.index,s.NativeType.F64));break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),E=x}return E;case"unchecked":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),T.createUnreachable()):((A=e.currentFunction.flow).set(4096),E=e.compileExpressionRetainType(c[0],h,0),A.unset(4096),E);case"call_indirect":if(c.length<1)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),T.createUnreachable();var F=void 0;if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();F=r[0]}else F=h;if(m=e.compileExpressionRetainType(c[0],a.Type.u32,0),7!=e.currentType.kind)return e.error(n.DiagnosticCode.Operation_not_supported,c[0].range),T.createUnreachable();for(var D=c.length-1,B=new Array(D),U=new Array(D+1),P=F.toNativeType(),w=new Array(D),M=0;M1&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,i.range,"1",t.length.toString(10)),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"1",r.length.toString(10)),null}function u(e,t){var r,i;return e.options.isWasm64?(r=e.precomputeExpression(t,a.Type.usize64,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I64||0!=s.getConstValueI64High(r)||(i=s.getConstValueI64Low(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)):(r=e.precomputeExpression(t,a.Type.usize32,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I32||(i=s.getConstValueI32(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)),i}t.compileCall=c;var h="allocate_memory";t.compileAllocate=function(e,t,r){var i=e.program;assert(t.program==i);var a=e.module,s=e.options,c=i.elementsLookup.get(h);if(!c)return i.error(n.DiagnosticCode.Cannot_find_name_0,r.range,h),i.info(n.DiagnosticCode.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf,r.range),a.createUnreachable();if(c.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.error(n.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,c.internalName),a.createUnreachable();var p=e.resolver.resolveFunction(c,null);return p&&e.compileFunction(p)?(e.currentType=t.type,a.createCall(p.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],s.nativeSizeType)):a.createUnreachable()};var d="abort";function _(e,t,r){var n=e.program,i=e.module,c=n.typesLookup.get("string");if(!c)return i.createUnreachable();var p=n.elementsLookup.get(d);if(!p||p.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.createUnreachable();var l=e.resolver.resolveFunction(p,null);if(!l||!e.compileFunction(l))return i.createUnreachable();var u=null!=t?e.compileExpression(t,c,1,0):c.toNativeZero(i),h=e.compileStaticString(r.range.source.normalizedPath);return e.currentType=a.Type.void,i.createBlock(null,[i.createCallImport(l.internalName,[u,h,i.createI32(r.range.line),i.createI32(r.range.column)],s.NativeType.None),i.createUnreachable()])}t.compileAbort=_},function(t,r){t.exports=e},function(e,t,r){(function(e){const t=e.Binaryen||r(24);for(var n in t)(n.startsWith("_Binaryen")||n.startsWith("_Relooper"))&&(e[n]=t[n]);e.allocate_memory=function(e){return e?t._malloc(e):0},e.free_memory=function(e){e&&t._free(e)},e.move_memory=function(e,r,n){return t._memmove(e,r,n)},e.store=function(e,r){t.HEAPU8[e]=r},e.load=function(e){return t.HEAPU8[e]};const i=r(4).Module;i.prototype.toText=function(){return new t.Module(this.ref).emitText()},i.prototype.toAsmjs=function(){return new t.Module(this.ref).emitAsmjs()}}).call(this,r(7))},function(e,t){e.exports=(e=>{var t=new Uint8Array(0),r=0;e.allocate_memory=function(e){if(!(e>>>=0))return 0;if(r+e>t.length){var n=t;(t=new Uint8Array(Math.max(65536,t.length+e,2*t.length))).set(n)}var i=r;return 7&(r+=e)&&(r=1+(7|r)),i},e.free_memory=function(e){},e.move_memory=function(e,r,n){t.copyWithin(e,r,r+n)},e.store=function(e,r,n){t[e+(0|n)]=r},e.load=function(e,r){return t[e+(0|r)]}})},function(e,t,r){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self;function n(){Error.captureStackTrace?Error.captureStackTrace(this,n):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function i(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,i):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}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},n.prototype=Object.create(Error.prototype),n.prototype.name="UnreachableError",n.prototype.message="unreachable",t.unreachable=function(){throw new n},i.prototype=Object.create(Error.prototype),i.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new i(t)},t.changetype=function(e){return e},t.parseI32=function(e,t){return 0|parseInt(e,void 0)},String.fromCharCodes=function(e){return String.fromCharCode.apply(String,e)},String.fromCodePoints=function(e){return String.fromCodePoint.apply(String,e)},t.isInteger=Number.isInteger,t.isFloat=function(e){return"number"==typeof e},t.isReference=function(e){return"object"==typeof e||"string"==typeof e},t.isString=function(e){return"string"==typeof e||e instanceof String},t.isArray=Array.isArray,t.unchecked=function(e){return e},t.fmod=function(e,t){return e%t},t.fmodf=function(e,t){return Math.fround(e%t)},t.JSMath=Math,r(26)(t)}).call(this,r(7))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(27),r(25),r(17),r(16)},function(e,t,r){r(28),e.exports=r(14)}])}); //# sourceMappingURL=assemblyscript.js.map \ No newline at end of file diff --git a/dist/assemblyscript.js.map b/dist/assemblyscript.js.map index dadaf454..719838f6 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/ast.ts","webpack://assemblyscript/./src/util/index.ts","webpack://assemblyscript/./src/module.ts","webpack://assemblyscript/./src/program.ts","webpack://assemblyscript/./src/types.ts","webpack://assemblyscript/(webpack)/buildin/global.js","webpack://assemblyscript/./src/tokenizer.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.ts","webpack://assemblyscript/./src/compiler.ts","webpack://assemblyscript/./src/parser.ts","webpack://assemblyscript/./src/definitions.ts","webpack://assemblyscript/./src/decompiler.ts","webpack://assemblyscript/./src/index.ts","webpack://assemblyscript/./node_modules/long/src/long.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./src/glue/js/float.js","webpack://assemblyscript/./src/resolver.ts","webpack://assemblyscript/./src/util/binary.ts","webpack://assemblyscript/./src/util/text.ts","webpack://assemblyscript/./src/util/path.ts","webpack://assemblyscript/./src/util/charcode.ts","webpack://assemblyscript/./src/builtins.ts","webpack://assemblyscript/external \"binaryen\"","webpack://assemblyscript/./src/glue/js/binaryen.js","webpack://assemblyscript/./std/portable/memory.js","webpack://assemblyscript/./std/portable/index.js","webpack://assemblyscript/./src/glue/js/index.ts"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__24__","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","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","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","values","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","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","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","__export","NativeType","ExpressionId","compiler_1","_BinaryenTypeNone","_BinaryenTypeInt32","_BinaryenTypeInt64","_BinaryenTypeFloat32","_BinaryenTypeFloat64","_BinaryenTypeUnreachable","_BinaryenTypeAuto","_BinaryenInvalidId","_BinaryenBlockId","_BinaryenIfId","_BinaryenLoopId","_BinaryenBreakId","_BinaryenSwitchId","_BinaryenCallId","_BinaryenCallImportId","_BinaryenCallIndirectId","_BinaryenGetLocalId","_BinaryenSetLocalId","_BinaryenGetGlobalId","_BinaryenSetGlobalId","_BinaryenLoadId","_BinaryenStoreId","_BinaryenConstId","_BinaryenUnaryId","_BinaryenBinaryId","_BinaryenSelectId","_BinaryenDropId","_BinaryenReturnId","_BinaryenHostId","_BinaryenNopId","_BinaryenUnreachableId","_BinaryenAtomicCmpxchgId","_BinaryenAtomicRMWId","_BinaryenAtomicWaitId","_BinaryenAtomicWakeId","UnaryOp","_BinaryenClzInt32","_BinaryenCtzInt32","_BinaryenPopcntInt32","_BinaryenNegFloat32","_BinaryenAbsFloat32","_BinaryenCeilFloat32","_BinaryenFloorFloat32","_BinaryenTruncFloat32","_BinaryenNearestFloat32","_BinaryenSqrtFloat32","_BinaryenEqZInt32","_BinaryenClzInt64","_BinaryenCtzInt64","_BinaryenPopcntInt64","_BinaryenNegFloat64","_BinaryenAbsFloat64","_BinaryenCeilFloat64","_BinaryenFloorFloat64","_BinaryenTruncFloat64","_BinaryenNearestFloat64","_BinaryenSqrtFloat64","_BinaryenEqZInt64","_BinaryenExtendSInt32","_BinaryenExtendUInt32","_BinaryenWrapInt64","_BinaryenTruncSFloat32ToInt32","_BinaryenTruncSFloat32ToInt64","_BinaryenTruncUFloat32ToInt32","_BinaryenTruncUFloat32ToInt64","_BinaryenTruncSFloat64ToInt32","_BinaryenTruncSFloat64ToInt64","_BinaryenTruncUFloat64ToInt32","_BinaryenTruncUFloat64ToInt64","_BinaryenReinterpretFloat32","_BinaryenReinterpretFloat64","_BinaryenConvertSInt32ToFloat32","_BinaryenConvertSInt32ToFloat64","_BinaryenConvertUInt32ToFloat32","_BinaryenConvertUInt32ToFloat64","_BinaryenConvertSInt64ToFloat32","_BinaryenConvertSInt64ToFloat64","_BinaryenConvertUInt64ToFloat32","_BinaryenConvertUInt64ToFloat64","_BinaryenPromoteFloat32","_BinaryenDemoteFloat64","_BinaryenReinterpretInt32","_BinaryenReinterpretInt64","_BinaryenExtendS8Int32","_BinaryenExtendS16Int32","_BinaryenExtendS8Int64","_BinaryenExtendS16Int64","_BinaryenExtendS32Int64","BinaryOp","_BinaryenAddInt32","_BinaryenSubInt32","_BinaryenMulInt32","_BinaryenDivSInt32","_BinaryenDivUInt32","_BinaryenRemSInt32","_BinaryenRemUInt32","_BinaryenAndInt32","_BinaryenOrInt32","_BinaryenXorInt32","_BinaryenShlInt32","_BinaryenShrUInt32","_BinaryenShrSInt32","_BinaryenRotLInt32","_BinaryenRotRInt32","_BinaryenEqInt32","_BinaryenNeInt32","_BinaryenLtSInt32","_BinaryenLtUInt32","_BinaryenLeSInt32","_BinaryenLeUInt32","_BinaryenGtSInt32","_BinaryenGtUInt32","_BinaryenGeSInt32","_BinaryenGeUInt32","_BinaryenAddInt64","_BinaryenSubInt64","_BinaryenMulInt64","_BinaryenDivSInt64","_BinaryenDivUInt64","_BinaryenRemSInt64","_BinaryenRemUInt64","_BinaryenAndInt64","_BinaryenOrInt64","_BinaryenXorInt64","_BinaryenShlInt64","_BinaryenShrUInt64","_BinaryenShrSInt64","_BinaryenRotLInt64","_BinaryenRotRInt64","_BinaryenEqInt64","_BinaryenNeInt64","_BinaryenLtSInt64","_BinaryenLtUInt64","_BinaryenLeSInt64","_BinaryenLeUInt64","_BinaryenGtSInt64","_BinaryenGtUInt64","_BinaryenGeSInt64","_BinaryenGeUInt64","_BinaryenAddFloat32","_BinaryenSubFloat32","_BinaryenMulFloat32","_BinaryenDivFloat32","_BinaryenCopySignFloat32","_BinaryenMinFloat32","_BinaryenMaxFloat32","_BinaryenEqFloat32","_BinaryenNeFloat32","_BinaryenLtFloat32","_BinaryenLeFloat32","_BinaryenGtFloat32","_BinaryenGeFloat32","_BinaryenAddFloat64","_BinaryenSubFloat64","_BinaryenMulFloat64","_BinaryenDivFloat64","_BinaryenCopySignFloat64","_BinaryenMinFloat64","_BinaryenMaxFloat64","_BinaryenEqFloat64","_BinaryenNeFloat64","_BinaryenLtFloat64","_BinaryenLeFloat64","_BinaryenGtFloat64","_BinaryenGeFloat64","HostOp","_BinaryenPageSize","_BinaryenCurrentMemory","_BinaryenGrowMemory","_BinaryenHasFeature","AtomicRMWOp","_BinaryenAtomicRMWAdd","_BinaryenAtomicRMWSub","_BinaryenAtomicRMWAnd","_BinaryenAtomicRMWOr","_BinaryenAtomicRMWXor","_BinaryenAtomicRMWXchg","MemorySegment","buffer","offset","segment","Module","cachedTemporaryName","hasTemporaryFunction","cachedPrecomputeName","cachedPrecomputeNames","ref","_BinaryenModuleCreate","cachedByValue","allocate_memory","createFrom","cArr","allocU8Array","_BinaryenModuleRead","free_memory","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","index","_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","None","_BinaryenBlock","createBreak","_BinaryenBreak","createDrop","_BinaryenDrop","createLoop","_BinaryenLoop","createIf","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","names","defaultName","numNames","strs","_BinaryenSwitch","createCall","target","_BinaryenCall","createCallImport","_BinaryenCallImport","createCallIndirect","typeName","_BinaryenCallIndirect","createUnreachable","_BinaryenUnreachable","addGlobal","mutable","_BinaryenAddGlobal","addFunction","varTypes","_BinaryenAddFunction","removeFunction","_BinaryenRemoveFunction","addTemporaryFunction","tempName","typeRef","removeTemporaryFunction","addFunctionExport","internalName","cStr1","cStr2","_BinaryenAddFunctionExport","addTableExport","_BinaryenAddTableExport","addMemoryExport","_BinaryenAddMemoryExport","addGlobalExport","_BinaryenAddGlobalExport","removeExport","_BinaryenRemoveExport","addFunctionImport","externalModuleName","externalBaseName","functionType","cStr3","_BinaryenAddFunctionImport","addTableImport","_BinaryenAddTableImport","addMemoryImport","_BinaryenAddMemoryImport","addGlobalImport","globalType","_BinaryenAddGlobalImport","removeImport","_BinaryenRemoveImport","setMemory","initial","maximum","segments","exportName","segs","offs","sizs","Target","WASM64","i64_low","i64_high","cArr1","cArr2","cArr3","_BinaryenSetMemory","setFunctionTable","funcs","_BinaryenSetFunctionTable","setStart","func","_BinaryenSetStart","setOptimizeLevel","level","_BinaryenSetOptimizeLevel","setShrinkLevel","_BinaryenSetShrinkLevel","setDebugInfo","on","_BinaryenSetDebugInfo","optimize","_BinaryenFunctionOptimize","_BinaryenModuleOptimize","runPasses","passes","_BinaryenFunctionRunPasses","_BinaryenModuleRunPasses","precomputeFunction","validate","_BinaryenModuleValidate","interpret","_BinaryenModuleInterpret","toBinary","sourceMapUrl","binaryPtr","sourceMapPtr","_BinaryenModuleAllocateAndWrite","readInt","binaryBytes","ret","BinaryModule","output","Uint8Array","load","readBuffer","sourceMap","readString","toText","Error","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","i32","MAX_VALUE","nested1","nested2","_BinaryenExpressionGetId","Const","_BinaryenExpressionGetType","I32","_BinaryenConstGetValueI32","I64","_BinaryenConstGetValueI64Low","_BinaryenConstGetValueI64High","F32","_BinaryenConstGetValueF32","F64","_BinaryenConstGetValueF64","GetLocal","_BinaryenGetLocalGetIndex","GetGlobal","globalName","_BinaryenGetGlobalGetName","Load","_BinaryenLoadGetPtr","_BinaryenLoadIsAtomic","_BinaryenLoadGetBytes","_BinaryenLoadGetOffset","_BinaryenLoadIsSigned","_BinaryenLoadGetAlign","Unary","_BinaryenUnaryGetValue","_BinaryenUnaryGetOp","Binary","_BinaryenBinaryGetLeft","_BinaryenBinaryGetRight","_BinaryenBinaryGetOp","addDebugInfoFile","_BinaryenModuleAddDebugInfoFileName","getDebugInfoFile","_BinaryenModuleGetDebugInfoFileName","setDebugLocation","fileIndex","lineNumber","columnNumber","_BinaryenFunctionSetDebugLocation","MAX_MEMORY_WASM32","MAX_MEMORY_WASM64","getExpressionId","getExpressionType","getConstValueI32","getConstValueI64Low","getConstValueI64High","getConstValueF32","getConstValueF64","getGetLocalIndex","getSetLocalIndex","_BinaryenSetLocalGetIndex","getSetLocalValue","_BinaryenSetLocalGetValue","isTeeLocal","_BinaryenSetLocalIsTee","getBinaryOp","getBinaryLeft","getBinaryRight","getUnaryOp","getUnaryValue","getLoadBytes","getLoadOffset","getLoadPtr","isLoadSigned","getStoreBytes","_BinaryenStoreGetBytes","getStoreOffset","_BinaryenStoreGetOffset","getStorePtr","_BinaryenStoreGetPtr","getStoreValue","_BinaryenStoreGetValue","getBlockName","_BinaryenBlockGetName","getBlockChildCount","_BinaryenBlockGetNumChildren","getBlockChild","_BinaryenBlockGetChild","getIfCondition","_BinaryenIfGetCondition","getIfTrue","_BinaryenIfGetIfTrue","getIfFalse","_BinaryenIfGetIfFalse","getLoopName","_BinaryenLoopGetName","getLoopBody","_BinaryenLoopGetBody","getBreakName","_BinaryenBreakGetName","getBreakCondition","_BinaryenBreakGetCondition","getSelectThen","_BinaryenSelectGetIfTrue","getSelectElse","_BinaryenSelectGetIfFalse","getSelectCondition","_BinaryenSelectGetCondition","getDropValue","_BinaryenDropGetValue","getReturnValue","_BinaryenReturnGetValue","getCallTarget","_BinaryenCallGetTarget","getHostOp","_BinaryenHostGetOp","getHostOperandCount","_BinaryenHostGetNumOperands","getHostOperand","_BinaryenHostGetOperand","getHostName","_BinaryenHostGetNameOperand","getFunctionBody","_BinaryenFunctionGetBody","getFunctionName","_BinaryenFunctionGetName","getFunctionParamCount","_BinaryenFunctionGetNumParams","getFunctionParamType","_BinaryenFunctionGetParam","getFunctionResultType","_BinaryenFunctionGetResult","relooper","_RelooperCreate","addBlock","_RelooperAddBlock","addBranch","from","to","_RelooperAddBranch","addBlockWithSwitch","_RelooperAddBlockWithSwitch","addBranchForSwitch","indexes","_RelooperAddBranchForSwitch","renderAndDispose","entry","labelHelper","_RelooperRenderAndDispose","u8s","numValues","idx","store","i32s","val","ptrs","str","u","stringLengthUTF8","cp","u1","u2","u3","u4","arr","String","fromCodePoints","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","arrayPrototype","stringInstance","mainFunction","resolver","Resolver","sources","getSource","lookupSourceByPath","normalizedPathWithoutExtension","tmp","initialize","options","Type","i8","i16","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","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","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","stringPrototype","resolveClass","has","Duplicate_identifier_0","programLevelInternalName","FUNCTION_PROTOTYPE","startFunction","GENERIC","AMBIENT","MAIN","Global","withConstantIntegerValue","setConstantFloat","withConstantFloatValue","queuedNamedExports","checkDecorators","acceptedFlags","presentFlags","decoratorKindToFlag","Duplicate_decorator","Decorator_0_is_not_valid_here","checkGlobal","parentNode","hasDecorator","BUILTIN","isLibrary","namespace","fileLevelInternalName","simpleName","ClassPrototype","numImplementsTypes","Unmanaged_classes_cannot_implement_interfaces","Operation_not_supported","MODULE_EXPORT","Export_declaration_conflicts_with_exported_declaration_of_0","isEntry","memberDeclarations","memberDeclaration","initializeField","GET","SET","initializeAccessor","initializeMethod","classPrototype","isInterface","INTERFACE_PROTOTYPE","staticField","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","prefix","FILESPACE","referencedName","referencedElement","seen","Set","add","initializeImport","indexPart","InterfacePrototype","parentNamespace","Namespace","existingExport","Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local","global_1","Element","program","NAMESPACE","ENUM","ENUMVALUE","constantValue","ConstantValueKind","VariableLikeElement","constantValueKind","constantIntegerValue","CONST","INLINED","constantFloatValue","Parameter","Local","LOCAL","scopedGlobal","instances","classTypeArguments","Function","contextualTypeArguments","localsByName","localsByIndex","additionalLocals","breakContext","debugLocations","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","DECLARE","localIndex","INSTANCE","local","thisType","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","_b","inheritedName","inheritedType","parameterTypes","parameterType","parameterName","getParameterName","flow","Flow","addLocal","getTempLocal","wrapped","temps","toNativeType","pop","setLocalWrapped","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","debugLocation","debugInfoRef","FunctionTarget","FUNCTION_TARGET","toSignatureString","asFunction","FIELD_PROTOTYPE","Field","FIELD","memoryOffset","Class","base","currentMemoryOffset","constructorInstance","asClass","inheritedTypeArguments_2","inheritedTypeArguments_2_1","baseType","isAssignableTo","current","lookupOverload","unchecked","uncheckedOverload","instance","overload","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","canConversionOverflow","SetLocal","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","AndI32","computeSmallIntegerMask","ShlI32","shift","size","ShrI32","ShrU32","DivU32","RemI32","RemU32","EqzI32","EqzI64","ClzI32","CtzI32","PopcntI32","MIN_VALUE","fromType","Block","last","If","Select","Call","Unreachable","fromSize","byteSize","toSize","TypeKind","TypeFlags","cachedNullableType","ceil","classReference","signatureReference","nonNullableType","isize64","isize32","usize64","usize32","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","g","eval","e","window","IdentifierHandling","tokenFromKeyword","AS","ASYNC","AWAIT","CASE","CATCH","DEBUGGER","DEFAULT","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","IS","KEYOF","LET","MODULE","OF","PACKAGE","PRIVATE","PROTECTED","PUBLIC","READONLY","TYPEOF","VAR","WITH","YIELD","tokenIsAlsoIdentifier","token","operatorTokenToString","DOT_DOT_DOT","LESSTHAN","GREATERTHAN","LESSTHAN_EQUALS","GREATERTHAN_EQUALS","EQUALS_EQUALS","EXCLAMATION_EQUALS","EQUALS_EQUALS_EQUALS","EXCLAMATION_EQUALS_EQUALS","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","program_1","Options","WASM32","importMemory","importTable","features","feature","Feature","ConversionKind","WrapMode","mangleImportName_moduleName","mangleImportName_elementName","Compiler","currentOuterFunction","currentEnum","currentType","memorySegments","stringSegments","functionTable","argcVar","argcSet","f32ModInstance","f64ModInstance","f32PowInstance","f64PowInstance","max","compile","startFunctionInstance","startFunctionBody","compileSource","funcRef","ensureFunctionType","i64_align","numPages","i64_shr_u","functionTableSize","functionTableExported","entries","compileSourceByPath","reportNode","File_0_not_found","COMPILED","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","nativeType","isConstant","MODULE_IMPORT","mangleImportName","initializeInStart","compileInlineConstant","compileExpression","precomputeExpressionRef","Compiling_constant_with_non_constant_initializer_as_mutable","mangleExportName","isTopLevel","compileEnum","previousValue","initInStart","valueDeclaration","AddI32","Cannot_export_a_mutable_global","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","nativeSizeType","makeConditionalAllocate","A_function_whose_declared_type_is_not_void_must_return_a_value","ensureTrampoline","ensureArgcSet","compileInterfaceDeclaration","compileNamespace","compileClassUsingTypeArguments","internalExportName","functionInstance","functionDeclaration","globalDeclaration","alternativeReportNode","resolveClassInclTypeArguments","compileClass","staticMembers","setter","ctorInstance","_e","_f","getterName","setterName","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","repeatLabel","alwaysTrue","condPre","incrExpr","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","contextualType","retainType","mask","conversionKind","wrapMode","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileInstanceOfExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","ensureSmallIntegerWrap","precomputeExpression","Conversion_from_type_0_to_1_requires_an_explicit_cast","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","leftExpr","leftType","rightExpr","rightType","commonType","compound","compileBinaryOverload","Operator_0_cannot_be_applied_to_types_1_and_2","compileAssignment","AddI64","AddF32","AddF64","SubI32","SubI64","SubF32","SubF64","MulI64","MulF32","MulF64","resolveFunction","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","resolvedElementExpression","isUnchecked","indexedSet","Index_signature_in_type_0_only_permits_reading","Index_signature_is_missing_in_type_0","valueWithCorrectType","tee","thisExpression","resolvedThisExpression","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","compileCallIndirect","typeArgumentNodes","resolveTypeArguments","compileCall","checkCallSignature","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","inline","compileCallInlineUnchecked","numArgumentsInclThis","previousFlow","thisLocal","paramExpr","argumentLocal","bodyStatement","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","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","compileStaticString","stringValue","stringSegment","stringLength","stringBuffer","stringOffset","stringType","elementType","isStatic","arrayInstance","arrayType","elementCount","nativeElementType","byteLength","Int32Array","Float32Array","Float64Array","usizeTypeSize","arraySize","bufferTotalSize","clz","data","writeI64","writeI32","writeF32","writeF64","nativeArrayType","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","classInstance","currentClassInstance","makeAllocate","propertyAccess","resolvePropertyAccess","Property_0_does_not_exist_on_type_1","ifThenFlow","ifThenExpr","ifThenType","ifElseFlow","ifElseExpr","ifElseType","getValue","nativeOne","setValue","NegF32","NegF64","makeIsFalseish","ExtendI8ToI32","ExtendI16ToI32","compileAllocate","field","fieldType","nativeFieldType","fieldDeclaration","parentElement","builtinsFile","Parser","backlog","seenlog","donelog","tryParseSignatureIsSignature","parseParametersThis","parseFile","indexOf","tn","parseTopLevelStatement","startPos","parseDecorator","skipStatement","exportStart","exportEnd","contextIsAmbient","A_declare_modifier_cannot_be_used_in_an_already_ambient_context","first","parseEnum","parseVariable","parseFunction","parseStatement","parseClassOrInterface","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","Decorators_are_not_valid_here","nextFile","clear","parseType","acceptParenthesized","suppressErrors","isNullableSignature","tryParseSignature","Unexpected_token","innerType","Identifier_expected","nullable","parameter","bracketStart","bracketRange","isSignature","REST","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","VIRTUAL","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","PREFIX","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","nextPrecedence","determinePrecedence","commaExprs","isRightAssociative","propertyCall","skipBlock","depth","Precedence","ExportsWalker","includePrivate","todo","walk","visitElement","visitGlobal","visitEnum","visitFunctionInstances","visitClassInstances","visitField","prop","hasCompiledMember","_g","_h","_j","visitNamespace","visitFunction","visitClass","IDLBuilder","indentLevel","build","isConst","indent","typeToString","i64_to_string","members_1","members_1_1","visitInterface","TSDBuilder","numMembers","members_2","members_2_1","ctor","Decompiler","functionId","decompile","decompiler","decompileFunction","nativeTypeToType","decompileExpression","nested","string","Loop","Break","Switch","CallImport","CallIndirect","SetGlobal","Store","AbsF32","CeilF32","FloorF32","TruncF32","NearestF32","SqrtF32","ClzI64","CtzI64","PopcntI64","AbsF64","CeilF64","FloorF64","TruncF64","NearestF64","SqrtF64","ReinterpretF32","ReinterpretF64","ReinterpretI32","ReinterpretI64","RotlI32","RotrI32","RotlI64","RotrI64","CopysignF32","MinF32","MaxF32","CopysignF64","MinF64","MaxF64","Drop","Return","Host","CurrentMemory","GrowMemory","AtomicCmpxchg","AtomicRMW","AtomicWait","AtomicWake","Auto","decompiler_1","definitions_1","formatDiagnostic","parser_1","parser","nextDiagnostic","isInfo","isWarning","isError","createOptions","setTarget","setNoTreeShaking","setNoAssert","setImportMemory","setImportTable","setSourceMap","setMemoryBase","setGlobalAlias","FEATURE_SIGN_EXTENSION","FEATURE_MUTABLE_GLOBAL","enableFeature","setOptimizeLevelHints","optimizeLevel","shrinkLevel","finishParsing","compileProgram","decompileModule","buildIDL","buildTSD","Long","wasm","WebAssembly","Instance","low","high","unsigned","isLong","obj","__isLong__","INT_CACHE","UINT_CACHE","fromInt","cachedObj","cache","fromBits","fromNumber","isNaN","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","Math","pow","fromString","radix","RangeError","radixToPower","parseInt","power","mul","fromValue","TWO_PWR_16_DBL","TWO_PWR_24","ONE","UONE","NEG_ONE","LongPrototype","toInt","toNumber","isZero","isNegative","eq","radixLong","div","rem1","sub","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","equals","notEquals","neq","ne","lessThan","comp","lt","lessThanOrEqual","lte","le","greaterThan","gt","greaterThanOrEqual","gte","ge","compare","thisNeg","otherNeg","negate","not","addend","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","subtract","subtrahend","multiply","multiplier","get_high","b00","divide","divisor","approx","res","div_u","div_s","toUnsigned","shru","shr","shl","floor","log2","log","LN2","delta","approxRes","approxRem","modulo","rem_u","rem_s","mod","and","or","xor","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toSigned","toBytes","toBytesLE","toBytesBE","hi","lo","fromBytes","fromBytesLE","fromBytesBE","i64_div","i64_div_u","i64_rem","i64_rem_u","i64_xor","i64_shr","i64_eq","minSafeF32","MIN_SAFE_INTEGER","maxSafeF32","MAX_SAFE_INTEGER","minSafeF64","maxSafeF64","fround","f32_as_i32","i32_as_f32","f64_as_i64","i64_as_f64","ReportMode","reportMode","REPORT","resolveSignature","numTypeArguments","paramType","instanceKey","placeholderType","parameterTypeNodes","parameterTypeNode","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","_k","_l","_m","overloadPrototype","operatorPartial","typeParameterNodes","readI32","readI64","readF32","readF64","valueI64","indentX1","indentX2","indentX4","separator","ipos","dirname","origin","CharCode","lookupInUnicodeMap","unicodeIdentifierStart","isUnicodeIdentifierStart","unicodeIdentifierPart","isUnicodeIdentifierPart","mid","compiler","evaluateConstantType","tempLocal0","tempLocal1","evaluateConstantOffset","alignLog2","fieldName","Type_0_has_no_property_1","abort","operandExprs","signatureParts","nativeParamTypes","operandType","deferASM","deferASMCall","typeArgument","valueType","allocateInternalName","allocatePrototype","An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf","allocateInstance","abortInternalName","abortPrototype","abortInstance","messageArg","filenameArg","binaryen","Binaryen","_malloc","_free","move_memory","dest","src","_memmove","HEAPU8","emitText","emitAsmjs","globalScope","HEAP","HEAP_OFFSET","oldHeap","copyWithin","UnreachableError","captureStackTrace","stack","AssertionError","ASC_TARGET","defineProperties","writable","MIN_POSITIVE_VALUE","EPSILON","clz32","abs","trunc","round","sqrt","x","y","sign","isTrueish","undefined","fromCodePoint","Number","isInteger","isArray"],"mappings":"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KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,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,MAA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","file":"assemblyscript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"binaryen\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"binaryen\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"assemblyscript\"] = factory(require(\"binaryen\"));\n\telse\n\t\troot[\"assemblyscript\"] = factory(root[\"binaryen\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__24__) {\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 = 29);\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 a builtin. */\r\n BUILTIN = 1 << 21,\r\n /** Is compiled. */\r\n COMPILED = 1 << 22,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 23,\r\n /** Is scoped. */\r\n SCOPED = 1 << 24,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 25,\r\n /** Is a virtual method. */\r\n VIRTUAL = 1 << 26,\r\n /** Is the main function. */\r\n MAIN = 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 * 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 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}\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.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 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 * 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 * A thin wrapper around Binaryen's C-API.\r\n * @module module\r\n *//***/\r\n\r\nimport {\r\n Target\r\n} from \"./compiler\";\r\n\r\nexport type ModuleRef = usize;\r\nexport type FunctionTypeRef = usize;\r\nexport type FunctionRef = usize;\r\nexport type ExpressionRef = usize;\r\nexport type GlobalRef = usize;\r\nexport type ImportRef = usize;\r\nexport type ExportRef = usize;\r\nexport type Index = u32;\r\n\r\nexport enum NativeType {\r\n None = _BinaryenTypeNone(),\r\n I32 = _BinaryenTypeInt32(),\r\n I64 = _BinaryenTypeInt64(),\r\n F32 = _BinaryenTypeFloat32(),\r\n F64 = _BinaryenTypeFloat64(),\r\n Unreachable = _BinaryenTypeUnreachable(),\r\n Auto = _BinaryenTypeAuto()\r\n}\r\n\r\nexport enum ExpressionId {\r\n Invalid = _BinaryenInvalidId(),\r\n Block = _BinaryenBlockId(),\r\n If = _BinaryenIfId(),\r\n Loop = _BinaryenLoopId(),\r\n Break = _BinaryenBreakId(),\r\n Switch = _BinaryenSwitchId(),\r\n Call = _BinaryenCallId(),\r\n CallImport = _BinaryenCallImportId(),\r\n CallIndirect = _BinaryenCallIndirectId(),\r\n GetLocal = _BinaryenGetLocalId(),\r\n SetLocal = _BinaryenSetLocalId(),\r\n GetGlobal = _BinaryenGetGlobalId(),\r\n SetGlobal = _BinaryenSetGlobalId(),\r\n Load = _BinaryenLoadId(),\r\n Store = _BinaryenStoreId(),\r\n Const = _BinaryenConstId(),\r\n Unary = _BinaryenUnaryId(),\r\n Binary = _BinaryenBinaryId(),\r\n Select = _BinaryenSelectId(),\r\n Drop = _BinaryenDropId(),\r\n Return = _BinaryenReturnId(),\r\n Host = _BinaryenHostId(),\r\n Nop = _BinaryenNopId(),\r\n Unreachable = _BinaryenUnreachableId(),\r\n AtomicCmpxchg = _BinaryenAtomicCmpxchgId(),\r\n AtomicRMW = _BinaryenAtomicRMWId(),\r\n AtomicWait = _BinaryenAtomicWaitId(),\r\n AtomicWake = _BinaryenAtomicWakeId()\r\n}\r\n\r\nexport enum UnaryOp {\r\n ClzI32 = _BinaryenClzInt32(),\r\n CtzI32 = _BinaryenCtzInt32(),\r\n PopcntI32 = _BinaryenPopcntInt32(),\r\n NegF32 = _BinaryenNegFloat32(),\r\n AbsF32 = _BinaryenAbsFloat32(),\r\n CeilF32 = _BinaryenCeilFloat32(),\r\n FloorF32 = _BinaryenFloorFloat32(),\r\n TruncF32 = _BinaryenTruncFloat32(),\r\n NearestF32 = _BinaryenNearestFloat32(),\r\n SqrtF32 = _BinaryenSqrtFloat32(),\r\n EqzI32 = _BinaryenEqZInt32(),\r\n ClzI64 = _BinaryenClzInt64(),\r\n CtzI64 = _BinaryenCtzInt64(),\r\n PopcntI64 = _BinaryenPopcntInt64(),\r\n NegF64 = _BinaryenNegFloat64(),\r\n AbsF64 = _BinaryenAbsFloat64(),\r\n CeilF64 = _BinaryenCeilFloat64(),\r\n FloorF64 = _BinaryenFloorFloat64(),\r\n TruncF64 = _BinaryenTruncFloat64(),\r\n NearestF64 = _BinaryenNearestFloat64(),\r\n SqrtF64 = _BinaryenSqrtFloat64(),\r\n EqzI64 = _BinaryenEqZInt64(),\r\n ExtendI32 = _BinaryenExtendSInt32(),\r\n ExtendU32 = _BinaryenExtendUInt32(),\r\n WrapI64 = _BinaryenWrapInt64(),\r\n TruncF32ToI32 = _BinaryenTruncSFloat32ToInt32(),\r\n TruncF32ToI64 = _BinaryenTruncSFloat32ToInt64(),\r\n TruncF32ToU32 = _BinaryenTruncUFloat32ToInt32(),\r\n TruncF32ToU64 = _BinaryenTruncUFloat32ToInt64(),\r\n TruncF64ToI32 = _BinaryenTruncSFloat64ToInt32(),\r\n TruncF64ToI64 = _BinaryenTruncSFloat64ToInt64(),\r\n TruncF64ToU32 = _BinaryenTruncUFloat64ToInt32(),\r\n TruncF64ToU64 = _BinaryenTruncUFloat64ToInt64(),\r\n ReinterpretF32 = _BinaryenReinterpretFloat32(),\r\n ReinterpretF64 = _BinaryenReinterpretFloat64(),\r\n ConvertI32ToF32 = _BinaryenConvertSInt32ToFloat32(),\r\n ConvertI32ToF64 = _BinaryenConvertSInt32ToFloat64(),\r\n ConvertU32ToF32 = _BinaryenConvertUInt32ToFloat32(),\r\n ConvertU32ToF64 = _BinaryenConvertUInt32ToFloat64(),\r\n ConvertI64ToF32 = _BinaryenConvertSInt64ToFloat32(),\r\n ConvertI64ToF64 = _BinaryenConvertSInt64ToFloat64(),\r\n ConvertU64ToF32 = _BinaryenConvertUInt64ToFloat32(),\r\n ConvertU64ToF64 = _BinaryenConvertUInt64ToFloat64(),\r\n PromoteF32 = _BinaryenPromoteFloat32(),\r\n DemoteF64 = _BinaryenDemoteFloat64(),\r\n ReinterpretI32 = _BinaryenReinterpretInt32(),\r\n ReinterpretI64 = _BinaryenReinterpretInt64(),\r\n\r\n // see: https://github.com/WebAssembly/sign-extension-ops\r\n ExtendI8ToI32 = _BinaryenExtendS8Int32(),\r\n ExtendI16ToI32 = _BinaryenExtendS16Int32(),\r\n ExtendI8ToI64 = _BinaryenExtendS8Int64(),\r\n ExtendI16ToI64 = _BinaryenExtendS16Int64(),\r\n ExtendI32ToI64 = _BinaryenExtendS32Int64()\r\n\r\n // see: https://github.com/WebAssembly/nontrapping-float-to-int-conversions\r\n // TruncF32ToI32Sat\r\n // TruncF32ToU32Sat\r\n // TruncF64ToI32Sat\r\n // TruncF64ToU32Sat\r\n // TruncF32ToI64Sat\r\n // TruncF32ToU64Sat\r\n // TruncF64ToI64Sat\r\n // TruncF64ToU64Sat\r\n}\r\n\r\nexport enum BinaryOp {\r\n AddI32 = _BinaryenAddInt32(),\r\n SubI32 = _BinaryenSubInt32(),\r\n MulI32 = _BinaryenMulInt32(),\r\n DivI32 = _BinaryenDivSInt32(),\r\n DivU32 = _BinaryenDivUInt32(),\r\n RemI32 = _BinaryenRemSInt32(),\r\n RemU32 = _BinaryenRemUInt32(),\r\n AndI32 = _BinaryenAndInt32(),\r\n OrI32 = _BinaryenOrInt32(),\r\n XorI32 = _BinaryenXorInt32(),\r\n ShlI32 = _BinaryenShlInt32(),\r\n ShrU32 = _BinaryenShrUInt32(),\r\n ShrI32 = _BinaryenShrSInt32(),\r\n RotlI32 = _BinaryenRotLInt32(),\r\n RotrI32 = _BinaryenRotRInt32(),\r\n EqI32 = _BinaryenEqInt32(),\r\n NeI32 = _BinaryenNeInt32(),\r\n LtI32 = _BinaryenLtSInt32(),\r\n LtU32 = _BinaryenLtUInt32(),\r\n LeI32 = _BinaryenLeSInt32(),\r\n LeU32 = _BinaryenLeUInt32(),\r\n GtI32 = _BinaryenGtSInt32(),\r\n GtU32 = _BinaryenGtUInt32(),\r\n GeI32 = _BinaryenGeSInt32(),\r\n GeU32 = _BinaryenGeUInt32(),\r\n AddI64 = _BinaryenAddInt64(),\r\n SubI64 = _BinaryenSubInt64(),\r\n MulI64 = _BinaryenMulInt64(),\r\n DivI64 = _BinaryenDivSInt64(),\r\n DivU64 = _BinaryenDivUInt64(),\r\n RemI64 = _BinaryenRemSInt64(),\r\n RemU64 = _BinaryenRemUInt64(),\r\n AndI64 = _BinaryenAndInt64(),\r\n OrI64 = _BinaryenOrInt64(),\r\n XorI64 = _BinaryenXorInt64(),\r\n ShlI64 = _BinaryenShlInt64(),\r\n ShrU64 = _BinaryenShrUInt64(),\r\n ShrI64 = _BinaryenShrSInt64(),\r\n RotlI64 = _BinaryenRotLInt64(),\r\n RotrI64 = _BinaryenRotRInt64(),\r\n EqI64 = _BinaryenEqInt64(),\r\n NeI64 = _BinaryenNeInt64(),\r\n LtI64 = _BinaryenLtSInt64(),\r\n LtU64 = _BinaryenLtUInt64(),\r\n LeI64 = _BinaryenLeSInt64(),\r\n LeU64 = _BinaryenLeUInt64(),\r\n GtI64 = _BinaryenGtSInt64(),\r\n GtU64 = _BinaryenGtUInt64(),\r\n GeI64 = _BinaryenGeSInt64(),\r\n GeU64 = _BinaryenGeUInt64(),\r\n AddF32 = _BinaryenAddFloat32(),\r\n SubF32 = _BinaryenSubFloat32(),\r\n MulF32 = _BinaryenMulFloat32(),\r\n DivF32 = _BinaryenDivFloat32(),\r\n CopysignF32 = _BinaryenCopySignFloat32(),\r\n MinF32 = _BinaryenMinFloat32(),\r\n MaxF32 = _BinaryenMaxFloat32(),\r\n EqF32 = _BinaryenEqFloat32(),\r\n NeF32 = _BinaryenNeFloat32(),\r\n LtF32 = _BinaryenLtFloat32(),\r\n LeF32 = _BinaryenLeFloat32(),\r\n GtF32 = _BinaryenGtFloat32(),\r\n GeF32 = _BinaryenGeFloat32(),\r\n AddF64 = _BinaryenAddFloat64(),\r\n SubF64 = _BinaryenSubFloat64(),\r\n MulF64 = _BinaryenMulFloat64(),\r\n DivF64 = _BinaryenDivFloat64(),\r\n CopysignF64 = _BinaryenCopySignFloat64(),\r\n MinF64 = _BinaryenMinFloat64(),\r\n MaxF64 = _BinaryenMaxFloat64(),\r\n EqF64 = _BinaryenEqFloat64(),\r\n NeF64 = _BinaryenNeFloat64(),\r\n LtF64 = _BinaryenLtFloat64(),\r\n LeF64 = _BinaryenLeFloat64(),\r\n GtF64 = _BinaryenGtFloat64(),\r\n GeF64 = _BinaryenGeFloat64()\r\n}\r\n\r\nexport enum HostOp {\r\n PageSize = _BinaryenPageSize(),\r\n CurrentMemory = _BinaryenCurrentMemory(),\r\n GrowMemory = _BinaryenGrowMemory(),\r\n HasFeature = _BinaryenHasFeature(),\r\n\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n // MoveMemory\r\n // SetMemory\r\n}\r\n\r\nexport enum AtomicRMWOp {\r\n Add = _BinaryenAtomicRMWAdd(),\r\n Sub = _BinaryenAtomicRMWSub(),\r\n And = _BinaryenAtomicRMWAnd(),\r\n Or = _BinaryenAtomicRMWOr(),\r\n Xor = _BinaryenAtomicRMWXor(),\r\n Xchg = _BinaryenAtomicRMWXchg()\r\n}\r\n\r\nexport class MemorySegment {\r\n\r\n buffer: Uint8Array;\r\n offset: I64;\r\n\r\n static create(buffer: Uint8Array, offset: I64): MemorySegment {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n }\r\n}\r\n\r\nexport class Module {\r\n\r\n ref: ModuleRef;\r\n\r\n private cachedByValue: usize;\r\n\r\n /** Maximum number of pages when targeting WASM32. */\r\n static readonly MAX_MEMORY_WASM32: Index = 0xffff;\r\n\r\n /** Maximum number of pages when targeting WASM64. */\r\n static readonly MAX_MEMORY_WASM64: Index = 0xffff; // TODO\r\n\r\n static create(): Module {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.cachedByValue = allocate_memory(16);\r\n return module;\r\n }\r\n\r\n static createFrom(buffer: Uint8Array): Module {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.cachedByValue = allocate_memory(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n free_memory(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeFunctionType(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunctionType(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocPtrArray(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, numNames, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) free_memory(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallImport(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCallImport(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocPtrArray(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[] | null,\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes ? varTypes.length : 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n private cachedTemporaryName: usize = 0;\r\n private hasTemporaryFunction: bool = false;\r\n\r\n addTemporaryFunction(result: NativeType, paramTypes: NativeType[] | null, body: ExpressionRef): FunctionRef {\r\n this.hasTemporaryFunction = assert(!this.hasTemporaryFunction);\r\n var tempName = this.cachedTemporaryName;\r\n if (!tempName) this.cachedTemporaryName = tempName = allocString(\"\"); // works because strings are interned\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n let typeRef = _BinaryenAddFunctionType(this.ref, tempName, result, cArr, paramTypes ? paramTypes.length : 0);\r\n return _BinaryenAddFunction(this.ref, tempName, typeRef, 0, 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeTemporaryFunction(): void {\r\n this.hasTemporaryFunction = !assert(this.hasTemporaryFunction);\r\n var tempName = assert(this.cachedTemporaryName);\r\n _BinaryenRemoveFunction(this.ref, tempName);\r\n _BinaryenRemoveFunctionType(this.ref, tempName);\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeImport(internalName: string): void {\r\n var cStr = allocString(internalName);\r\n try {\r\n _BinaryenRemoveImport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n free_memory(cArr3);\r\n free_memory(cArr2);\r\n free_memory(cArr1);\r\n for (let i = k - 1; i >= 0; --i) free_memory(segs[i]);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(funcs: FunctionRef[]): void {\r\n var cArr = allocPtrArray(funcs);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, funcs.length);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n free_memory(cArr);\r\n for (let i = numNames; i >= 0; --i) {\r\n free_memory(names[i]);\r\n }\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0;\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeFunction(func: FunctionRef): void {\r\n var names = this.cachedPrecomputeNames;\r\n if (!names) {\r\n let name = allocString(\"precompute\");\r\n this.cachedPrecomputeName = name;\r\n this.cachedPrecomputeNames = names = allocI32Array([ name ]);\r\n }\r\n _BinaryenFunctionRunPasses(func, this.ref, names, 1);\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): BinaryModule {\r\n var out = this.cachedByValue;\r\n var cStr = allocString(sourceMapUrl);\r\n var binaryPtr: usize = 0;\r\n var sourceMapPtr: usize = 0;\r\n try {\r\n _BinaryenModuleAllocateAndWrite(out, this.ref, cStr);\r\n binaryPtr = readInt(out);\r\n let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let ret = new BinaryModule();\r\n ret.output = readBuffer(binaryPtr, binaryBytes);\r\n ret.sourceMap = readString(sourceMapPtr);\r\n return ret;\r\n } finally {\r\n if (cStr) free_memory(cStr);\r\n if (binaryPtr) free_memory(binaryPtr);\r\n if (sourceMapPtr) free_memory(sourceMapPtr);\r\n }\r\n }\r\n\r\n toText(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n toAsmjs(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n dispose(): void {\r\n assert(this.ref);\r\n free_memory(this.cachedByValue);\r\n free_memory(this.cachedTemporaryName);\r\n free_memory(this.cachedPrecomputeName);\r\n free_memory(this.cachedPrecomputeNames);\r\n _BinaryenModuleDispose(this.ref);\r\n this.ref = 0;\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(\r\n expr: ExpressionRef,\r\n noSideEffects: bool = false,\r\n maxDepth: i32 = i32.MAX_VALUE\r\n ): ExpressionRef { // currently supports side effect free expressions only\r\n if (maxDepth < 0) return 0;\r\n maxDepth -= 1;\r\n\r\n var nested1: ExpressionRef,\r\n nested2: ExpressionRef;\r\n\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n }\r\n case ExpressionId.GetLocal: {\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n }\r\n case ExpressionId.GetGlobal: {\r\n let globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n }\r\n case ExpressionId.Load: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return (\r\n _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n );\r\n }\r\n case ExpressionId.Unary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n }\r\n case ExpressionId.Binary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\n// expressions\r\n\r\nexport function getExpressionId(expr: ExpressionRef): ExpressionId {\r\n return _BinaryenExpressionGetId(expr);\r\n}\r\n\r\nexport function getExpressionType(expr: ExpressionRef): NativeType {\r\n return _BinaryenExpressionGetType(expr);\r\n}\r\n\r\nexport function getConstValueI32(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI32(expr);\r\n}\r\n\r\nexport function getConstValueI64Low(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64Low(expr);\r\n}\r\n\r\nexport function getConstValueI64High(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64High(expr);\r\n}\r\n\r\nexport function getConstValueF32(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF32(expr);\r\n}\r\n\r\nexport function getConstValueF64(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF64(expr);\r\n}\r\n\r\nexport function getGetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenGetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenSetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSetLocalGetValue(expr);\r\n}\r\n\r\nexport function isTeeLocal(expr: ExpressionRef): bool {\r\n return _BinaryenSetLocalIsTee(expr);\r\n}\r\n\r\nexport function getBinaryOp(expr: ExpressionRef): BinaryOp {\r\n return _BinaryenBinaryGetOp(expr);\r\n}\r\n\r\nexport function getBinaryLeft(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetLeft(expr);\r\n}\r\n\r\nexport function getBinaryRight(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetRight(expr);\r\n}\r\n\r\nexport function getUnaryOp(expr: ExpressionRef): UnaryOp {\r\n return _BinaryenUnaryGetOp(expr);\r\n}\r\n\r\nexport function getUnaryValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenUnaryGetValue(expr);\r\n}\r\n\r\nexport function getLoadBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetBytes(expr);\r\n}\r\n\r\nexport function getLoadOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetOffset(expr);\r\n}\r\n\r\nexport function getLoadPtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoadGetPtr(expr);\r\n}\r\n\r\nexport function isLoadSigned(expr: ExpressionRef): bool {\r\n return _BinaryenLoadIsSigned(expr);\r\n}\r\n\r\nexport function getStoreBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetBytes(expr);\r\n}\r\n\r\nexport function getStoreOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetOffset(expr);\r\n}\r\n\r\nexport function getStorePtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetPtr(expr);\r\n}\r\n\r\nexport function getStoreValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetValue(expr);\r\n}\r\n\r\nexport function getBlockName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBlockGetName(expr));\r\n}\r\n\r\nexport function getBlockChildCount(expr: ExpressionRef): Index {\r\n return _BinaryenBlockGetNumChildren(expr);\r\n}\r\n\r\nexport function getBlockChild(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenBlockGetChild(expr, index);\r\n}\r\n\r\nexport function getIfCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetCondition(expr);\r\n}\r\n\r\nexport function getIfTrue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfTrue(expr);\r\n}\r\n\r\nexport function getIfFalse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfFalse(expr);\r\n}\r\n\r\nexport function getLoopName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenLoopGetName(expr));\r\n}\r\n\r\nexport function getLoopBody(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoopGetBody(expr);\r\n}\r\n\r\nexport function getBreakName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBreakGetName(expr));\r\n}\r\n\r\nexport function getBreakCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBreakGetCondition(expr);\r\n}\r\n\r\nexport function getSelectThen(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfTrue(expr);\r\n}\r\n\r\nexport function getSelectElse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfFalse(expr);\r\n}\r\n\r\nexport function getSelectCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetCondition(expr);\r\n}\r\n\r\nexport function getDropValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenDropGetValue(expr);\r\n}\r\n\r\nexport function getReturnValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenReturnGetValue(expr);\r\n}\r\n\r\nexport function getCallTarget(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenCallGetTarget(expr));\r\n}\r\n\r\nexport function getHostOp(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenHostGetOp(expr);\r\n}\r\n\r\nexport function getHostOperandCount(expr: ExpressionRef): Index {\r\n return _BinaryenHostGetNumOperands(expr);\r\n}\r\n\r\nexport function getHostOperand(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenHostGetOperand(expr, index);\r\n}\r\n\r\nexport function getHostName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenHostGetNameOperand(expr));\r\n}\r\n\r\n// functions\r\n\r\nexport function getFunctionBody(func: FunctionRef): ExpressionRef {\r\n return _BinaryenFunctionGetBody(func);\r\n}\r\n\r\nexport function getFunctionName(func: FunctionRef): string | null {\r\n return readString(_BinaryenFunctionGetName(func));\r\n}\r\n\r\nexport function getFunctionParamCount(func: FunctionRef): Index {\r\n return _BinaryenFunctionGetNumParams(func);\r\n}\r\n\r\nexport function getFunctionParamType(func: FunctionRef, index: Index): NativeType {\r\n return _BinaryenFunctionGetParam(func, index);\r\n}\r\n\r\nexport function getFunctionResultType(func: FunctionRef): NativeType {\r\n return _BinaryenFunctionGetResult(func);\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n }\r\n\r\n private constructor() {}\r\n\r\n addBlock(code: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlock(this.ref, code);\r\n }\r\n\r\n addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void {\r\n _RelooperAddBranch(from, to, condition, code);\r\n }\r\n\r\n addBlockWithSwitch(code: ExpressionRef, condition: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n }\r\n\r\n addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n }\r\n}\r\n\r\n// export function hasSideEffects(expr: ExpressionRef): bool {\r\n// switch (_BinaryenExpressionGetId(expr = getPtr(expr))) {\r\n// case ExpressionId.GetLocal:\r\n// case ExpressionId.GetGlobal:\r\n// case ExpressionId.Const:\r\n// case ExpressionId.Nop:\r\n// case ExpressionId.Unreachable: {\r\n// return false;\r\n// }\r\n// case ExpressionId.Block: {\r\n// for (let i = 0, k = _BinaryenBlockGetNumChildren(expr); i < k; ++i) {\r\n// if (hasSideEffects(_BinaryenBlockGetChild(expr, i))) return true;\r\n// }\r\n// return false;\r\n// }\r\n// case ExpressionId.If: {\r\n// return hasSideEffects(_BinaryenIfGetCondition(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfFalse(expr));\r\n// }\r\n// case ExpressionId.Unary: {\r\n// return hasSideEffects(_BinaryenUnaryGetValue(expr));\r\n// }\r\n// case ExpressionId.Binary: {\r\n// return hasSideEffects(_BinaryenBinaryGetLeft(expr))\r\n// || hasSideEffects(_BinaryenBinaryGetRight(expr));\r\n// }\r\n// case ExpressionId.Drop: {\r\n// return hasSideEffects(_BinaryenDropGetValue(expr));\r\n// }\r\n// case ExpressionId.Select: {\r\n// return hasSideEffects(_BinaryenSelectGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenSelectGetIfFalse(expr))\r\n// || hasSideEffects(_BinaryenSelectGetCondition(expr));\r\n// }\r\n// }\r\n// return true;\r\n// }\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var numValues = u8s.length;\r\n var ptr = allocate_memory(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = allocate_memory(i32s.length << 2);\r\n var idx = ptr;\r\n for (let i = 0, k = i32s.length; i < k; ++i) {\r\n let val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocPtrArray(ptrs: usize[] | null): usize {\r\n return allocI32Array(ptrs); // TODO: WASM64 one day\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = allocate_memory(stringLengthUTF8(str) + 1);\r\n // the following is based on Emscripten's stringToUTF8Array\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\nfunction readInt(ptr: usize): i32 {\r\n return (\r\n load(ptr ) |\r\n (load(ptr + 1) << 8) |\r\n (load(ptr + 2) << 16) |\r\n (load(ptr + 3) << 24)\r\n );\r\n}\r\n\r\nfunction readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (let i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n arr.push(cp);\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\nexport class BinaryModule {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n","/**\r\n * 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} 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 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 /** 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\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 currentExport.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 currentExport.member.externalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n queuedExport.member.range, queuedExport.member.name.text\r\n );\r\n }\r\n break;\r\n }\r\n } while (currentExport);\r\n }\r\n\r\n // resolve base prototypes of derived classes\r\n 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 var 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 // register 'Array'\r\n var arrayPrototype = this.elementsLookup.get(\"Array\");\r\n if (arrayPrototype) {\r\n assert(arrayPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayPrototype = arrayPrototype;\r\n }\r\n\r\n // register 'String'\r\n var stringPrototype = this.elementsLookup.get(\"String\");\r\n if (stringPrototype) {\r\n assert(stringPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n let stringInstance = resolver.resolveClass(stringPrototype, null);\r\n if (stringInstance) {\r\n if (this.typesLookup.has(\"string\")) {\r\n let declaration = (stringPrototype).declaration;\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n } else {\r\n this.stringInstance = stringInstance;\r\n this.typesLookup.set(\"string\", stringInstance.type);\r\n }\r\n }\r\n }\r\n\r\n // 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\");\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\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 (!(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 the element globally if it is ...\r\n if (\r\n // explicitly annotated with @global - or -\r\n (element.hasDecorator(DecoratorFlags.GLOBAL)) ||\r\n // part of the special builtins library file - or -\r\n (declaration.range.source.is(CommonFlags.BUILTIN)) ||\r\n // exported from a top-level library file\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 // builtins can use the global name directly instead of being just an alias\r\n if (element.is(CommonFlags.BUILTIN)) element.internalName = globalName;\r\n }\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 this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, prototype);\r\n }\r\n }\r\n\r\n // initialize members\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n 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.NONE)\r\n : DecoratorFlags.NONE\r\n );\r\n staticField.parent = classPrototype;\r\n classPrototype.members.set(name, staticField);\r\n this.elementsLookup.set(internalName, staticField);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n staticField.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance fields are remembered until resolved\r\n } else {\r\n if (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 this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, element);\r\n }\r\n }\r\n\r\n var values = declaration.values;\r\n for (let i = 0, k = values.length; i < k; ++i) {\r\n this.initializeEnumValue(values[i], element);\r\n }\r\n\r\n this.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 identifier: 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 = identifier.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 = identifier.text;\r\n (filespace).members.set(simpleName, element);\r\n\r\n // add global alias if from a library file\r\n if (identifier.range.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 identifier.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 }\r\n\r\n private initializeExport(\r\n member: ExportMember,\r\n internalPath: string | null,\r\n queuedExports: Map\r\n ): void {\r\n var externalName = member.range.source.internalPath + PATH_DELIMITER + member.externalName.text;\r\n if (this.fileLevelExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n var referencedName: string;\r\n var referencedElement: Element | null;\r\n var queuedExport: QueuedExport | null;\r\n\r\n // export local element\r\n if (internalPath == null) {\r\n referencedName = member.range.source.internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the element exists\r\n if (referencedElement = this.elementsLookup.get(referencedName)) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = false;\r\n queuedExport.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 this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, prototype);\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 this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, prototype);\r\n }\r\n }\r\n\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"interface member expected\");\r\n }\r\n }\r\n }\r\n\r\n this.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 if (this.moduleLevelExports.get(simpleName) !== namespace) { // not merged\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n this.moduleLevelExports.set(simpleName, namespace);\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.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 (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 this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n continue;\r\n }\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, global);\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}\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 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 | CommonFlags.BUILTIN) || prototype.is(CommonFlags.DECLARE))) {\r\n let localIndex = 0;\r\n if (parent && parent.kind == ElementKind.CLASS) {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let local = new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n );\r\n this.localsByName.set(\"this\", local);\r\n this.localsByIndex[local.index] = local;\r\n let inheritedTypeArguments = (parent).contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments.has(inheritedName)) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n }\r\n } else {\r\n assert(!this.is(CommonFlags.INSTANCE)); // internal error\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n let parameterType = parameterTypes[i];\r\n let parameterName = signature.getParameterName(i);\r\n let local = new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n // FIXME: declaration?\r\n );\r\n this.localsByName.set(parameterName, local);\r\n this.localsByIndex[local.index] = local;\r\n }\r\n }\r\n this.flow = Flow.create(this);\r\n }\r\n\r\n /** Adds a local of the specified type, with an optional name. */\r\n addLocal(type: Type, name: string | null = null, declaration: VariableDeclaration | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = this.signature.parameterTypes.length + this.additionalLocals.length;\r\n if (this.is(CommonFlags.INSTANCE)) ++localIndex;\r\n var local = new Local(\r\n this.prototype.program,\r\n name\r\n ? name\r\n : \"var$\" + localIndex.toString(10),\r\n localIndex,\r\n type,\r\n declaration\r\n );\r\n if (name) {\r\n if (this.localsByName.has(name)) throw new Error(\"duplicate local name\");\r\n this.localsByName.set(name, local);\r\n }\r\n this.localsByIndex[local.index] = local;\r\n this.additionalLocals.push(type);\r\n return local;\r\n }\r\n\r\n private tempI32s: Local[] | null = null;\r\n private tempI64s: Local[] | null = null;\r\n private tempF32s: Local[] | null = null;\r\n private tempF64s: Local[] | null = null;\r\n\r\n /** Gets a free temporary local of the specified type. */\r\n getTempLocal(type: Type, wrapped: bool = false): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s;\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps && temps.length) {\r\n local = temps.pop();\r\n local.type = type;\r\n local.flags = CommonFlags.NONE;\r\n } else {\r\n local = this.addLocal(type);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n if (local.is(CommonFlags.INLINED)) return;\r\n assert(local.index >= 0);\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n assert(local.index >= 0);\r\n temps.push(local);\r\n }\r\n\r\n /** Gets and immediately frees a temporary local of the specified type. */\r\n getAndFreeTempLocal(type: Type, wrapped: bool): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps.length) {\r\n local = temps[temps.length - 1];\r\n local.type = type;\r\n } else {\r\n local = this.addLocal(type);\r\n temps.push(local);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Enters a(nother) break context. */\r\n enterBreakContext(): string {\r\n var id = this.nextBreakId++;\r\n if (!this.breakStack) this.breakStack = [ id ];\r\n else this.breakStack.push(id);\r\n return this.breakContext = id.toString(10);\r\n }\r\n\r\n /** Leaves the current break context. */\r\n leaveBreakContext(): void {\r\n assert(this.breakStack != null);\r\n var length = (this.breakStack).length;\r\n assert(length > 0);\r\n (this.breakStack).pop();\r\n if (length > 1) {\r\n this.breakContext = (this.breakStack)[length - 2].toString(10);\r\n } else {\r\n this.breakContext = null;\r\n this.breakStack = null;\r\n }\r\n }\r\n\r\n /** Finalizes the function once compiled, releasing no longer needed resources. */\r\n finalize(module: Module, ref: FunctionRef): void {\r\n this.ref = ref;\r\n assert(!this.breakStack || !this.breakStack.length); // internal error\r\n this.breakStack = null;\r\n this.breakContext = null;\r\n this.tempI32s = this.tempI64s = this.tempF32s = this.tempF64s = null;\r\n if (this.program.options.sourceMap) {\r\n let debugLocations = this.debugLocations;\r\n for (let i = 0, k = debugLocations.length; i < k; ++i) {\r\n let debugLocation = debugLocations[i];\r\n module.setDebugLocation(\r\n ref,\r\n debugLocation.debugInfoRef,\r\n debugLocation.source.debugInfoIndex,\r\n debugLocation.line,\r\n debugLocation.column\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n}\r\n\r\n/** A resolved function target, that is a function called indirectly by an index and signature. */\r\nexport class FunctionTarget extends Element {\r\n\r\n kind = ElementKind.FUNCTION_TARGET;\r\n\r\n /** Underlying signature. */\r\n signature: Signature;\r\n /** Function type. */\r\n type: Type;\r\n\r\n /** Constructs a new function target. */\r\n constructor(program: Program, signature: Signature) {\r\n super(program, \"\", \"\");\r\n var simpleName = signature.toSignatureString();\r\n this.simpleName = simpleName;\r\n this.internalName = simpleName;\r\n this.signature = signature;\r\n this.type = Type.u32.asFunction(signature);\r\n }\r\n}\r\n\r\n/** A yet unresolved instance field prototype. */\r\nexport class FieldPrototype extends Element {\r\n\r\n kind = ElementKind.FIELD_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FieldDeclaration;\r\n /** Parent class prototype. */\r\n classPrototype: ClassPrototype;\r\n\r\n /** Constructs a new field prototype. */\r\n constructor(\r\n classPrototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FieldDeclaration\r\n ) {\r\n super(classPrototype.program, simpleName, internalName);\r\n this.classPrototype = classPrototype;\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** A resolved instance field. */\r\nexport class Field extends VariableLikeElement {\r\n\r\n kind = ElementKind.FIELD;\r\n\r\n /** Field prototype reference. */\r\n prototype: FieldPrototype;\r\n /** Field memory offset, if an instance field. */\r\n memoryOffset: i32 = -1;\r\n\r\n /** Constructs a new field. */\r\n constructor(\r\n prototype: FieldPrototype,\r\n internalName: string,\r\n type: Type,\r\n declaration: FieldDeclaration,\r\n parent: Class\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName, type, declaration);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.type = type;\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A property comprised of a getter and a setter function. */\r\nexport class Property extends Element {\r\n\r\n kind = ElementKind.PROPERTY;\r\n\r\n /** Parent class prototype. */\r\n parent: ClassPrototype;\r\n /** Getter prototype. */\r\n getterPrototype: FunctionPrototype | null = null;\r\n /** Setter prototype. */\r\n setterPrototype: FunctionPrototype | null = null;\r\n\r\n /** Constructs a new property prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n parent: ClassPrototype\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A yet unresolved class prototype. */\r\nexport class ClassPrototype extends Element {\r\n\r\n kind = ElementKind.CLASS_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: ClassDeclaration;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Instance member prototypes. */\r\n instanceMembers: Map | null = null;\r\n /** Base class prototype, if applicable. */\r\n basePrototype: ClassPrototype | null = null; // set in Program#initialize\r\n /** Constructor prototype. */\r\n constructorPrototype: FunctionPrototype | null = null;\r\n /** Operator overload prototypes. */\r\n overloadPrototypes: Map = new Map();\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A resolved class. */\r\nexport class Class extends Element {\r\n\r\n kind = ElementKind.CLASS;\r\n\r\n /** Prototype reference. */\r\n prototype: ClassPrototype;\r\n /** Resolved type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Resolved class type. */\r\n type: Type;\r\n /** Base class, if applicable. */\r\n base: Class | null;\r\n /** Contextual type arguments for fields and methods. */\r\n contextualTypeArguments: Map | null = null;\r\n /** Current member memory offset. */\r\n currentMemoryOffset: u32 = 0;\r\n /** Constructor instance. */\r\n constructorInstance: Function | null = null;\r\n /** Operator overloads. */\r\n overloads: Map | null = null;\r\n\r\n /** Constructs a new class. */\r\n constructor(\r\n prototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] | null = null,\r\n base: Class | null = null\r\n ) {\r\n super(prototype.program, simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.typeArguments = typeArguments;\r\n this.type = prototype.program.options.usizeType.asClass(this);\r\n this.base = base;\r\n\r\n // inherit static members and contextual type arguments from base class\r\n if (base) {\r\n let inheritedTypeArguments = base.contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [baseName, baseType] of inheritedTypeArguments) {\r\n this.contextualTypeArguments.set(baseName, baseType);\r\n }\r\n }\r\n }\r\n\r\n // apply instance-specific contextual type arguments\r\n var declaration = this.prototype.declaration;\r\n var i: i32, k: i32;\r\n if (declaration) { // irrelevant for built-ins\r\n let typeParameters = declaration.typeParameters;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n if (k) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (i = 0; i < k; ++i) {\r\n this.contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n }\r\n } else if (typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n }\r\n }\r\n\r\n /** Tests if a value of this class type is assignable to a target of the specified class type. */\r\n isAssignableTo(target: Class): bool {\r\n var current: Class | null = this;\r\n do if (current == target) return true;\r\n while (current = current.base);\r\n return false;\r\n }\r\n\r\n /** Looks up the operator overload of the specified kind. */\r\n lookupOverload(kind: OperatorKind, unchecked: bool = false): Function | null {\r\n if (unchecked) {\r\n switch (kind) {\r\n case OperatorKind.INDEXED_GET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_GET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n case OperatorKind.INDEXED_SET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_SET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n var instance: Class | null = this;\r\n do {\r\n let overloads = instance.overloads;\r\n if (overloads) {\r\n let overload = overloads.get(kind);\r\n if (overload) return overload;\r\n }\r\n } while (instance = instance.base);\r\n return null;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A yet unresolved interface. */\r\nexport class InterfacePrototype extends ClassPrototype {\r\n\r\n kind = ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: InterfaceDeclaration; // more specific\r\n\r\n /** Constructs a new interface prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: InterfaceDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, declaration, decoratorFlags);\r\n }\r\n}\r\n\r\n/** A resolved interface. */\r\nexport class Interface extends Class {\r\n\r\n kind = ElementKind.INTERFACE;\r\n\r\n /** Prototype reference. */\r\n prototype: InterfacePrototype; // more specific\r\n /** Base interface, if applcable. */\r\n base: Interface | null; // more specific\r\n\r\n /** Constructs a new interface. */\r\n constructor(\r\n prototype: InterfacePrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, simpleName, internalName, typeArguments, base);\r\n }\r\n}\r\n\r\n/** Control flow flags indicating specific conditions. */\r\nexport const enum FlowFlags {\r\n /** No specific conditions. */\r\n NONE = 0,\r\n\r\n // 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 * Mappings from AssemblyScript types to WebAssembly types.\r\n * @module types\r\n *//***/\r\n\r\nimport {\r\n Class,\r\n FunctionTarget\r\n} from \"./program\";\r\n\r\nimport {\r\n NativeType,\r\n ExpressionRef,\r\n Module\r\n} from \"./module\";\r\n\r\n/** Indicates the kind of a type. */\r\nexport const enum TypeKind {\r\n\r\n // signed integers\r\n\r\n /** An 8-bit signed integer. */\r\n I8,\r\n /** A 16-bit signed integer. */\r\n I16,\r\n /** A 32-bit signed integer. */\r\n I32,\r\n /** A 64-bit signed integer. */\r\n I64,\r\n /** A 32-bit/64-bit signed integer, depending on the target. */\r\n ISIZE,\r\n\r\n // unsigned integers\r\n\r\n /** An 8-bit unsigned integer. */\r\n U8,\r\n /** A 16-bit unsigned integer. */\r\n U16,\r\n /** A 32-bit unsigned integer. Also the base of function types. */\r\n U32,\r\n /** A 64-bit unsigned integer. */\r\n U64,\r\n /** A 32-bit/64-bit unsigned integer, depending on the target. Also the base of class types. */\r\n USIZE,\r\n /** A 1-bit unsigned integer. */\r\n BOOL, // sic\r\n\r\n // floats\r\n\r\n /** A 32-bit float. */\r\n F32,\r\n /** A 64-bit double. */\r\n F64,\r\n\r\n // other\r\n\r\n /** No return type. */\r\n VOID\r\n}\r\n\r\n/** Indicates capabilities of a type. */\r\nexport const enum TypeFlags {\r\n NONE = 0,\r\n /** Is a signed type that can represent negative values. */\r\n SIGNED = 1 << 0,\r\n /** Is an unsigned type that cannot represent negative values. */\r\n UNSIGNED = 1 << 1,\r\n /** Is an integer type. */\r\n INTEGER = 1 << 2,\r\n /** Is a floating point type. */\r\n FLOAT = 1 << 3,\r\n /** Is a pointer type. */\r\n POINTER = 1 << 4,\r\n /** Is smaller than 32-bits. */\r\n SHORT = 1 << 5,\r\n /** Is larger than 32-bits. */\r\n LONG = 1 << 6,\r\n /** Is a value type. */\r\n VALUE = 1 << 7,\r\n /** Is a reference type. */\r\n REFERENCE = 1 << 8,\r\n /** Is a nullable type. */\r\n NULLABLE = 1 << 9\r\n}\r\n\r\n/** Represents a resolved type. */\r\nexport class Type {\r\n\r\n /** Type kind. */\r\n kind: TypeKind;\r\n /** Type flags. */\r\n flags: TypeFlags;\r\n /** Size in bits. */\r\n size: u32;\r\n /** Size in bytes. */\r\n byteSize: i32;\r\n /** Underlying class reference, if a class type. */\r\n classReference: Class | null;\r\n /** Underlying signature reference, if a function type. */\r\n signatureReference: Signature | null;\r\n /** Respective non-nullable type, if nullable. */\r\n nonNullableType: Type;\r\n /** Cached nullable type, if non-nullable. */\r\n private cachedNullableType: Type | null = null;\r\n\r\n /** Constructs a new resolved type. */\r\n constructor(kind: TypeKind, flags: TypeFlags, size: u32) {\r\n this.kind = kind;\r\n this.flags = flags;\r\n this.size = size;\r\n this.byteSize = ceil(size / 8);\r\n this.classReference = null;\r\n this.signatureReference = null;\r\n this.nonNullableType = this;\r\n }\r\n\r\n /** Returns the 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 /** 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","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\r\n * A TypeScript tokenizer modified for AssemblyScript.\r\n *\r\n * Skips over trivia and provides a general mark/reset mechanism for the parser to utilize on\r\n * ambiguous tokens.\r\n *\r\n * @module tokenizer\r\n *//***/\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Source,\r\n CommentKind\r\n} from \"./ast\";\r\n\r\nimport {\r\n CharCode,\r\n isLineBreak,\r\n isWhiteSpace,\r\n isIdentifierStart,\r\n isIdentifierPart,\r\n isDecimalDigit,\r\n isOctalDigit,\r\n isKeywordCharacter\r\n} from \"./util\";\r\n\r\n/** Named token types. */\r\nexport enum Token {\r\n\r\n // keywords\r\n // discarded: ANY, BOOLEAN, NEVER, NUMBER, STRING, SYMBOL, UNDEFINED, LESSTHAN_SLASH\r\n\r\n ABSTRACT,\r\n AS,\r\n ASYNC,\r\n AWAIT, // ES2017\r\n BREAK, // ES2017\r\n CASE, // ES2017\r\n CATCH, // ES2017\r\n CLASS, // ES2017\r\n CONST, // ES2017\r\n CONTINUE, // ES2017\r\n CONSTRUCTOR,\r\n DEBUGGER, // ES2017\r\n DECLARE,\r\n DEFAULT, // ES2017\r\n DELETE, // ES2017\r\n DO, // ES2017\r\n ELSE, // ES2017\r\n ENUM, // ES2017 future\r\n EXPORT, // ES2017\r\n EXTENDS, // ES2017\r\n FALSE, // ES\r\n FINALLY, // ES2017\r\n FOR, // ES2017\r\n FROM, // AS possible identifier\r\n FUNCTION, // ES2017\r\n GET,\r\n IF, // ES2017\r\n IMPLEMENTS, // ES2017 non-lexical\r\n IMPORT, // ES2017\r\n IN, // ES2017\r\n INSTANCEOF, // ES2017\r\n INTERFACE, // ES2017 non-lexical\r\n IS,\r\n KEYOF,\r\n LET, // ES2017 non-lexical\r\n MODULE, // AS possible identifier\r\n NAMESPACE, // AS possible identifier\r\n NEW, // ES2017\r\n NULL, // ES\r\n OF,\r\n PACKAGE, // ES2017 non-lexical\r\n PRIVATE, // ES2017 non-lexical\r\n PROTECTED, // ES2017 non-lexical\r\n PUBLIC, // ES2017 non-lexical\r\n READONLY,\r\n RETURN, // ES2017\r\n SET,\r\n STATIC, // ES2017 non-lexical\r\n SUPER, // ES2017\r\n SWITCH, // ES2017\r\n THIS, // ES2017\r\n THROW, // ES2017\r\n TRUE, // ES\r\n TRY, // ES2017\r\n TYPE, // AS possible identifier\r\n TYPEOF, // ES2017\r\n VAR, // ES2017\r\n VOID, // ES2017\r\n WHILE, // ES2017\r\n WITH, // ES2017\r\n YIELD, // ES2017\r\n\r\n // punctuation\r\n\r\n OPENBRACE,\r\n CLOSEBRACE,\r\n OPENPAREN,\r\n CLOSEPAREN,\r\n OPENBRACKET,\r\n CLOSEBRACKET,\r\n DOT,\r\n DOT_DOT_DOT,\r\n SEMICOLON,\r\n COMMA,\r\n LESSTHAN,\r\n GREATERTHAN,\r\n LESSTHAN_EQUALS,\r\n GREATERTHAN_EQUALS,\r\n EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS,\r\n EQUALS_EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS_EQUALS,\r\n EQUALS_GREATERTHAN,\r\n PLUS,\r\n MINUS,\r\n ASTERISK_ASTERISK,\r\n ASTERISK,\r\n SLASH,\r\n PERCENT,\r\n PLUS_PLUS,\r\n MINUS_MINUS,\r\n LESSTHAN_LESSTHAN,\r\n GREATERTHAN_GREATERTHAN,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN,\r\n AMPERSAND,\r\n BAR,\r\n CARET,\r\n EXCLAMATION,\r\n TILDE,\r\n AMPERSAND_AMPERSAND,\r\n BAR_BAR,\r\n QUESTION,\r\n COLON,\r\n EQUALS,\r\n PLUS_EQUALS,\r\n MINUS_EQUALS,\r\n ASTERISK_EQUALS,\r\n ASTERISK_ASTERISK_EQUALS,\r\n SLASH_EQUALS,\r\n PERCENT_EQUALS,\r\n LESSTHAN_LESSTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS,\r\n AMPERSAND_EQUALS,\r\n BAR_EQUALS,\r\n CARET_EQUALS,\r\n AT,\r\n\r\n // literals\r\n\r\n IDENTIFIER,\r\n STRINGLITERAL,\r\n INTEGERLITERAL,\r\n FLOATLITERAL,\r\n\r\n // meta\r\n\r\n INVALID,\r\n ENDOFFILE\r\n}\r\n\r\nexport 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","/**\n * Generated from diagnosticsMessages.json. Do not edit.\n * @module diagnostics\n *//***/\n\n/* tslint:disable:max-line-length */\n\n/** Enum of available diagnostic codes. */\nexport enum DiagnosticCode {\n Operation_not_supported = 100,\n Operation_is_unsafe = 101,\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\n Type_0_cannot_be_changed_to_type_1 = 202,\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\n Basic_type_0_cannot_be_nullable = 204,\n Cannot_export_a_mutable_global = 205,\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\n Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa = 207,\n Unmanaged_classes_cannot_implement_interfaces = 208,\n Invalid_regular_expression_flags = 209,\n Implementation_0_must_match_the_signature_1 = 210,\n Class_0_is_sealed_and_cannot_be_extended = 211,\n Decorator_0_is_not_valid_here = 212,\n Duplicate_decorator = 213,\n An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf = 214,\n Optional_parameter_must_have_an_initializer = 215,\n Unterminated_string_literal = 1002,\n Identifier_expected = 1003,\n _0_expected = 1005,\n A_file_cannot_have_a_reference_to_itself = 1006,\n Trailing_comma_not_allowed = 1009,\n Unexpected_token = 1012,\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\n Parameter_cannot_have_question_mark_and_initializer = 1015,\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\n Enum_member_must_have_initializer = 1061,\n Statements_are_not_allowed_in_ambient_contexts = 1036,\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\n _0_modifier_cannot_be_used_here = 1042,\n A_rest_parameter_cannot_be_optional = 1047,\n A_rest_parameter_cannot_have_an_initializer = 1048,\n A_set_accessor_must_have_exactly_one_parameter = 1049,\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\n A_get_accessor_cannot_have_parameters = 1054,\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\n An_accessor_cannot_have_type_parameters = 1094,\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\n Type_parameter_list_cannot_be_empty = 1098,\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\n Expression_expected = 1109,\n Type_expected = 1110,\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\n Duplicate_label_0 = 1114,\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\n Digit_expected = 1124,\n Hexadecimal_digit_expected = 1125,\n Unexpected_end_of_text = 1126,\n Invalid_character = 1127,\n _case_or_default_expected = 1130,\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\n Type_argument_expected = 1140,\n String_literal_expected = 1141,\n Line_break_not_permitted_here = 1142,\n Declaration_expected = 1146,\n _const_declarations_must_be_initialized = 1155,\n Unterminated_regular_expression_literal = 1161,\n Interface_declaration_cannot_have_implements_clause = 1176,\n Binary_digit_expected = 1177,\n Octal_digit_expected = 1178,\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\n Unterminated_Unicode_escape_sequence = 1199,\n Decorators_are_not_valid_here = 1206,\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\n Method_0_cannot_have_an_implementation_because_it_is_marked_abstract = 1245,\n A_class_may_only_extend_another_class = 1311,\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\n Duplicate_identifier_0 = 2300,\n Cannot_find_name_0 = 2304,\n Module_0_has_no_exported_member_1 = 2305,\n Generic_type_0_requires_1_type_argument_s = 2314,\n Type_0_is_not_generic = 2315,\n Type_0_is_not_assignable_to_type_1 = 2322,\n Index_signature_is_missing_in_type_0 = 2329,\n _this_cannot_be_referenced_in_current_location = 2332,\n _super_can_only_be_referenced_in_a_derived_class = 2335,\n Property_0_does_not_exist_on_type_1 = 2339,\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\n _get_and_set_accessor_must_have_the_same_type = 2380,\n Constructor_implementation_is_missing = 2390,\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\n Multiple_constructor_implementations_are_not_allowed = 2392,\n Duplicate_function_implementation = 2393,\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\n Type_0_has_no_property_1 = 2460,\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\n Index_signature_in_type_0_only_permits_reading = 2542,\n Expected_0_arguments_but_got_1 = 2554,\n Expected_at_least_0_arguments_but_got_1 = 2555,\n Expected_0_type_arguments_but_got_1 = 2558,\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\n Namespace_0_has_no_exported_member_1 = 2694,\n File_0_not_found = 6054,\n Numeric_separators_are_not_allowed_here = 6188,\n Multiple_consecutive_numeric_separators_are_not_permitted = 6189\n}\n\n/** Translates a diagnostic code to its respective string. */\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\n switch (code) {\n case 100: return \"Operation not supported.\";\n case 101: return \"Operation is unsafe.\";\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\n case 204: return \"Basic type '{0}' cannot be nullable.\";\n case 205: return \"Cannot export a mutable global.\";\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\n case 207: return \"Unmanaged classes cannot extend managed classes and vice-versa.\";\n case 208: return \"Unmanaged classes cannot implement interfaces.\";\n case 209: return \"Invalid regular expression flags.\";\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\n case 212: return \"Decorator '{0}' is not valid here.\";\n case 213: return \"Duplicate decorator.\";\n case 214: return \"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.\";\n case 215: return \"Optional parameter must have an initializer.\";\n case 1002: return \"Unterminated string literal.\";\n case 1003: return \"Identifier expected.\";\n case 1005: return \"'{0}' expected.\";\n case 1006: return \"A file cannot have a reference to itself.\";\n case 1009: return \"Trailing comma not allowed.\";\n case 1012: return \"Unexpected token.\";\n case 1014: return \"A rest parameter must be last in a parameter list.\";\n case 1015: return \"Parameter cannot have question mark and initializer.\";\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\n case 1061: return \"Enum member must have initializer.\";\n case 1036: return \"Statements are not allowed in ambient contexts.\";\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\n case 1042: return \"'{0}' modifier cannot be used here.\";\n case 1047: return \"A rest parameter cannot be optional.\";\n case 1048: return \"A rest parameter cannot have an initializer.\";\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\n case 1054: return \"A 'get' accessor cannot have parameters.\";\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\n case 1094: return \"An accessor cannot have type parameters.\";\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\n case 1098: return \"Type parameter list cannot be empty.\";\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\n case 1108: return \"A 'return' statement can only be used within a function body.\";\n case 1109: return \"Expression expected.\";\n case 1110: return \"Type expected.\";\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\n case 1114: return \"Duplicate label '{0}'.\";\n case 1121: return \"Octal literals are not allowed in strict mode.\";\n case 1124: return \"Digit expected.\";\n case 1125: return \"Hexadecimal digit expected.\";\n case 1126: return \"Unexpected end of text.\";\n case 1127: return \"Invalid character.\";\n case 1130: return \"'case' or 'default' expected.\";\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\n case 1140: return \"Type argument expected.\";\n case 1141: return \"String literal expected.\";\n case 1142: return \"Line break not permitted here.\";\n case 1146: return \"Declaration expected.\";\n case 1155: return \"'const' declarations must be initialized.\";\n case 1161: return \"Unterminated regular expression literal.\";\n case 1176: return \"Interface declaration cannot have 'implements' clause.\";\n case 1177: return \"Binary digit expected.\";\n case 1178: return \"Octal digit expected.\";\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\n case 1199: return \"Unterminated Unicode escape sequence.\";\n case 1206: return \"Decorators are not valid here.\";\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\n case 1245: return \"Method '{0}' cannot have an implementation because it is marked abstract.\";\n case 1311: return \"A class may only extend another class.\";\n case 1317: return \"A parameter property cannot be declared using a rest parameter.\";\n case 2300: return \"Duplicate identifier '{0}'.\";\n case 2304: return \"Cannot find name '{0}'.\";\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\n case 2315: return \"Type '{0}' is not generic.\";\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\n case 2329: return \"Index signature is missing in type '{0}'.\";\n case 2332: return \"'this' cannot be referenced in current location.\";\n case 2335: return \"'super' can only be referenced in a derived class.\";\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\n case 2390: return \"Constructor implementation is missing.\";\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\n case 2392: return \"Multiple constructor implementations are not allowed.\";\n case 2393: return \"Duplicate function implementation.\";\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\n case 2460: return \"Type '{0}' has no property '{1}'.\";\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\n case 2554: return \"Expected {0} arguments, but got {1}.\";\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\n case 6054: return \"File '{0}' not found.\";\n case 6188: return \"Numeric separators are not allowed here.\";\n case 6189: return \"Multiple consecutive numeric separators are not permitted.\";\n default: return \"\";\n }\n}\n","/**\r\n * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileAllocate as compileBuiltinAllocate,\r\n compileAbort as compileBuiltinAbort\r\n} from \"./builtins\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module,\r\n MemorySegment,\r\n ExpressionRef,\r\n UnaryOp,\r\n BinaryOp,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionId,\r\n FunctionTypeRef,\r\n GlobalRef,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getFunctionBody,\r\n getGetLocalIndex,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName\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\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 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 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 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: Function[] = [];\r\n /** Argument count helper global. */\r\n argcVar: GlobalRef = 0;\r\n /** Argument count helper setter. */\r\n argcSet: FunctionRef = 0;\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n 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 let entries = new Array(functionTableSize);\r\n for (let i = 0; i < functionTableSize; ++i) {\r\n entries[i] = functionTable[i].ref;\r\n }\r\n module.setFunctionTable(entries);\r\n module.addTableExport(\"0\", \"table\");\r\n functionTableExported = true;\r\n }\r\n\r\n // import table if requested (default table is named '0' by Binaryen)\r\n if (options.importTable) {\r\n module.addTableImport(\"0\", \"env\", \"table\");\r\n if (!functionTableExported) module.addTableExport(\"0\", \"table\");\r\n }\r\n\r\n return module;\r\n }\r\n\r\n // sources\r\n\r\n /** Compiles a source by looking it up by path first. */\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var source = this.program.lookupSourceByPath(normalizedPathWithoutExtension);\r\n if (source) this.compileSource(source);\r\n else {\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n }\r\n\r\n /** Compiles a source. */\r\n compileSource(source: Source): void {\r\n if (source.is(CommonFlags.COMPILED)) return;\r\n source.set(CommonFlags.COMPILED);\r\n\r\n // compile top-level statements\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var 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 | CommonFlags.BUILTIN)) return true;\r\n\r\n var nativeType = global.type.toNativeType();\r\n var isConstant = global.isAny(CommonFlags.CONST) || global.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n\r\n // handle imports\r\n if (global.is(CommonFlags.AMBIENT)) {\r\n\r\n // constant global\r\n if (isConstant || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n global.set(CommonFlags.MODULE_IMPORT);\r\n 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\r\n // get_globals), hence such initializations must be performed in the start function for now.\r\n var initializeInStart = false;\r\n\r\n // inlined constant can be compiled as-is\r\n if (global.is(CommonFlags.INLINED)) {\r\n initExpr = this.compileInlineConstant(global, global.type, true);\r\n\r\n } else {\r\n\r\n // evaluate initializer if present\r\n if (declaration && declaration.initializer) {\r\n if (!initExpr) {\r\n initExpr = this.compileExpression(\r\n declaration.initializer,\r\n global.type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n }\r\n\r\n // check if the initializer is constant\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n\r\n // if a constant global, check if the initializer becomes constant after precompute\r\n if (isConstant) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n initializeInStart = true;\r\n }\r\n } else {\r\n initializeInStart = true;\r\n }\r\n }\r\n\r\n // initialize to zero if there's no initializer\r\n } else {\r\n initExpr = global.type.toNativeZero(module);\r\n }\r\n }\r\n\r\n var internalName = global.internalName;\r\n\r\n if (initializeInStart) { // initialize to mutable zero and set the actual value in start\r\n module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(module));\r\n this.startFunctionBody.push(module.createSetGlobal(internalName, initExpr));\r\n\r\n } else { // compile as-is\r\n\r\n if (isConstant) {\r\n let exprType = getExpressionType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(getConstValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return false;\r\n }\r\n }\r\n global.set(CommonFlags.INLINED); // inline the value from now on\r\n if (global.is(CommonFlags.MODULE_EXPORT)) {\r\n module.addGlobal(internalName, nativeType, false, initExpr);\r\n module.addGlobalExport(internalName, mangleExportName(global));\r\n } else if (declaration && declaration.isTopLevel) { // might become re-exported\r\n module.addGlobal(internalName, nativeType, false, initExpr);\r\n }\r\n\r\n } else /* mutable */ {\r\n module.addGlobal(internalName, nativeType, !isConstant, initExpr);\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // enums\r\n\r\n compileEnumDeclaration(declaration: EnumDeclaration): Enum | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(element)) return null;\r\n return element;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(CommonFlags.COMPILED)) return true;\r\n element.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n\r\n if (element.members) {\r\n for (let member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n let initInStart = false;\r\n let val = member;\r\n let valueDeclaration = val.declaration;\r\n val.set(CommonFlags.COMPILED);\r\n if (val.is(CommonFlags.INLINED)) {\r\n if (element.declaration.isTopLevelExport) {\r\n module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n false, // constant\r\n module.createI32(val.constantValue)\r\n );\r\n }\r\n } else {\r\n let initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(\r\n valueDeclaration.value,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n }\r\n } else if (previousValue == null) {\r\n initExpr = module.createI32(0);\r\n } else if (previousValue.is(CommonFlags.INLINED)) {\r\n initExpr = module.createI32(previousValue.constantValue + 1);\r\n } else {\r\n // in TypeScript this errors with TS1061, but actually we can do:\r\n initExpr = module.createBinary(BinaryOp.AddI32,\r\n module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n module.createI32(1)\r\n );\r\n if (element.is(CommonFlags.CONST)) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n if (initInStart) {\r\n module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n true, // mutable\r\n module.createI32(0)\r\n );\r\n this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr));\r\n } else {\r\n module.addGlobal(val.internalName, NativeType.I32, false, initExpr);\r\n if (getExpressionType(initExpr) == NativeType.I32) {\r\n val.constantValue = getConstValueI32(initExpr);\r\n val.set(CommonFlags.INLINED);\r\n } else {\r\n assert(false);\r\n val.constantValue = 0;\r\n }\r\n }\r\n }\r\n previousValue = val;\r\n\r\n // export values if the enum is exported\r\n if (element.is(CommonFlags.MODULE_EXPORT)) {\r\n if (member.is(CommonFlags.INLINED) || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n module.addGlobalExport(member.internalName, mangleExportName(member));\r\n } else if (valueDeclaration) {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n valueDeclaration.range\r\n );\r\n }\r\n }\r\n }\r\n }\r\n this.currentEnum = null;\r\n return true;\r\n }\r\n\r\n // functions\r\n\r\n /** Compiles a top-level function given its declaration. */\r\n compileFunctionDeclaration(\r\n declaration: FunctionDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n null, // no outer scope (is top level)\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n /** Resolves the specified type arguments prior to compiling the resulting function instance. */\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n outerScope: Flow | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = 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 private ensureFunctionType(\r\n parameterTypes: Type[] | null,\r\n returnType: Type,\r\n thisType: Type | null = null\r\n ): FunctionTypeRef {\r\n var numParameters = parameterTypes ? parameterTypes.length : 0;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n if (parameterTypes) {\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = parameterTypes[i].toNativeType();\r\n }\r\n }\r\n var resultType = returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n let name = Signature.makeSignatureString(parameterTypes, returnType, thisType);\r\n typeRef = module.addFunctionType(name, resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n assert(!instance.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN));\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 // check module-level export\r\n if (instance.is(CommonFlags.MODULE_EXPORT)) {\r\n if (signature.requiredParameters < signature.parameterTypes.length) {\r\n // export the trampoline if the function takes optional parameters\r\n instance = this.ensureTrampoline(instance);\r\n this.ensureArgcSet();\r\n }\r\n module.addFunctionExport(instance.internalName, mangleExportName(instance));\r\n }\r\n\r\n instance.finalize(module, ref);\r\n return true;\r\n }\r\n\r\n // namespaces\r\n\r\n compileNamespaceDeclaration(declaration: NamespaceDeclaration): void {\r\n var members = declaration.members;\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n switch (member.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n let variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n compileNamespace(ns: Namespace): void {\r\n if (!ns.members) return;\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let element of ns.members.values()) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking || (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var module = this.module;\r\n var 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 internalExportName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n member.externalName.text\r\n );\r\n let element = fileLevelExports.get(internalExportName);\r\n if (!element) continue; // reported in Program#initialize\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (!(element).is(CommonFlags.GENERIC)) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n let functionInstance = this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n if (functionInstance) {\r\n let functionDeclaration = functionInstance.prototype.declaration;\r\n if (functionDeclaration && functionDeclaration.needsExplicitExport(member)) {\r\n module.addFunctionExport(functionInstance.internalName, member.externalName.text);\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (this.compileGlobal(element) && statement.range.source.isEntry) {\r\n let globalDeclaration = (element).declaration;\r\n if (globalDeclaration && globalDeclaration.needsExplicitExport(member)) {\r\n if ((element).is(CommonFlags.INLINED)) {\r\n module.addGlobalExport(element.internalName, member.externalName.text);\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n member.range\r\n );\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // classes\r\n\r\n compileClassDeclaration(\r\n declaration: ClassDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): 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 if (!instance.is(CommonFlags.MODULE_EXPORT) || element.is(CommonFlags.PRIVATE)) break;\r\n let module = this.module;\r\n let name = (element).simpleName;\r\n let type = (element).type;\r\n let nativeType = type.toNativeType();\r\n let offset = (element).memoryOffset;\r\n let usizeType = this.options.usizeType;\r\n let nativeSizeType = this.options.nativeSizeType;\r\n\r\n // export an implicit getter: get:fieldName(this: usize) -> fieldType\r\n let getterName = mangleExportName(element, GETTER_PREFIX + name);\r\n module.addFunction(\r\n getterName,\r\n this.ensureFunctionType(null, type, usizeType),\r\n null,\r\n module.createLoad(\r\n type.byteSize,\r\n type.is(TypeFlags.SIGNED),\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(getterName, getterName);\r\n\r\n // export an implicit setter: set:fieldName(this: usize, value: fieldType) -> void\r\n if (element.is(CommonFlags.READONLY)) break;\r\n let setterName = mangleExportName(element, SETTER_PREFIX + name);\r\n module.addFunction(\r\n setterName,\r\n this.ensureFunctionType([ type ], Type.void, usizeType),\r\n null,\r\n module.createStore(\r\n type.byteSize,\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createGetLocal(1, nativeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(setterName, setterName);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], instance.contextualTypeArguments, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], instance.contextualTypeArguments, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n compileInterfaceDeclaration(\r\n declaration: InterfaceDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n // TODO\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n }\r\n\r\n // memory\r\n\r\n /** Adds a static memory segment with the specified data. */\r\n addMemorySegment(buffer: Uint8Array, alignment: i32 = 8): MemorySegment {\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n }\r\n\r\n // function table\r\n\r\n /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(CommonFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var functionTable = this.functionTable;\r\n var index = functionTable.length;\r\n if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) {\r\n // insert the trampoline if the function has optional parameters\r\n func = this.ensureTrampoline(func);\r\n }\r\n functionTable.push(func);\r\n func.functionTableIndex = index;\r\n return index;\r\n }\r\n\r\n // statements\r\n\r\n compileStatement(statement: Statement): ExpressionRef {\r\n var module = this.module;\r\n var stmt: ExpressionRef;\r\n switch (statement.kind) {\r\n case NodeKind.BLOCK: {\r\n stmt = this.compileBlockStatement(statement);\r\n break;\r\n }\r\n case NodeKind.BREAK: {\r\n stmt = this.compileBreakStatement(statement);\r\n break;\r\n }\r\n case NodeKind.CONTINUE: {\r\n stmt = this.compileContinueStatement(statement);\r\n break;\r\n }\r\n case NodeKind.DO: {\r\n stmt = this.compileDoStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EMPTY: {\r\n stmt = this.compileEmptyStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EXPRESSION: {\r\n stmt = this.compileExpressionStatement(statement);\r\n break;\r\n }\r\n case NodeKind.FOR: {\r\n stmt = this.compileForStatement(statement);\r\n break;\r\n }\r\n case NodeKind.IF: {\r\n stmt = this.compileIfStatement(statement);\r\n break;\r\n }\r\n case NodeKind.RETURN: {\r\n stmt = this.compileReturnStatement(statement);\r\n break;\r\n }\r\n case NodeKind.SWITCH: {\r\n stmt = this.compileSwitchStatement(statement);\r\n break;\r\n }\r\n case NodeKind.THROW: {\r\n stmt = this.compileThrowStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TRY: {\r\n stmt = this.compileTryStatement(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n stmt = this.compileVariableStatement(statement);\r\n if (!stmt) stmt = module.createNop();\r\n break;\r\n }\r\n case NodeKind.VOID: {\r\n stmt = this.compileVoidStatement(statement);\r\n break;\r\n }\r\n case NodeKind.WHILE: {\r\n stmt = this.compileWhileStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // type declarations must be top-level because function bodies are evaluated when\r\n // reachaable only.\r\n if (this.currentFunction == this.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)) break;\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 return module.createBlock(breakLabel, [\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 ], terminated ? NativeType.Unreachable : NativeType.None);\r\n }\r\n\r\n compileEmptyStatement(statement: EmptyStatement): ExpressionRef {\r\n return this.module.createNop();\r\n }\r\n\r\n compileExpressionStatement(statement: ExpressionStatement): ExpressionRef {\r\n var expr = this.compileExpression(statement.expression, Type.void, ConversionKind.NONE, WrapMode.NONE);\r\n if (this.currentType != Type.void) {\r\n expr = this.module.createDrop(expr);\r\n this.currentType = Type.void;\r\n }\r\n return expr;\r\n }\r\n\r\n compileForStatement(statement: ForStatement): ExpressionRef {\r\n // A for statement initiates a new branch with its own scoped variables\r\n // possibly declared in its initializer, and break context.\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var 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 = this.precomputeExpressionRef(condExpr);\r\n if (getExpressionId(condPre) == ExpressionId.Const) {\r\n assert(getExpressionType(condPre) == NativeType.I32);\r\n if (getConstValueI32(condPre) != 0) alwaysTrue = true;\r\n // TODO: could skip compilation if the condition is always false here, but beware that the\r\n // initializer could still declare new 'var's that are used later on.\r\n }\r\n // recompile to original\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n } else {\r\n // omitted condition is always true\r\n condExpr = module.createI32(1);\r\n alwaysTrue = true;\r\n }\r\n var incrExpr = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : 0;\r\n var bodyExpr = this.compileStatement(statement.statement);\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 var terminated = alwaysTrue && flow.isAny(FlowFlags.ANY_TERMINATING);\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,\r\n module.createBlock(null, repeatBlock, NativeType.None)\r\n )\r\n );\r\n\r\n return module.createBlock(\r\n breakLabel,\r\n breakBlock,\r\n terminated\r\n ? NativeType.Unreachable\r\n : NativeType.None\r\n );\r\n }\r\n\r\n compileIfStatement(statement: IfStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var ifTrue = statement.ifTrue;\r\n var ifFalse = statement.ifFalse;\r\n\r\n // The condition doesn't initiate a branch yet\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary branches if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileStatement(ifTrue)\r\n : ifFalse\r\n ? this.compileStatement(ifFalse)\r\n : module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Each arm initiates a branch\r\n var 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 compileBuiltinAbort(this, null, statement);\r\n }\r\n\r\n compileTryStatement(statement: TryStatement): ExpressionRef {\r\n // TODO\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n /**\r\n * Compiles a variable statement. Returns `0` if an initializer is not\r\n * necessary.\r\n */\r\n compileVariableStatement(statement: VariableStatement, isKnownGlobal: bool = false): ExpressionRef {\r\n var program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var declarations = statement.declarations;\r\n var numDeclarations = declarations.length;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n currentFunction == this.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.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) == ExpressionId.Const) {\r\n let local = new Local(program, name, -1, type);\r\n switch (getExpressionType(initExpr)) {\r\n case NativeType.I32: {\r\n local = local.withConstantIntegerValue(\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 = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n if (!getConstValueI32(condExprPrecomp)) return module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Statements initiate a new branch with its own break context\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var 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 alwaysReturns = alwaysTrue && flow.is(FlowFlags.RETURNS);\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 var expr = 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 ], alwaysReturns ? NativeType.Unreachable : NativeType.None);\r\n return expr;\r\n }\r\n\r\n // expressions\r\n\r\n /**\r\n * Compiles the value of an inlined constant element.\r\n * @param retainType If true, the annotated type of the constant is retained. Otherwise, the value\r\n * is precomputed according to context.\r\n */\r\n compileInlineConstant(\r\n element: VariableLikeElement,\r\n contextualType: Type,\r\n retainType: bool\r\n ): ExpressionRef {\r\n assert(element.is(CommonFlags.INLINED));\r\n var type = element.type;\r\n switch (\r\n !retainType &&\r\n type.is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n type.size < contextualType.size\r\n ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension\r\n : (this.currentType = type).kind\r\n ) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n let shift = type.computeSmallIntegerShift(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) << shift >> shift\r\n : 0\r\n ); // recognized by canOverflow\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let mask = element.type.computeSmallIntegerMask(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) & mask\r\n : 0\r\n ); // recognized by canOverflow\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n if (!element.program.options.isWasm64) {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return element.constantValueKind == ConstantValueKind.INTEGER\r\n ? this.module.createI64(\r\n i64_low(element.constantIntegerValue),\r\n i64_high(element.constantIntegerValue)\r\n )\r\n : this.module.createI64(0);\r\n }\r\n case TypeKind.F64: {\r\n if (!(element.is(CommonFlags.BUILTIN) && contextualType == Type.f32)) {\r\n return this.module.createF64((element).constantFloatValue);\r\n }\r\n // otherwise fall-through: basically precomputes f32.demote/f64 of NaN / Infinity\r\n this.currentType = Type.f32;\r\n }\r\n case TypeKind.F32: {\r\n return this.module.createF32((element).constantFloatValue);\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n\r\n compileExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n this.currentType = contextualType;\r\n\r\n var expr: ExpressionRef;\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n expr = this.compileAssertionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.BINARY: {\r\n expr = this.compileBinaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.CALL: {\r\n expr = this.compileCallExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.COMMA: {\r\n expr = this.compileCommaExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n expr = this.compileElementAccessExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.FUNCTION: {\r\n expr = this.compileFunctionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.FALSE:\r\n case NodeKind.NULL:\r\n case NodeKind.THIS:\r\n case NodeKind.SUPER:\r\n case NodeKind.TRUE: {\r\n expr = this.compileIdentifierExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.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.precomputeExpressionRef(\r\n this.compileExpression(expression, contextualType, conversionKind, wrapMode)\r\n );\r\n }\r\n\r\n precomputeExpressionRef(expr: ExpressionRef): ExpressionRef {\r\n var module = this.module;\r\n var type = this.currentType;\r\n var nativeType = type.toNativeType();\r\n var funcRef = module.addTemporaryFunction(nativeType, null, expr);\r\n module.runPasses([ \"precompute\" ], funcRef);\r\n var ret = getFunctionBody(funcRef);\r\n module.removeTemporaryFunction();\r\n return ret;\r\n }\r\n\r\n convertExpression(\r\n expr: ExpressionRef,\r\n fromType: Type,\r\n toType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n assert(conversionKind != ConversionKind.NONE);\r\n var module = this.module;\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.VOID) {\r\n assert(toType.kind != TypeKind.VOID); // convertExpression should not be called with void -> void\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) 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 toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32,\r\n this.ensureSmallIntegerWrap(expr, fromType) // must clear garbage bits\r\n );\r\n wrapMode = WrapMode.NONE;\r\n\r\n // i32 to i32\r\n } else {\r\n // small i32 to ...\r\n if (fromType.is(TypeFlags.SHORT)) {\r\n // small i32 to larger i32\r\n if (fromType.size < toType.size) {\r\n expr = this.ensureSmallIntegerWrap(expr, fromType); // must clear garbage bits\r\n wrapMode = WrapMode.NONE;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.currentType = toType;\r\n return wrapMode == WrapMode.WRAP\r\n ? this.ensureSmallIntegerWrap(expr, toType)\r\n : expr;\r\n }\r\n\r\n compileAssertionExpression(expression: AssertionExpression, contextualType: Type): ExpressionRef {\r\n var toType = this.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.resolvedElementExpression) { // indexed access\r\n let isUnchecked = currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, (target).internalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (target).internalName\r\n );\r\n }\r\n return this.module.createUnreachable();\r\n }\r\n assert(indexedSet.signature.parameterTypes.length == 2); // parser must guarantee this\r\n 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.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let type = (target).type;\r\n this.currentType = tee ? type : Type.void;\r\n let nativeType = type.toNativeType();\r\n if (type.kind == TypeKind.BOOL) {\r\n // make sure bools are wrapped (usually are) when storing as 8 bits\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type);\r\n }\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let flow = currentFunction.flow;\r\n let tempLocal = currentFunction.getAndFreeTempLocal(\r\n type,\r\n !flow.canOverflow(valueWithCorrectType, type)\r\n );\r\n let tempLocalIndex = tempLocal.index;\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n return module.createBlock(null, [\r\n module.createSetLocal(tempLocalIndex, valueWithCorrectType),\r\n module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n module.createGetLocal(tempLocalIndex, nativeType),\r\n nativeType,\r\n (target).memoryOffset\r\n ),\r\n module.createGetLocal(tempLocalIndex, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n valueWithCorrectType,\r\n nativeType,\r\n (target).memoryOffset\r\n );\r\n }\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (target).setterPrototype;\r\n if (setterPrototype) {\r\n let setterInstance = 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.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n return this.makeCallDirect(setterInstance, [ thisExpr, valueWithCorrectType ]);\r\n } else {\r\n return this.makeCallDirect(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n\r\n // otherwise call the setter first, then the getter\r\n let getterPrototype = (target).getterPrototype;\r\n assert(getterPrototype != null); // must have one if there is a setter\r\n let getterInstance = 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.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(returnType, false);\r\n let tempLocalIndex = tempLocal.index;\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ // set and remember the target\r\n module.createTeeLocal(tempLocalIndex, thisExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [ // get from remembered target\r\n module.createGetLocal(tempLocalIndex, nativeReturnType)\r\n ])\r\n ], nativeReturnType);\r\n } else {\r\n // note that this must be performed here because `resolved` is shared\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCallDirect(getterInstance)\r\n ], nativeReturnType);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, target.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.resolver.resolvedElementExpression;\r\n if (elementExpression) {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, target.internalName\r\n );\r\n this.currentType = tee ? indexedGet.signature.returnType : Type.void;\r\n return module.createUnreachable();\r\n }\r\n let targetType = (target).type;\r\n let thisExpression = assert(this.resolver.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let elementExpr = this.compileExpression(\r\n elementExpression,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let tempLocalTarget = currentFunction.getTempLocal(targetType, false);\r\n let tempLocalElement = currentFunction.getAndFreeTempLocal(this.currentType, false);\r\n let returnType = indexedGet.signature.returnType;\r\n this.currentFunction.freeTempLocal(tempLocalTarget);\r\n return module.createBlock(null, [\r\n this.makeCallDirect(indexedSet, [\r\n module.createTeeLocal(tempLocalTarget.index, thisExpr),\r\n module.createTeeLocal(tempLocalElement.index, elementExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(indexedGet, [\r\n module.createGetLocal(tempLocalTarget.index, tempLocalTarget.type.toNativeType()),\r\n module.createGetLocal(tempLocalElement.index, tempLocalElement.type.toNativeType())\r\n ])\r\n ], returnType.toNativeType());\r\n } else {\r\n return this.makeCallDirect(indexedSet, [\r\n thisExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n }\r\n // fall-through\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var target = this.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.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return this.compileCallExpressionBuiltin(prototype, expression, contextualType);\r\n }\r\n\r\n let instance: Function | null = null;\r\n\r\n // resolve generic call if type arguments have been provided\r\n if (typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.expression.range, prototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n instance = 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.resolvedThisExpression),\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n return this.compileCallDirect(\r\n instance,\r\n expression.arguments,\r\n expression,\r\n thisExpr,\r\n instance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n // indirect call: index argument with signature (non-generic, can't be inlined)\r\n case ElementKind.LOCAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetLocal((target).index, NativeType.I32);\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetGlobal((target).internalName, (target).type.toNativeType());\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (signature = type.signatureReference) {\r\n let thisExpression = assert(this.resolver.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n indexArg = module.createLoad(\r\n 4,\r\n false,\r\n thisExpr,\r\n NativeType.I32,\r\n (target).memoryOffset\r\n );\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FUNCTION_TARGET: {\r\n signature = (target).signature;\r\n indexArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n break;\r\n }\r\n case ElementKind.PROPERTY: // TODO\r\n\r\n // not supported\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n return this.compileCallIndirect(\r\n signature,\r\n indexArg,\r\n expression.arguments,\r\n expression\r\n );\r\n }\r\n\r\n private compileCallExpressionBuiltin(\r\n prototype: FunctionPrototype,\r\n expression: CallExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var 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 return this.compileCallInlineUnchecked(instance, argumentExpressions, reportNode, thisArg);\r\n }\r\n\r\n // Otherwise compile to just a call\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallDirect(instance, operands);\r\n }\r\n\r\n // Depends on being pre-checked in compileCallDirect\r\n private compileCallInlineUnchecked(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n var declaration = instance.prototype.declaration;\r\n\r\n // Create an empty child flow with its own scope and mark it for inlining\r\n var previousFlow = currentFunction.flow;\r\n var returnLabel = instance.internalName + \"|inlined.\" + (instance.nextInlineId++).toString(10);\r\n var returnType = instance.signature.returnType;\r\n var flow = Flow.create(currentFunction);\r\n flow.set(FlowFlags.INLINE_CONTEXT);\r\n flow.returnLabel = returnLabel;\r\n flow.returnType = returnType;\r\n flow.contextualTypeArguments = instance.contextualTypeArguments;\r\n\r\n // Convert provided call arguments to temporary locals. It is important that these are compiled\r\n // here, with their respective locals being blocked. There is no 'makeCallInline'.\r\n var body = [];\r\n if (thisArg) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n if (getExpressionId(thisArg) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(thisArg),\r\n (parent).type,\r\n \"this\"\r\n );\r\n } else {\r\n let thisLocal = flow.addScopedLocal((parent).type, \"this\", false);\r\n body.push(\r\n module.createSetLocal(thisLocal.index, thisArg)\r\n );\r\n }\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i) {\r\n let paramExpr = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(paramExpr) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(paramExpr),\r\n parameterTypes[i],\r\n signature.getParameterName(i)\r\n );\r\n // inherits wrap status\r\n } else {\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(paramExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, paramExpr)\r\n );\r\n }\r\n }\r\n\r\n // Compile optional parameter initializers in the scope of the inlined flow\r\n currentFunction.flow = flow;\r\n var numParameters = signature.parameterTypes.length;\r\n for (let i = numArguments; i < numParameters; ++i) {\r\n let initExpr = this.compileExpression(\r\n assert(declaration.signature.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(\"oob\", [\r\n module.createSwitch(names, \"oob\",\r\n // condition is number of provided optional arguments, so subtract required arguments\r\n minArguments\r\n ? module.createBinary(\r\n BinaryOp.SubI32,\r\n module.createGetGlobal(\"~argc\", NativeType.I32),\r\n module.createI32(minArguments)\r\n )\r\n : module.createGetGlobal(\"~argc\", NativeType.I32)\r\n )\r\n ]),\r\n module.createUnreachable()\r\n ]);\r\n for (let i = 0; i < numOptional; ++i, ++operandIndex) {\r\n let type = originalParameterTypes[minArguments + i];\r\n 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 if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n let localType = (target).type;\r\n let localIndex = (target).index;\r\n assert(localIndex >= 0);\r\n this.currentType = localType;\r\n return this.module.createGetLocal(localIndex, localType.toNativeType());\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return this.module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum\r\n if (!target.is(CommonFlags.COMPILED)) {\r\n this.error(\r\n DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,\r\n expression.range\r\n );\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.module.createI32((target).constantValue);\r\n }\r\n return this.module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let instance = 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 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.compileStaticString((expression).value);\r\n }\r\n // case LiteralKind.OBJECT:\r\n // case LiteralKind.REGEXP:\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n\r\n compileStaticString(stringValue: string): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var stringSegments = this.stringSegments;\r\n\r\n var stringSegment: MemorySegment | null = stringSegments.get(stringValue);\r\n if (!stringSegment) {\r\n let stringLength = stringValue.length;\r\n let stringBuffer = new Uint8Array(4 + stringLength * 2);\r\n stringBuffer[0] = stringLength & 0xff;\r\n stringBuffer[1] = (stringLength >>> 8) & 0xff;\r\n stringBuffer[2] = (stringLength >>> 16) & 0xff;\r\n stringBuffer[3] = (stringLength >>> 24) & 0xff;\r\n for (let i = 0; i < stringLength; ++i) {\r\n stringBuffer[4 + i * 2] = stringValue.charCodeAt(i) & 0xff;\r\n stringBuffer[5 + i * 2] = (stringValue.charCodeAt(i) >>> 8) & 0xff;\r\n }\r\n stringSegment = this.addMemorySegment(stringBuffer, options.usizeType.byteSize);\r\n stringSegments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n var stringType = this.program.typesLookup.get(\"string\");\r\n this.currentType = stringType ? stringType : options.usizeType;\r\n if (options.isWasm64) {\r\n return module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n }\r\n assert(i64_is_i32(stringOffset));\r\n return module.createI32(i64_low(stringOffset));\r\n }\r\n\r\n compileArrayLiteral(elementType: Type, expressions: (Expression | null)[], reportNode: Node): ExpressionRef {\r\n var isStatic = true;\r\n var module = this.module;\r\n\r\n // obtain the array type\r\n var arrayPrototype = assert(this.program.arrayPrototype);\r\n if (!arrayPrototype || arrayPrototype.kind != ElementKind.CLASS_PROTOTYPE) return module.createUnreachable();\r\n var arrayInstance = this.resolver.resolveClass(arrayPrototype, [ elementType ]);\r\n if (!arrayInstance) return module.createUnreachable();\r\n var arrayType = arrayInstance.type;\r\n\r\n var elementCount = expressions.length;\r\n if (elementCount) { // non-empty static or dynamic\r\n let nativeElementType = elementType.toNativeType();\r\n let values: usize;\r\n let byteLength: usize;\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n values = changetype(new Int32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n values = changetype(new Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n values = changetype(new Float32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n values = changetype(new Float64Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // precompute value expressions\r\n let exprs = new Array(elementCount);\r\n let expr: BinaryenExpressionRef;\r\n for (let i = 0; i < elementCount; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : elementType.toNativeZero(module);\r\n if (isStatic) {\r\n expr = this.precomputeExpressionRef(exprs[i]);\r\n if (getExpressionId(expr) == ExpressionId.Const) {\r\n assert(getExpressionType(expr) == nativeElementType);\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n changetype(values)[i] = getConstValueI32(expr);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n changetype(values)[i] = i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n changetype(values)[i] = getConstValueF32(expr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n changetype(values)[i] = getConstValueF64(expr);\r\n break;\r\n }\r\n default: assert(false); // checked above\r\n }\r\n } else {\r\n // TODO: emit a warning if declared 'const'\r\n // if (isConst) {\r\n // this.warn(\r\n // DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n // reportNode.range\r\n // );\r\n // }\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n let usizeTypeSize = this.options.usizeType.byteSize;\r\n if (isStatic) { // non-empty, all elements can be precomputed\r\n\r\n // Create a combined static memory segment composed of:\r\n // Array struct + ArrayBuffer struct + aligned ArrayBuffer data\r\n\r\n let arraySize = usizeTypeSize + 4; // buffer_ & length_\r\n let bufferHeaderSize = (4 + 7) & ~7; // aligned byteLength (8)\r\n let bufferTotalSize = 1 << (32 - clz(byteLength + bufferHeaderSize - 1)); // see internals\r\n let data = new Uint8Array(arraySize + bufferTotalSize);\r\n let segment = this.addMemorySegment(data);\r\n let offset = 0;\r\n\r\n // write Array struct\r\n if (usizeTypeSize == 8) {\r\n writeI64(i64_add(segment.offset, i64_new(arraySize)), data, offset); // buffer_ @ segment[arSize]\r\n offset += 8;\r\n } else {\r\n assert(i64_high(segment.offset) == 0);\r\n writeI32(i64_low(segment.offset) + arraySize, data, offset); // buffer_ @ segment[arSize]\r\n offset += 4;\r\n }\r\n writeI32(elementCount, data, offset); // length_\r\n offset += 4;\r\n assert(offset == arraySize);\r\n\r\n // write ArrayBuffer struct\r\n writeI32(byteLength, data, offset);\r\n offset += bufferHeaderSize; // incl. alignment\r\n\r\n // write ArrayBuffer data\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.I64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n case NativeType.F32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.F64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n assert(offset <= arraySize + bufferTotalSize);\r\n\r\n this.currentType = arrayType;\r\n return usizeTypeSize == 8\r\n ? module.createI64(\r\n i64_low(segment.offset),\r\n i64_high(segment.offset)\r\n )\r\n : module.createI32(\r\n i64_low(segment.offset)\r\n );\r\n\r\n } else { // non-empty, some elements can't be precomputed\r\n\r\n this.currentType = arrayType;\r\n let setter = arrayInstance.lookupOverload(OperatorKind.INDEXED_SET, true);\r\n if (!setter) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n reportNode.range, arrayInstance.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let nativeArrayType = arrayType.toNativeType();\r\n let currentFunction = this.currentFunction;\r\n let tempLocal = currentFunction.getTempLocal(arrayType, false);\r\n let stmts = new Array(2 + elementCount);\r\n let index = 0;\r\n stmts[index++] = module.createSetLocal(tempLocal.index,\r\n this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(elementCount)\r\n ])\r\n );\r\n for (let i = 0; i < elementCount; ++i) {\r\n stmts[index++] = this.makeCallDirect(setter, [\r\n module.createGetLocal(tempLocal.index, nativeArrayType), // this\r\n module.createI32(i),\r\n exprs[i]\r\n ]);\r\n }\r\n assert(index + 1 == stmts.length);\r\n stmts[index] = module.createGetLocal(tempLocal.index, nativeArrayType);\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = arrayType;\r\n return module.createBlock(null, stmts, nativeArrayType);\r\n }\r\n\r\n } else { // empty, TBD: cache this somehow?\r\n this.currentType = arrayType;\r\n return this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(0)\r\n ]);\r\n }\r\n }\r\n\r\n compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var currentFunction = this.currentFunction;\r\n\r\n // obtain the class being instantiated\r\n var target = this.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 first matching constructor\r\n var currentClassInstance: Class | null = classInstance;\r\n var constructorInstance = classInstance.constructorInstance;\r\n while (!constructorInstance && (currentClassInstance = classInstance.base)) {\r\n constructorInstance = currentClassInstance.constructorInstance;\r\n }\r\n\r\n // if a constructor is present, call it with a zero `this`\r\n if (constructorInstance) {\r\n expr = this.compileCallDirect(constructorInstance, expression.arguments, expression,\r\n options.usizeType.toNativeZero(module)\r\n );\r\n\r\n // otherwise simply allocate a new instance and initialize its fields\r\n } else {\r\n expr = this.makeAllocate(classInstance, expression);\r\n }\r\n\r\n this.currentType = classInstance.type;\r\n return expr;\r\n }\r\n\r\n compileParenthesizedExpression(\r\n expression: ParenthesizedExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n // does not change types, just order\r\n return this.compileExpression(\r\n expression.expression,\r\n contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n /**\r\n * Compiles a property access in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compilePropertyAccessExpression(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var 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 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.resolvedThisExpression);\r\n assert((target).memoryOffset >= 0);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = (target).type;\r\n return module.createLoad(\r\n (target).type.byteSize,\r\n (target).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n thisExpr,\r\n (target).type.toNativeType(),\r\n (target).memoryOffset\r\n );\r\n }\r\n case ElementKind.PROPERTY: { // instance property (here: getter)\r\n let prototype = (target).getterPrototype;\r\n if (prototype) {\r\n let instance = this.resolver.resolveFunction(prototype, null);\r\n if (!instance) return module.createUnreachable();\r\n let signature = instance.signature;\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n 0,\r\n instance.is(CommonFlags.INSTANCE),\r\n propertyAccess\r\n )) {\r\n return module.createUnreachable();\r\n }\r\n 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.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess, thisExpr, inline);\r\n } else {\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess, 0, inline);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.range, (target).simpleName, (target).parent.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n propertyAccess.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileTernaryExpression(expression: TernaryExpression, contextualType: Type): ExpressionRef {\r\n var ifThen = expression.ifThen;\r\n var ifElse = expression.ifElse;\r\n var currentFunction = this.currentFunction;\r\n 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.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE)\r\n : this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n var 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 compileBuiltinAllocate(this, classInstance, reportNode)\r\n )\r\n );\r\n\r\n // apply field initializers\r\n if (classInstance.members) {\r\n for (let member of classInstance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n let field = member;\r\n let fieldType = field.type;\r\n let nativeFieldType = fieldType.toNativeType();\r\n let fieldDeclaration = field.prototype.declaration;\r\n assert(!field.isAny(CommonFlags.CONST));\r\n if (fieldDeclaration.initializer) { // use initializer\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n this.compileExpression( // reports\r\n fieldDeclaration.initializer,\r\n fieldType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n ),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n } else { // initialize with zero\r\n // TODO: might be unnecessary if the ctor initializes the field\r\n let parameterIndex = (field.prototype.declaration).parameterIndex;\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n parameterIndex >= 0 // initialized via parameter\r\n ? module.createGetLocal(1 + parameterIndex, nativeFieldType)\r\n : fieldType.toNativeZero(module),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // return `this`\r\n initializers.push(\r\n module.createGetLocal(tempLocal.index, nativeSizeType)\r\n );\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = classInstance.type;\r\n return module.createBlock(null, initializers, nativeSizeType);\r\n }\r\n\r\n /** Makes a conditional allocation expression inside of the constructor of the specified class. */\r\n makeConditionalAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n // requires that `this` is the first local\r\n var module = this.module;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n this.currentType = classInstance.type;\r\n return module.createIf(\r\n nativeSizeType == NativeType.I64\r\n ? module.createBinary(\r\n BinaryOp.NeI64,\r\n module.createGetLocal(0, NativeType.I64),\r\n module.createI64(0)\r\n )\r\n : module.createGetLocal(0, NativeType.I32),\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createTeeLocal(0,\r\n this.makeAllocate(classInstance, reportNode)\r\n )\r\n );\r\n }\r\n\r\n /** Adds the debug location of the specified expression at the specified range to the source map. */\r\n addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n var currentFunction = this.currentFunction;\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n range.debugInfoRef = expr;\r\n currentFunction.debugLocations.push(range);\r\n }\r\n}\r\n\r\n// helpers\r\n\r\nfunction mangleExportName(element: Element, simpleName: string = element.simpleName): string {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION: {\r\n let parent = (element).parent || (element).prototype.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName\r\n : simpleName;\r\n }\r\n case ElementKind.FIELD: {\r\n let parent = assert((element).parent);\r\n return mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName;\r\n }\r\n case ElementKind.ENUMVALUE: {\r\n let parent = assert((element).parent);\r\n return mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName;\r\n }\r\n case ElementKind.CLASS: {\r\n let parent = (element).prototype.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + STATIC_DELIMITER\r\n + simpleName\r\n : simpleName;\r\n }\r\n default: {\r\n let parent = element.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + STATIC_DELIMITER\r\n + simpleName\r\n : simpleName;\r\n }\r\n }\r\n}\r\n\r\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 * 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\nconst builtinsFile = LIBRARY_PREFIX + \"builtins.ts\";\r\n\r\n/** Parser interface. */\r\nexport class Parser extends DiagnosticEmitter {\r\n\r\n /** Program being created. */\r\n program: Program;\r\n /** 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 // mark the special builtins library file\r\n if (source.normalizedPath == builtinsFile) {\r\n source.set(CommonFlags.BUILTIN);\r\n }\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, program.diagnostics);\r\n tn.onComment = this.onComment;\r\n source.tokenizer = tn;\r\n var statements = source.statements;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n let statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n statements.push(statement);\r\n }\r\n }\r\n tn.finish();\r\n }\r\n\r\n /** Parses a top-level statement. */\r\n parseTopLevelStatement(\r\n tn: Tokenizer,\r\n namespace: Node | null = null\r\n ): Statement | null {\r\n var flags = CommonFlags.NONE;\r\n var startPos: i32 = -1;\r\n\r\n // check decorators\r\n var decorators: DecoratorNode[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) {\r\n this.skipStatement(tn);\r\n continue;\r\n }\r\n if (!decorators) decorators = [];\r\n decorators.push(decorator);\r\n }\r\n\r\n // mark builtins\r\n flags |= (tn.source.flags & CommonFlags.BUILTIN);\r\n\r\n // check modifiers\r\n var exportStart: i32 = 0;\r\n var exportEnd: i32 = 0;\r\n if (tn.skip(Token.EXPORT)) {\r\n if (tn.skip(Token.DEFAULT)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n flags |= CommonFlags.EXPORT;\r\n exportStart = tn.tokenPos;\r\n exportEnd = tn.pos;\r\n }\r\n\r\n var declareStart: i32 = 0;\r\n var declareEnd: i32 = 0;\r\n var contextIsAmbient = namespace != null && namespace.is(CommonFlags.AMBIENT);\r\n if (tn.skip(Token.DECLARE)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n if (contextIsAmbient) {\r\n this.error(\r\n DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n flags |= CommonFlags.DECLARE | CommonFlags.AMBIENT;\r\n } else if (contextIsAmbient) {\r\n flags |= CommonFlags.AMBIENT;\r\n }\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n\r\n // handle declarations\r\n var first = tn.peek();\r\n if (startPos < 0) startPos = tn.nextTokenPos;\r\n switch (first) {\r\n case Token.CONST: {\r\n tn.next();\r\n flags |= CommonFlags.CONST;\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n break;\r\n } else {\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n }\r\n break;\r\n }\r\n case Token.LET: flags |= CommonFlags.LET;\r\n case Token.VAR: {\r\n tn.next();\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ENUM: {\r\n tn.next();\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.FUNCTION: {\r\n tn.next();\r\n statement = this.parseFunction(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ABSTRACT: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (!tn.skip(Token.CLASS)) {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n break;\r\n } else {\r\n tn.discard(state);\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n // fall through\r\n }\r\n case Token.CLASS:\r\n case Token.INTERFACE: {\r\n tn.next();\r\n statement = this.parseClassOrInterface(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.NAMESPACE: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n case Token.IMPORT: {\r\n tn.next();\r\n flags |= CommonFlags.IMPORT;\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExportImport(tn, startPos);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n default: {\r\n\r\n // handle plain exports\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExport(tn, flags, startPos);\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (exportEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(exportStart, exportEnd), \"export\"\r\n ); // recoverable\r\n }\r\n if (declareEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(declareStart, declareEnd), \"declare\"\r\n ); // recoverable\r\n }\r\n if (!namespace) {\r\n statement = this.parseStatement(tn, true);\r\n } // TODO: else?\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorators[i].range\r\n );\r\n }\r\n }\r\n return statement;\r\n }\r\n\r\n /** Obtains the next file to parse. */\r\n nextFile(): string | null {\r\n var backlog = this.backlog;\r\n return backlog.length ? backlog.shift() : null;\r\n }\r\n\r\n /** Finishes parsing and returns the program. */\r\n finish(): Program {\r\n if (this.backlog.length) throw new Error(\"backlog is not empty\");\r\n this.backlog = [];\r\n this.seenlog.clear();\r\n 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 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 // 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 this.error(\r\n DiagnosticCode.Expression_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): CommonTypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n var state = tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n if (tn.peek() === Token.GREATERTHAN) {\r\n break;\r\n }\r\n let type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset(state);\r\n return null;\r\n }\r\n typeArguments.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n if (tn.skip(Token.GREATERTHAN) && tn.skip(Token.OPENPAREN)) {\r\n return typeArguments;\r\n }\r\n tn.reset(state);\r\n return null;\r\n }\r\n\r\n parseArguments(\r\n tn: Tokenizer\r\n ): Expression[] | null {\r\n\r\n // at '(': (Expression (',' Expression)*)? ')'\r\n\r\n var args = new Array();\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return args;\r\n }\r\n\r\n parseExpression(\r\n tn: Tokenizer,\r\n precedence: Precedence = 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","/**\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 element of this.program.moduleLevelExports.values()) this.visitElement(element);\r\n var todo = this.todo;\r\n for (let i = 0; i < todo.length; ) this.visitElement(todo[i]);\r\n }\r\n\r\n /** Visits an element.*/\r\n visitElement(element: Element): void {\r\n if (element.is(CommonFlags.PRIVATE) && !this.includePrivate) return;\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitGlobal(element);\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.visitFunctionInstances(element);\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n this.visitClassInstances(element);\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n if ((element).is(CommonFlags.COMPILED)) this.visitField(element);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prop = element;\r\n let getter = prop.getterPrototype;\r\n if (getter) this.visitFunctionInstances(getter);\r\n let setter = prop.setterPrototype;\r\n if (setter) this.visitFunctionInstances(setter);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n if (hasCompiledMember(element)) this.visitNamespace(element);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n\r\n private visitFunctionInstances(element: FunctionPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitFunction(instance);\r\n }\r\n }\r\n\r\n private visitClassInstances(element: ClassPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitClass(instance);\r\n }\r\n }\r\n\r\n abstract visitGlobal(element: Global): void;\r\n abstract visitEnum(element: Enum): void;\r\n abstract visitFunction(element: Function): void;\r\n abstract visitClass(element: Class): void;\r\n abstract visitInterface(element: Interface): void;\r\n abstract visitField(element: Field): void;\r\n abstract visitNamespace(element: Element): void;\r\n}\r\n\r\n/** A WebIDL definitions builder. */\r\nexport class IDLBuilder extends ExportsWalker {\r\n\r\n /** Builds WebIDL definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new IDLBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n if (isConst) {\r\n switch (element.constantValueKind) {\r\n case ConstantValueKind.INTEGER: {\r\n sb.push(\" = \");\r\n sb.push(i64_to_string(element.constantIntegerValue));\r\n break;\r\n }\r\n case ConstantValueKind.FLOAT: {\r\n sb.push(\" = \");\r\n sb.push(element.constantFloatValue.toString());\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n let isConst = (member).is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"readonly \");\r\n sb.push(\"unsigned long \");\r\n sb.push(name);\r\n if (isConst) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n }\r\n for (let member of members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) this.visitElement(member);\r\n }\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(this.typeToString(parameters[i]));\r\n sb.push(\" \");\r\n sb.push(signature.getParameterName(i));\r\n }\r\n sb.push(\");\\n\");\r\n var members = element.members;\r\n if (members && members.size) {\r\n indent(sb, this.indentLevel);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n // TODO\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n // TODO\r\n }\r\n\r\n visitNamespace(element: Namespace): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"byte\";\r\n case TypeKind.I16: return \"short\";\r\n case TypeKind.I32: return \"long\";\r\n case TypeKind.I64: return \"long long\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"long long\" : \"long\";\r\n case TypeKind.U8: return \"octet\";\r\n case TypeKind.U16: return \"unsigned short\";\r\n case TypeKind.U32: return \"unsigned long\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"unsigned long long\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"unsigned long long\" : \"unsigned long\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"boolean\";\r\n case TypeKind.F32: return \"unrestricted float\";\r\n case TypeKind.F64: return \"unrestricted double\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"interface ASModule {\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n/** A TypeScript definitions builder. */\r\nexport class TSDBuilder extends ExportsWalker {\r\n\r\n /** Builds TypeScript definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new TSDBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.STATIC)) {\r\n if (isConst) sb.push(\"static readonly \");\r\n else sb.push(\"static \");\r\n } else {\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"var \");\r\n }\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"enum \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n let numMembers = members.size;\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n indent(sb, this.indentLevel);\r\n sb.push(name);\r\n if (member.is(CommonFlags.INLINED)) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\",\\n\");\r\n --numMembers;\r\n }\r\n }\r\n if (numMembers) this.visitNamespace(element);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n if (element.isAny(CommonFlags.PRIVATE | CommonFlags.SET)) return;\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.GET)) {\r\n sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally\r\n sb.push(\": \");\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\";\\n\");\r\n return;\r\n } else {\r\n if (!element.isAny(CommonFlags.STATIC | CommonFlags.INSTANCE)) sb.push(\"function \");\r\n sb.push(element.simpleName);\r\n }\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(signature.getParameterName(i));\r\n sb.push(\": \");\r\n sb.push(this.typeToString(parameters[i]));\r\n }\r\n if (element.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.SET)) {\r\n sb.push(\")\");\r\n } else {\r\n sb.push(\"): \");\r\n sb.push(this.typeToString(signature.returnType));\r\n }\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n var isInterface = element.kind == ElementKind.INTERFACE;\r\n indent(sb, this.indentLevel++);\r\n if (isInterface) {\r\n sb.push(\"interface \");\r\n } else {\r\n if (element.is(CommonFlags.ABSTRACT)) sb.push(\"abstract \");\r\n sb.push(\"class \");\r\n }\r\n sb.push(element.simpleName);\r\n var base = element.base;\r\n if (base && base.is(CommonFlags.COMPILED | CommonFlags.MODULE_EXPORT)) {\r\n sb.push(\" extends \");\r\n sb.push(base.simpleName); // TODO: fqn\r\n }\r\n sb.push(\" {\\n\");\r\n var members = element.prototype.members; // static\r\n if (members) {\r\n for (let member of members.values()) {\r\n this.visitElement(member);\r\n }\r\n }\r\n var ctor = element.constructorInstance;\r\n if (ctor) this.visitFunction(ctor);\r\n members = element.members; // instance\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n if (element.is(CommonFlags.PRIVATE)) return;\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.READONLY)) sb.push(\"readonly \");\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitNamespace(element: Element): void {\r\n var members = element.members;\r\n if (members && members.size) {\r\n let sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"namespace \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"I64\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"I64\" : \"i32\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"U64\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"U64\" : \"u32\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"declare module ASModule {\\n\");\r\n sb.push(\" type i8 = number;\\n\");\r\n sb.push(\" type i16 = number;\\n\");\r\n sb.push(\" type i32 = number;\\n\");\r\n sb.push(\" type u8 = number;\\n\");\r\n sb.push(\" type u16 = number;\\n\");\r\n sb.push(\" type u32 = number;\\n\");\r\n sb.push(\" type f32 = number;\\n\");\r\n sb.push(\" type f64 = number;\\n\");\r\n sb.push(\" type bool = any;\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n sb.push(\"export default ASModule;\\n\");\r\n return this.sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n/** Tests if a namespace-like element has at least one compiled member. */\r\nfunction hasCompiledMember(element: Element): bool {\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (member.is(CommonFlags.COMPILED) || hasCompiledMember(member)) return true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n","/**\r\n * A decompiler that generates low-level AssemblyScript from WebAssembly binaries.\r\n * @module decompiler\r\n *//***/\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n ExpressionId,\r\n UnaryOp,\r\n BinaryOp,\r\n HostOp,\r\n FunctionRef,\r\n ExpressionRef,\r\n Index,\r\n getFunctionName,\r\n getFunctionBody,\r\n getFunctionParamCount,\r\n getFunctionParamType,\r\n getFunctionResultType,\r\n getExpressionId,\r\n getExpressionType,\r\n getBlockName,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getIfCondition,\r\n getIfTrue,\r\n getIfFalse,\r\n getLoopName,\r\n getLoopBody,\r\n getBreakName,\r\n getBreakCondition,\r\n getGetLocalIndex,\r\n getSetLocalIndex,\r\n getSetLocalValue,\r\n getLoadOffset,\r\n getLoadPtr,\r\n getStoreOffset,\r\n getStorePtr,\r\n getStoreValue,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getUnaryOp,\r\n getUnaryValue,\r\n getBinaryOp,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getSelectThen,\r\n getSelectElse,\r\n getSelectCondition,\r\n getDropValue,\r\n getReturnValue,\r\n getHostOp,\r\n getHostOperand\r\n} from \"./module\";\r\n\r\n// TODO :-)\r\n\r\nexport class Decompiler {\r\n\r\n static decompile(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n }\r\n\r\n text: string[] = [];\r\n functionId: i32 = 0;\r\n\r\n constructor() { }\r\n\r\n /** Decompiles a module to an AST that can then be serialized. */\r\n decompile(module: Module): void {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n decompileFunction(func: FunctionRef): void {\r\n var name = getFunctionName(func) || \"$\" + this.functionId.toString(10);\r\n var body = getFunctionBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (let i: Index = 0, k: Index = getFunctionParamCount(func); i < k; ++i) {\r\n if (i > 0) this.push(\", \");\r\n this.push(\"$\");\r\n this.push(i.toString(10));\r\n this.push(\": \");\r\n this.push(nativeTypeToType(getFunctionParamType(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(getFunctionResultType(func)));\r\n this.push(\" \");\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"\\n}\\n\");\r\n }\r\n ++this.functionId;\r\n }\r\n\r\n decompileExpression(expr: ExpressionRef): void {\r\n var id = getExpressionId(expr);\r\n var type = getExpressionType(expr);\r\n\r\n var nested: ExpressionRef;\r\n var string: string | null;\r\n var i: Index, k: Index;\r\n\r\n switch (id) {\r\n case ExpressionId.Block: { // TODO: magic\r\n if ((string = getBlockName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = getBlockChildCount(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(getBlockChild(expr, i));\r\n }\r\n this.push(\"}\\n\");\r\n return;\r\n }\r\n case ExpressionId.If: {\r\n if (type == NativeType.None) {\r\n this.push(\"if (\");\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(getIfTrue(expr));\r\n if (nested = getIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(getIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(getIfFalse(expr));\r\n }\r\n return;\r\n }\r\n case ExpressionId.Loop: {\r\n if ((string = getLoopName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(getLoopBody(expr));\r\n this.push(\"while (0);\\n\");\r\n }\r\n case ExpressionId.Break: {\r\n if (nested = getBreakCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = getBreakName(expr)) != null) {\r\n this.push(\"break \");\r\n this.push(string);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"break;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Switch:\r\n case ExpressionId.Call:\r\n case ExpressionId.CallImport:\r\n case ExpressionId.CallIndirect: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.GetLocal: {\r\n this.push(\"$\");\r\n this.push(getGetLocalIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(getSetLocalIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(getSetLocalValue(expr));\r\n return;\r\n }\r\n case ExpressionId.GetGlobal:\r\n case ExpressionId.SetGlobal: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.Load: {\r\n this.push(\"load<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getLoadOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getLoadPtr(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Store: {\r\n this.push(\"store<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getStoreOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getStorePtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getStoreValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Const: {\r\n switch (type) {\r\n case NativeType.I32: {\r\n this.push(getConstValueI32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.I64: {\r\n this.push(\r\n i64_to_string(\r\n i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(getConstValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(getConstValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NegF32:\r\n case UnaryOp.NegF64: {\r\n this.push(\"-\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: {\r\n this.push(\"!\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Binary: { // TODO: precedence\r\n switch (getBinaryOp(expr)) {\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.SubI32:\r\n case BinaryOp.SubI64:\r\n case BinaryOp.SubF32:\r\n case BinaryOp.SubF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.MulI32:\r\n case BinaryOp.MulI64:\r\n case BinaryOp.MulF32:\r\n case BinaryOp.MulF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivI32:\r\n case BinaryOp.DivI64:\r\n case BinaryOp.DivF32:\r\n case BinaryOp.DivF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n case ExpressionId.Select: {\r\n this.push(\"select<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.decompileExpression(getSelectThen(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectElse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(getDropValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = getReturnValue(expr)) {\r\n this.push(\"return \");\r\n this.decompileExpression(nested);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"return;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Host: {\r\n switch (getHostOp(expr)) {\r\n case HostOp.CurrentMemory: {\r\n this.push(\"current_memory()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"grow_memory(\");\r\n this.decompileExpression(getHostOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Nop: {\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Unreachable: {\r\n this.push(\"unreachable()\");\r\n return;\r\n }\r\n case ExpressionId.AtomicCmpxchg:\r\n case ExpressionId.AtomicRMW:\r\n case ExpressionId.AtomicWait:\r\n case ExpressionId.AtomicWake:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n private push(text: string): void {\r\n // mostly here so we can add debugging if necessary\r\n this.text.push(text);\r\n }\r\n\r\n finish(): string {\r\n var ret = this.text.join(\"\");\r\n this.text = [];\r\n return ret;\r\n }\r\n}\r\n\r\nfunction nativeTypeToType(type: NativeType): string {\r\n switch (type) {\r\n case NativeType.None: return \"void\";\r\n case NativeType.I32: return \"i32\";\r\n case NativeType.I64: return \"i64\";\r\n case NativeType.F32: return \"f32\";\r\n case NativeType.F64: return \"f64\";\r\n case NativeType.Unreachable: throw new Error(\"unreachable type\");\r\n case NativeType.Auto: throw new Error(\"auto type\");\r\n default: throw new Error(\"unexpected type\");\r\n }\r\n}\r\n","/**\r\n * Low-level C-like compiler API.\r\n * @module index\r\n *//***/\r\n\r\nimport {\r\n Compiler,\r\n Options,\r\n Target,\r\n Feature\r\n} from \"./compiler\";\r\n\r\nimport {\r\n Decompiler\r\n} from \"./decompiler\";\r\n\r\nimport {\r\n IDLBuilder,\r\n TSDBuilder\r\n} from \"./definitions\";\r\n\r\nimport {\r\n DiagnosticMessage,\r\n DiagnosticCategory,\r\n formatDiagnosticMessage\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module\r\n} from \"./module\";\r\n\r\nimport {\r\n Parser\r\n} from \"./parser\";\r\n\r\nimport {\r\n Program\r\n} 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","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n","const Long = global.Long || require(\"long\");\r\n\r\nglobal.i64_zero = Long.ZERO;\r\n\r\nglobal.i64_one = Long.ONE;\r\n\r\nglobal.i64_new = function(lo, hi) {\r\n return Long.fromBits(lo, hi);\r\n};\r\n\r\nglobal.i64_low = function(value) {\r\n return value.low;\r\n};\r\n\r\nglobal.i64_high = function(value) {\r\n return value.high;\r\n};\r\n\r\nglobal.i64_add = function(left, right) {\r\n return left.add(right);\r\n};\r\n\r\nglobal.i64_sub = function(left, right) {\r\n return left.sub(right);\r\n};\r\n\r\nglobal.i64_mul = function(left, right) {\r\n return left.mul(right);\r\n};\r\n\r\nglobal.i64_div = function(left, right) {\r\n return left.div(right);\r\n};\r\n\r\nglobal.i64_div_u = function(left, right) {\r\n return left.toUnsigned().div(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_rem = function(left, right) {\r\n return left.mod(right);\r\n};\r\n\r\nglobal.i64_rem_u = function(left, right) {\r\n return left.toUnsigned().mod(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_and = function(left, right) {\r\n return left.and(right);\r\n};\r\n\r\nglobal.i64_or = function(left, right) {\r\n return left.or(right);\r\n};\r\n\r\nglobal.i64_xor = function(left, right) {\r\n return left.xor(right);\r\n};\r\n\r\nglobal.i64_shl = function(left, right) {\r\n return left.shl(right);\r\n};\r\n\r\nglobal.i64_shr = function(left, right) {\r\n return left.shr(right);\r\n};\r\n\r\nglobal.i64_shr_u = function(left, right) {\r\n return left.shru(right);\r\n};\r\n\r\nglobal.i64_not = function(value) {\r\n return value.not();\r\n};\r\n\r\nglobal.i64_eq = function(left, right) {\r\n return left.eq(right);\r\n};\r\n\r\nglobal.i64_ne = function(left, right) {\r\n return left.ne(right);\r\n};\r\n\r\nglobal.i64_align = function(value, alignment) {\r\n assert(alignment && (alignment & (alignment - 1)) == 0);\r\n var mask = Long.fromInt(alignment - 1);\r\n return value.add(mask).and(mask.not());\r\n};\r\n\r\nglobal.i64_is_i8 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i8.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i8.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i16 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i16.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i16.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i32 = function(value) {\r\n return (value.high === 0 && value.low >= 0)\r\n || (value.high === -1 && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_u8 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u8.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u16 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u16.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u32 = function(value) {\r\n return value.high === 0;\r\n};\r\n\r\nglobal.i64_is_bool = function(value) {\r\n return value.high === 0 && (value.low === 0 || value.low === 1);\r\n};\r\n\r\nconst minSafeF32 = Long.fromNumber(f32.MIN_SAFE_INTEGER);\r\nconst maxSafeF32 = Long.fromNumber(f32.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f32 = function(value) {\r\n return value.gte(minSafeF32) && value.lte(maxSafeF32);\r\n};\r\n\r\nconst minSafeF64 = Long.fromNumber(f64.MIN_SAFE_INTEGER);\r\nconst maxSafeF64 = Long.fromNumber(f64.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f64 = function(value) {\r\n return value.gte(minSafeF64) && value.lte(maxSafeF64);\r\n};\r\n\r\nglobal.i64_to_f32 = function(value) {\r\n return global.Math.fround(value.toNumber());\r\n};\r\n\r\nglobal.i64_to_f64 = function(value) {\r\n return value.toNumber();\r\n};\r\n\r\nglobal.i64_to_string = function(value, unsigned) {\r\n return (unsigned ? value.toUnsigned() : value).toString(10);\r\n};\r\n","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","/**\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\nenum 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 /** Target expression of the previously resolved property or element access. */\r\n resolvedThisExpression: Expression | null = null;\r\n /** Element expression of the previously resolved element access. */\r\n resolvedElementExpression : Expression | null = null;\r\n\r\n /** Constructs 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.resolvedThisExpression = null;\r\n this.resolvedElementExpression = 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.resolvedThisExpression = null;\r\n this.resolvedElementExpression = 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.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n // search global scope\r\n if (element = elementsLookup.get(name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n 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 classReference = (target).type.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, (target).type.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = 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.resolvedElementExpression;\r\n if (elementExpression) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementExpression.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (!(target = returnType.classReference)) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, returnType.toString()\r\n );\r\n return null;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // Look up the member within\r\n switch (target.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n case ElementKind.CLASS: {\r\n do {\r\n let members = target.members;\r\n let member: Element | null;\r\n if (members && (member = members.get(propertyName))) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = null;\r\n return member; // instance FIELD, static GLOBAL, FUNCTION_PROTOTYPE...\r\n }\r\n // traverse inherited static members on the base prototype if target is a class prototype\r\n if (target.kind == ElementKind.CLASS_PROTOTYPE) {\r\n if ((target).basePrototype) {\r\n target = (target).basePrototype;\r\n } else {\r\n break;\r\n }\r\n // traverse inherited instance members on the base class if target is a class instance\r\n } else if (target.kind == ElementKind.CLASS) {\r\n if ((target).base) {\r\n target = (target).base;\r\n } else {\r\n break;\r\n }\r\n } else {\r\n break;\r\n }\r\n } while (true);\r\n break;\r\n }\r\n default: { // enums or other namespace-like elements\r\n let members = target.members;\r\n if (members) {\r\n let member = members.get(propertyName);\r\n if (member) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = null;\r\n return member; // static ENUMVALUE, static GLOBAL, static FUNCTION_PROTOTYPE...\r\n }\r\n }\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.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS: { // element access on element access\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n 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.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = 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.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return classType;\r\n }\r\n }\r\n return null;\r\n }\r\n case NodeKind.BINARY: { // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n }\r\n case NodeKind.THIS: { // -> Class / ClassPrototype\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"this\");\r\n if (explicitLocal) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return parent;\r\n }\r\n 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.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent && parent.kind == ElementKind.CLASS && (parent = (parent).base)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return parent;\r\n }\r\n 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.resolvedThisExpression = expression;\r\n this.resolvedElementExpression = 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","/** @module util *//***/\r\n\r\n/** Reads a 32-bit integer from the specified buffer. */\r\nexport function readI32(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset ]\r\n | buffer[offset + 1] << 8\r\n | buffer[offset + 2] << 16\r\n | buffer[offset + 3] << 24;\r\n}\r\n\r\n/** Writes a 32-bit integer to the specified buffer. */\r\nexport function writeI32(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset ] = value;\r\n buffer[offset + 1] = value >>> 8;\r\n buffer[offset + 2] = value >>> 16;\r\n buffer[offset + 3] = value >>> 24;\r\n}\r\n\r\n/** Reads a 64-bit integer from the specified buffer. */\r\nexport function readI64(buffer: Uint8Array, offset: i32): I64 {\r\n var lo = readI32(buffer, offset);\r\n var hi = readI32(buffer, offset + 4);\r\n return i64_new(lo, hi);\r\n}\r\n\r\n/** Writes a 64-bit integer to the specified buffer. */\r\nexport function writeI64(value: I64, buffer: Uint8Array, offset: i32): void {\r\n writeI32(i64_low(value), buffer, offset);\r\n writeI32(i64_high(value), buffer, offset + 4);\r\n}\r\n\r\n/** Reads a 32-bit float from the specified buffer. */\r\nexport function readF32(buffer: Uint8Array, offset: i32): f32 {\r\n return i32_as_f32(readI32(buffer, offset));\r\n}\r\n\r\n/** Writes a 32-bit float to the specified buffer. */\r\nexport function writeF32(value: f32, buffer: Uint8Array, offset: i32): void {\r\n writeI32(f32_as_i32(value), buffer, offset);\r\n}\r\n\r\n/** Reads a 64-bit float from the specified buffer. */\r\nexport function readF64(buffer: Uint8Array, offset: i32): f64 {\r\n return i64_as_f64(readI64(buffer, offset));\r\n}\r\n\r\n/** Writes a 64-bit float to the specified buffer. */\r\nexport function writeF64(value: f64, buffer: Uint8Array, offset: i32): void {\r\n var valueI64 = f64_as_i64(value);\r\n writeI32(i64_low(valueI64), buffer, offset);\r\n writeI32(i64_high(valueI64), buffer, offset + 4);\r\n}\r\n","/** @module util *//***/\r\n\r\nconst indentX1 = \" \";\r\nconst indentX2 = \" \";\r\nconst indentX4 = \" \";\r\n\r\n/** Creates an indentation matching the number of specified levels. */\r\nexport function indent(sb: string[], level: i32): void {\r\n while (level >= 4) {\r\n sb.push(indentX4);\r\n level -= 4;\r\n }\r\n if (level >= 2) {\r\n sb.push(indentX2);\r\n level -= 2;\r\n }\r\n if (level) {\r\n sb.push(indentX1);\r\n }\r\n}\r\n","/** @module util *//***/\r\n\r\nimport {\r\n CharCode\r\n} from \"./charcode\";\r\n\r\nconst separator = CharCode.SLASH;\r\n\r\n/**\r\n * Normalizes the specified path, removing interior placeholders.\r\n * Expects a posix-compatible relative path (not Windows compatible).\r\n */\r\nexport function normalizePath(path: string): string {\r\n var pos = 0;\r\n var len = path.length;\r\n\r\n // trim leading './'\r\n while (pos + 1 < len &&\r\n path.charCodeAt(pos) == CharCode.DOT &&\r\n path.charCodeAt(pos + 1) == separator\r\n ) {\r\n pos += 2;\r\n }\r\n\r\n if (pos > 0 || len < path.length) {\r\n path = path.substring(pos, len);\r\n len -= pos;\r\n pos = 0;\r\n }\r\n\r\n var atEnd: bool;\r\n while (pos + 1 < len) {\r\n atEnd = false;\r\n\r\n // we are only interested in '/.' sequences ...\r\n if (\r\n path.charCodeAt(pos) == separator &&\r\n path.charCodeAt(pos + 1) == CharCode.DOT\r\n ) {\r\n // '/.' ( '/' | $ )\r\n atEnd = pos + 2 == len;\r\n if (atEnd ||\r\n pos + 2 < len &&\r\n path.charCodeAt(pos + 2) == separator\r\n ) {\r\n path = atEnd\r\n ? path.substring(0, pos)\r\n : path.substring(0, pos) + path.substring(pos + 2);\r\n len -= 2;\r\n continue;\r\n }\r\n\r\n // '/.' ( './' | '.' $ )\r\n atEnd = pos + 3 == len;\r\n if (atEnd && path.charCodeAt(pos + 2) == CharCode.DOT ||\r\n pos + 3 < len &&\r\n path.charCodeAt(pos + 2) == CharCode.DOT &&\r\n path.charCodeAt(pos + 3) == separator\r\n ) {\r\n // find preceeding '/'\r\n let ipos = pos;\r\n while (--ipos >= 0) {\r\n if (path.charCodeAt(ipos) == separator) {\r\n if (pos - ipos != 3 ||\r\n path.charCodeAt(ipos + 1) != CharCode.DOT ||\r\n path.charCodeAt(ipos + 2) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = atEnd\r\n ? path.substring(0, ipos)\r\n : path.substring(0, ipos) + path.substring(pos + 3);\r\n len -= pos + 3 - ipos;\r\n pos = ipos - 1; // incremented again at end of loop\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // if there's no preceeding '/', trim start if non-empty\r\n if (ipos < 0 && pos > 0) {\r\n if (pos != 2 ||\r\n path.charCodeAt(0) != CharCode.DOT ||\r\n path.charCodeAt(1) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = path.substring(pos + 4);\r\n len = path.length;\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n pos++;\r\n }\r\n return len > 0 ? path : \".\";\r\n}\r\n\r\n/** Resolves the specified path relative to the specified origin. */\r\nexport function resolvePath(normalizedPath: string, origin: string): string {\r\n if (normalizedPath.startsWith(\"std/\")) {\r\n return normalizedPath;\r\n }\r\n return normalizePath(\r\n dirname(origin) + String.fromCharCode(separator) + normalizedPath\r\n );\r\n}\r\n\r\n/** Obtains the directory portion of a normalized path. */\r\nexport function dirname(normalizedPath: string): string {\r\n var pos = normalizedPath.length;\r\n while (--pos > 0) {\r\n if (normalizedPath.charCodeAt(pos) == separator) {\r\n return normalizedPath.substring(0, pos);\r\n }\r\n }\r\n return \".\";\r\n}\r\n","/** @module util *//***/\r\n\r\n/** An enum of named character codes. */\r\nexport const enum CharCode {\r\n\r\n NULL = 0,\r\n LINEFEED = 0x0A,\r\n CARRIAGERETURN = 0x0D,\r\n LINESEPARATOR = 0x2028,\r\n PARAGRAPHSEPARATOR = 0x2029,\r\n NEXTLINE = 0x0085,\r\n\r\n SPACE = 0x20,\r\n NONBREAKINGSPACE = 0xA0,\r\n ENQUAD = 0x2000,\r\n EMQUAD = 0x2001,\r\n ENSPACE = 0x2002,\r\n EMSPACE = 0x2003,\r\n THREEPEREMSPACE = 0x2004,\r\n FOURPEREMSPACE = 0x2005,\r\n SIXPEREMSPACE = 0x2006,\r\n FIGURESPACE = 0x2007,\r\n PUNCTUATIONSPACE = 0x2008,\r\n THINSPACE = 0x2009,\r\n HAIRSPACE = 0x200A,\r\n ZEROWIDTHSPACE = 0x200B,\r\n NARROWNOBREAKSPACE = 0x202F,\r\n IDEOGRAPHICSPACE = 0x3000,\r\n MATHEMATICALSPACE = 0x205F,\r\n OGHAM = 0x1680,\r\n\r\n _ = 0x5F,\r\n\r\n _0 = 0x30,\r\n _1 = 0x31,\r\n _2 = 0x32,\r\n _3 = 0x33,\r\n _4 = 0x34,\r\n _5 = 0x35,\r\n _6 = 0x36,\r\n _7 = 0x37,\r\n _8 = 0x38,\r\n _9 = 0x39,\r\n\r\n a = 0x61,\r\n b = 0x62,\r\n c = 0x63,\r\n d = 0x64,\r\n e = 0x65,\r\n f = 0x66,\r\n g = 0x67,\r\n h = 0x68,\r\n i = 0x69,\r\n j = 0x6A,\r\n k = 0x6B,\r\n l = 0x6C,\r\n m = 0x6D,\r\n n = 0x6E,\r\n o = 0x6F,\r\n p = 0x70,\r\n q = 0x71,\r\n r = 0x72,\r\n s = 0x73,\r\n t = 0x74,\r\n u = 0x75,\r\n v = 0x76,\r\n w = 0x77,\r\n x = 0x78,\r\n y = 0x79,\r\n z = 0x7A,\r\n\r\n A = 0x41,\r\n B = 0x42,\r\n C = 0x43,\r\n D = 0x44,\r\n E = 0x45,\r\n F = 0x46,\r\n G = 0x47,\r\n H = 0x48,\r\n I = 0x49,\r\n J = 0x4A,\r\n K = 0x4B,\r\n L = 0x4C,\r\n M = 0x4D,\r\n N = 0x4E,\r\n O = 0x4F,\r\n P = 0x50,\r\n Q = 0x51,\r\n R = 0x52,\r\n S = 0x53,\r\n T = 0x54,\r\n U = 0x55,\r\n V = 0x56,\r\n W = 0x57,\r\n X = 0x58,\r\n Y = 0x59,\r\n Z = 0x5a,\r\n\r\n AMPERSAND = 0x26,\r\n ASTERISK = 0x2A,\r\n AT = 0x40,\r\n BACKSLASH = 0x5C,\r\n BACKTICK = 0x60,\r\n BAR = 0x7C,\r\n CARET = 0x5E,\r\n CLOSEBRACE = 0x7D,\r\n CLOSEBRACKET = 0x5D,\r\n CLOSEPAREN = 0x29,\r\n COLON = 0x3A,\r\n COMMA = 0x2C,\r\n DOLLAR = 0x24,\r\n DOT = 0x2E,\r\n DOUBLEQUOTE = 0x22,\r\n EQUALS = 0x3D,\r\n EXCLAMATION = 0x21,\r\n GREATERTHAN = 0x3E,\r\n HASH = 0x23,\r\n LESSTHAN = 0x3C,\r\n MINUS = 0x2D,\r\n OPENBRACE = 0x7B,\r\n OPENBRACKET = 0x5B,\r\n OPENPAREN = 0x28,\r\n PERCENT = 0x25,\r\n PLUS = 0x2B,\r\n QUESTION = 0x3F,\r\n SEMICOLON = 0x3B,\r\n SINGLEQUOTE = 0x27,\r\n SLASH = 0x2F,\r\n TILDE = 0x7E,\r\n\r\n BACKSPACE = 0x08,\r\n FORMFEED = 0x0C,\r\n BYTEORDERMARK = 0xFEFF,\r\n TAB = 0x09,\r\n VERTICALTAB = 0x0B\r\n}\r\n\r\n/** Tests if the specified character code is some sort of line break. */\r\nexport function isLineBreak(c: CharCode): bool {\r\n switch (c) {\r\n case CharCode.LINEFEED:\r\n case CharCode.CARRIAGERETURN:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: {\r\n return true;\r\n }\r\n default: {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is some sort of white space. */\r\nexport function isWhiteSpace(c: i32): bool {\r\n switch (c) {\r\n case CharCode.SPACE:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.NONBREAKINGSPACE:\r\n case CharCode.NEXTLINE:\r\n case CharCode.OGHAM:\r\n case CharCode.NARROWNOBREAKSPACE:\r\n case CharCode.MATHEMATICALSPACE:\r\n case CharCode.IDEOGRAPHICSPACE:\r\n case CharCode.BYTEORDERMARK: {\r\n return true;\r\n }\r\n default: {\r\n return c >= CharCode.ENQUAD && c <= CharCode.ZEROWIDTHSPACE;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is a valid decimal digit. */\r\nexport function isDecimalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._9;\r\n}\r\n\r\n/** Tests if the specified character code is a valid octal digit. */\r\nexport function isOctalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._7;\r\n}\r\n\r\n/** Tests if the specified character code is a valid start of an identifier. */\r\nexport function isIdentifierStart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierStart(c);\r\n}\r\n\r\n/** Tests if the specified character code is a valid keyword character. */\r\nexport function isKeywordCharacter(c: i32): bool {\r\n return c >= CharCode.a && c <= CharCode.z;\r\n}\r\n\r\n/** Tests if the specified character code is a valid part of an identifier. */\r\nexport function isIdentifierPart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c >= CharCode._0 && c <= CharCode._9\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierPart(c);\r\n}\r\n\r\n// storing as u16 to save memory\r\nconst unicodeIdentifierStart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514,\r\n 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774,\r\n 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969,\r\n 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088,\r\n 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384,\r\n 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474,\r\n 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529,\r\n 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613,\r\n 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705,\r\n 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784,\r\n 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873,\r\n 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958,\r\n 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986,\r\n 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125,\r\n 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240,\r\n 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333,\r\n 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455,\r\n 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634,\r\n 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725,\r\n 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757,\r\n 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840,\r\n 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186,\r\n 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293,\r\n 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696,\r\n 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798,\r\n 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992,\r\n 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872,\r\n 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016,\r\n 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389,\r\n 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688,\r\n 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141,\r\n 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424,\r\n 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025,\r\n 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130,\r\n 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188,\r\n 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469,\r\n 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505,\r\n 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520,\r\n 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670,\r\n 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720,\r\n 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540,\r\n 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893,\r\n 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538,\r\n 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888,\r\n 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015,\r\n 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259,\r\n 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520,\r\n 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695,\r\n 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739,\r\n 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798,\r\n 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243,\r\n 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285,\r\n 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323,\r\n 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019,\r\n 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474,\r\n 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\nconst unicodeIdentifierPart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415,\r\n 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520,\r\n 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788,\r\n 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112,\r\n 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423,\r\n 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482,\r\n 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525,\r\n 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602,\r\n 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632,\r\n 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693,\r\n 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757,\r\n 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821,\r\n 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884,\r\n 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929,\r\n 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972,\r\n 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018,\r\n 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088,\r\n 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157,\r\n 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216,\r\n 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285,\r\n 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340,\r\n 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424,\r\n 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515,\r\n 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570,\r\n 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720,\r\n 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751,\r\n 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789,\r\n 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895,\r\n 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028,\r\n 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304,\r\n 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744,\r\n 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808,\r\n 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108,\r\n 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902,\r\n 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099,\r\n 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272,\r\n 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516,\r\n 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783,\r\n 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155,\r\n 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676,\r\n 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027,\r\n 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134,\r\n 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205,\r\n 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417,\r\n 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477,\r\n 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517,\r\n 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559,\r\n 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686,\r\n 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728,\r\n 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449,\r\n 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799,\r\n 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512,\r\n 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783,\r\n 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072,\r\n 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309,\r\n 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584,\r\n 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741,\r\n 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808,\r\n 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203,\r\n 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275,\r\n 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321,\r\n 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008,\r\n 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140,\r\n 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382,\r\n 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\n\r\nfunction lookupInUnicodeMap(code: u16, map: u16[]): bool {\r\n if (code < map[0]) return false;\r\n\r\n var lo = 0;\r\n var hi = map.length;\r\n var mid: i32;\r\n\r\n while (lo + 1 < hi) {\r\n mid = lo + (hi - lo) / 2;\r\n mid -= mid % 2;\r\n if (map[mid] <= code && code <= map[mid + 1]) {\r\n return true;\r\n }\r\n if (code < map[mid]) {\r\n hi = mid;\r\n } else {\r\n lo = mid + 2;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction isUnicodeIdentifierStart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierStart);\r\n}\r\n\r\nfunction isUnicodeIdentifierPart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierPart);\r\n}\r\n","/**\r\n * Built-in elements providing WebAssembly core functionality.\r\n * @module builtins\r\n *//***/\r\n\r\n import {\r\n Compiler,\r\n ConversionKind,\r\n WrapMode\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Expression,\r\n LiteralKind,\r\n LiteralExpression,\r\n StringLiteralExpression\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags\r\n} from \"./types\";\r\n\r\nimport {\r\n BinaryOp,\r\n UnaryOp,\r\n HostOp,\r\n NativeType,\r\n ExpressionRef,\r\n ExpressionId,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI64High,\r\n getConstValueI64Low,\r\n getConstValueI32\r\n} from \"./module\";\r\n\r\nimport {\r\n ElementKind,\r\n FunctionPrototype,\r\n Class,\r\n Field,\r\n OperatorKind,\r\n FlowFlags\r\n} from \"./program\";\r\n\r\n/** Compiles a call to a built-in function. */\r\nexport function compileCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n\r\n var arg0: ExpressionRef,\r\n arg1: ExpressionRef,\r\n arg2: ExpressionRef,\r\n ret: ExpressionRef;\r\n\r\n // NOTE that some implementations below make use of the select expression where straight-forward.\r\n // whether worth or not should probably be tested once/ it's known if/how embedders handle it.\r\n // search: createSelect\r\n\r\n switch (prototype.internalName) {\r\n\r\n // types\r\n\r\n case \"isInteger\": { // isInteger() / isInteger(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.INTEGER) && !type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isFloat\": { // isFloat() / isFloat(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.FLOAT)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isSigned\": { // isSigned() / isSigned(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.SIGNED)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isReference\": { // isReference() / isReference(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n compiler.currentType = Type.bool;\r\n return type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isString\": { // isString() / isString(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n if (classType) {\r\n let stringInstance = compiler.program.stringInstance;\r\n if (stringInstance && classType.isAssignableTo(stringInstance)) return module.createI32(1);\r\n }\r\n return module.createI32(0);\r\n }\r\n case \"isArray\": { // isArray() / isArray(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n return classType != null && classType.lookupOverload(OperatorKind.INDEXED_GET) != null\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n\r\n // math\r\n\r\n case \"clz\": { // clz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ClzI64\r\n : UnaryOp.ClzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.ClzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ctz\": { // ctz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.NONE, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.CtzI64\r\n : UnaryOp.CtzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.CtzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"popcnt\": { // popcnt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.PopcntI64\r\n : UnaryOp.PopcntI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.PopcntI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"rotl\": { // rotl(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotlI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotlI64\r\n : BinaryOp.RotlI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotlI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflows\r\n }\r\n case \"rotr\": { // rotr(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotrI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotrI64\r\n : BinaryOp.RotrI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotrI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflowws\r\n }\r\n case \"abs\": { // abs(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n // possibly overflows, e.g. abs(-128) == 128\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createSelect( // x > 0 ? x : 0-x\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI32, // ifFalse\r\n module.createI32(0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32)\r\n ),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n module.createI32(0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n compiler.options.usizeType.toNativeZero(module),\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n ),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType),\r\n compiler.options.usizeType.toNativeZero(module)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI64,\r\n module.createI64(0, 0),\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n ),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n module.createI64(0, 0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.BOOL: {\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.AbsF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.AbsF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"max\": { // max(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MaxF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MaxF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"min\": { // min(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MinF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MinF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ceil\": { // ceil(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.CeilF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.CeilF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"floor\": { // floor(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.FloorF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.FloorF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"copysign\": { // copysign(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) { // TODO: does an integer version make sense?\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.CopysignF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.CopysignF64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"nearest\": { // nearest(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.NearestF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.NearestF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"reinterpret\": { // reinterpret(value: *) -> T\r\n if (operands.length != 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (typeArguments[0].kind) {\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF32, arg0);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF64, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (typeArguments[0].is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.f64\r\n : Type.f32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ReinterpretF64\r\n : UnaryOp.ReinterpretF32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI64, arg0);\r\n break;\r\n }\r\n default: { // small integers and void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return ret;\r\n }\r\n case \"sqrt\": { // sqrt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) { // TODO: integer versions (that return f64 or convert)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.SqrtF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.SqrtF64, arg0);\r\n break;\r\n }\r\n // case TypeKind.VOID:\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"trunc\": { // trunc(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments && typeArguments.length) {\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n // TODO: truncate to contextual type directly (if not void etc.)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.TruncF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.TruncF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n // memory access\r\n\r\n case \"load\": { // load(offset: usize, constantOffset?: usize) -> *\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let offset = operands.length == 2 ? evaluateConstantOffset(compiler, operands[1]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return module.createLoad(\r\n typeArguments[0].byteSize,\r\n typeArguments[0].is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n arg0,\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n contextualType.size > typeArguments[0].size\r\n ? (compiler.currentType = contextualType).toNativeType()\r\n : (compiler.currentType = typeArguments[0]).toNativeType(),\r\n offset\r\n );\r\n }\r\n case \"store\": { // store(offset: usize, value: *, constantOffset?: usize) -> void\r\n compiler.currentType = Type.void;\r\n if (operands.length < 2 || operands.length > 3) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n typeArguments[0],\r\n typeArguments[0].is(TypeFlags.INTEGER)\r\n ? ConversionKind.NONE // no need to convert to small int (but now might result in a float)\r\n : ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let type: Type;\r\n if (\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n (\r\n !compiler.currentType.is(TypeFlags.INTEGER) || // float to int\r\n compiler.currentType.size < typeArguments[0].size // int to larger int (clear garbage bits)\r\n )\r\n ) {\r\n arg1 = compiler.convertExpression(\r\n arg1,\r\n compiler.currentType, typeArguments[0],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE, // still clears garbage bits\r\n operands[1]\r\n );\r\n type = typeArguments[0];\r\n } else {\r\n type = compiler.currentType;\r\n }\r\n let offset = operands.length == 3 ? evaluateConstantOffset(compiler, operands[2]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n return module.createStore(typeArguments[0].byteSize, arg0, arg1, type.toNativeType(), offset);\r\n }\r\n case \"sizeof\": { // sizeof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(byteSize);\r\n } else {\r\n ret = module.createI64(byteSize, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(byteSize, 0);\r\n } else {\r\n ret = module.createI32(byteSize);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"alignof\": { // alignof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n let alignLog2: i32;\r\n switch (byteSize) {\r\n case 1: { alignLog2 = 0; break; }\r\n case 2: { alignLog2 = 1; break; }\r\n case 4: { alignLog2 = 2; break; }\r\n case 8: { alignLog2 = 3; break; }\r\n default: { assert(false); return module.createUnreachable(); }\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(alignLog2);\r\n } else {\r\n ret = module.createI64(alignLog2, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(alignLog2, 0);\r\n } else {\r\n ret = module.createI32(alignLog2);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"offsetof\": { // offsetof(fieldName?: string) -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length > 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let classType = typeArguments[0].classReference;\r\n if (!classType) {\r\n compiler.error( // TODO: better error\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let offset: i32;\r\n if (operands.length) {\r\n if (\r\n operands[0].kind != NodeKind.LITERAL ||\r\n (operands[0]).literalKind != LiteralKind.STRING\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.String_literal_expected,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let fieldName = (operands[0]).value;\r\n let field = classType.members ? classType.members.get(fieldName) : null;\r\n if (!(field && field.kind == ElementKind.FIELD)) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_has_no_property_1,\r\n operands[0].range, classType.internalName, fieldName\r\n );\r\n return module.createUnreachable();\r\n }\r\n offset = (field).memoryOffset;\r\n } else {\r\n offset = classType.currentMemoryOffset;\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n return module.createI32(offset);\r\n } else {\r\n return module.createI64(offset);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n return module.createI64(offset);\r\n } else {\r\n return module.createI32(offset);\r\n }\r\n }\r\n }\r\n\r\n // control flow\r\n\r\n case \"select\": { // select(ifTrue: T, ifFalse: T, condition: bool) -> T\r\n if (operands.length != 3) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n let type = compiler.currentType;\r\n arg1 = compiler.compileExpression(operands[1], type, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n arg2 = compiler.makeIsTrueish(\r\n compiler.compileExpressionRetainType(operands[2], Type.bool, WrapMode.NONE),\r\n compiler.currentType\r\n );\r\n compiler.currentType = type;\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n default: { // any other value type\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unreachable\": { // unreachable() -> *\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n\r\n // host operations\r\n\r\n case \"current_memory\": { // current_memory() -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.CurrentMemory);\r\n }\r\n case \"grow_memory\": { // grow_memory(pages: i32) -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n arg0 = module.createUnreachable();\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.GrowMemory, null, [ arg0 ]);\r\n }\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n case \"move_memory\": { // move_memory(dest: usize, src: usize: n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.MoveMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n case \"set_memory\": { // set_memory(dest: usize, value: u8, n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n Type.u32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.SetMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n\r\n // other\r\n\r\n case \"changetype\": { // changetype(value: *) -> T\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpressionRetainType(\r\n operands[0],\r\n typeArguments[0],\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.size != typeArguments[0].size) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // if (reportNode.range.source.sourceKind != SourceKind.STDLIB)\r\n // compiler.warning(DiagnosticCode.Operation_is_unsafe, reportNode.range);\r\n return arg0; // any usize to any usize\r\n }\r\n case \"assert\": { // assert(isTrueish: T, message?: string) -> T with T != null\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else if (operands.length > 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.bool, WrapMode.WRAP);\r\n }\r\n\r\n let type = compiler.currentType;\r\n compiler.currentType = type.nonNullableType;\r\n\r\n // just return ifTrueish if assertions are disabled, or simplify if dropped anyway\r\n if (compiler.options.noAssert) {\r\n if (contextualType == Type.void) {\r\n compiler.currentType = Type.void;\r\n return module.createNop();\r\n }\r\n return arg0;\r\n }\r\n\r\n let abort = compileAbort(compiler, operands.length == 2 ? operands[1] : null, reportNode);\r\n\r\n compiler.currentType = type.nonNullableType;\r\n\r\n if (contextualType == Type.void) { // simplify if dropped anyway\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n // TODO: also check for NaN in float assertions, as in `Boolean(NaN) -> false`?\r\n case TypeKind.F32: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n arg0,\r\n module.createF32(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n arg0,\r\n module.createF64(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n default: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.I64)\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F32)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f64, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F64)\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unchecked\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = compiler.currentFunction.flow;\r\n flow.set(FlowFlags.UNCHECKED_CONTEXT);\r\n ret = compiler.compileExpressionRetainType(operands[0], contextualType, WrapMode.NONE);\r\n flow.unset(FlowFlags.UNCHECKED_CONTEXT);\r\n return ret;\r\n }\r\n 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 // conversions\r\n\r\n case \"i8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"isize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"usize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"bool\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.bool;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.bool,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n var expr = deferASMCall(compiler, prototype, operands, contextualType, reportNode);\r\n if (expr) {\r\n if (typeArguments && typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return expr;\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n}\r\n\r\n/** Defers an inline-assembler-like call to a built-in function. */\r\nfunction deferASMCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (prototype.internalName) {\r\n\r\n // TODO: Operators can't be just deferred (don't have a corresponding generic built-in)\r\n // add, sub, mul, div_s, div_u, rem_s, rem_u\r\n // and, or, xor, shl, shr_u, shr_s\r\n // eq, eqz, ne, lt_s, lt_u, le_s, le_u, gt_s, gt_u, ge_s, ge_u\r\n\r\n case \"i32.clz\": return deferASM(\"clz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.clz\": return deferASM(\"clz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.ctz\": return deferASM(\"ctz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.ctz\": return deferASM(\"ctz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.popcnt\": return deferASM(\"popcnt\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.popcnt\": return deferASM(\"popcnt\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotl\": return deferASM(\"rotl\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotl\": return deferASM(\"rotl\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotr\": return deferASM(\"rotr\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotr\": return deferASM(\"rotr\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.abs\": return deferASM(\"abs\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.abs\": return deferASM(\"abs\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.max\": return deferASM(\"max\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.max\": return deferASM(\"max\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.min\": return deferASM(\"min\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.min\": return deferASM(\"min\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.ceil\": return deferASM(\"ceil\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.ceil\": return deferASM(\"ceil\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.floor\": return deferASM(\"floor\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.floor\": return deferASM(\"floor\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.copysign\": return deferASM(\"copysign\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.copysign\": return deferASM(\"copysign\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.nearest\": return deferASM(\"nearest\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.nearest\": return deferASM(\"nearest\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.reinterpret_f32\": return deferASM(\"reinterpret\", compiler, Type.i32, operands, Type.f32, reportNode);\r\n case \"i64.reinterpret_f64\": return deferASM(\"reinterpret\", compiler, Type.i64, operands, Type.f64, reportNode);\r\n case \"f32.reinterpret_i32\": return deferASM(\"reinterpret\", compiler, Type.f32, operands, Type.i32, reportNode);\r\n case \"f64.reinterpret_i64\": return deferASM(\"reinterpret\", compiler, Type.f64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.sqrt\": return deferASM(\"sqrt\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.sqrt\": return deferASM(\"sqrt\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.trunc\": return deferASM(\"trunc\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.trunc\": return deferASM(\"trunc\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u32, reportNode);\r\n case \"i32.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u32, reportNode);\r\n case \"i32.load\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u64, reportNode);\r\n case \"i64.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u64, reportNode);\r\n case \"i64.load32_s\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.load32_u\": return deferASM(\"load\", compiler, Type.u32, operands, Type.u64, reportNode);\r\n case \"i64.load\": return deferASM(\"load\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.load\": return deferASM(\"load\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.load\": return deferASM(\"load\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.store\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.store32\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.store\": return deferASM(\"store\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.store\": return deferASM(\"store\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.store\": return deferASM(\"store\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n }\r\n return 0;\r\n}\r\n\r\n/** A helper for deferring inline-assembler-like calls to built-in functions. */\r\nfunction deferASM(\r\n name: string,\r\n compiler: Compiler,\r\n typeArgument: Type,\r\n operands: Expression[],\r\n valueType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var prototype = assert(compiler.program.elementsLookup.get(name));\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return compileCall(compiler, prototype, [ typeArgument ], operands, valueType, reportNode);\r\n}\r\n\r\n/** Evaluates the constant type of a type argument *or* expression. */\r\nfunction evaluateConstantType(\r\n compiler: Compiler,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n reportNode: Node\r\n): Type | null {\r\n if (operands.length == 0) { // requires type argument\r\n if (!typeArguments || typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return null;\r\n }\r\n return typeArguments[0];\r\n }\r\n if (operands.length == 1) { // optional type argument\r\n if (typeArguments) {\r\n if (typeArguments.length == 1) {\r\n compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n if (typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return null;\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n } else {\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n return compiler.currentType;\r\n }\r\n if (typeArguments && typeArguments.length > 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return null;\r\n}\r\n\r\n/** Evaluates a `constantOffset` argument.*/\r\nfunction evaluateConstantOffset(compiler: Compiler, expression: Expression): i32 {\r\n var expr: ExpressionRef;\r\n var value: i32;\r\n if (compiler.options.isWasm64) {\r\n expr = compiler.precomputeExpression(expression, Type.usize64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I64 ||\r\n getConstValueI64High(expr) != 0 ||\r\n (value = getConstValueI64Low(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n } else {\r\n expr = compiler.precomputeExpression(expression, Type.usize32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I32 ||\r\n (value = getConstValueI32(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n }\r\n return value;\r\n}\r\n\r\nconst allocateInternalName = \"allocate_memory\";\r\n\r\n/** Compiles a memory allocation for an instance of the specified class. */\r\nexport function compileAllocate(\r\n compiler: Compiler,\r\n classInstance: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n assert(classInstance.program == program);\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n\r\n var allocatePrototype = program.elementsLookup.get(allocateInternalName);\r\n if (!allocatePrototype) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, allocateInternalName\r\n );\r\n program.info(\r\n DiagnosticCode.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (allocatePrototype.kind != ElementKind.FUNCTION_PROTOTYPE) {\r\n program.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n reportNode.range, allocatePrototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n var allocateInstance = compiler.resolver.resolveFunction(allocatePrototype, null);\r\n if (!(allocateInstance && compiler.compileFunction(allocateInstance))) return module.createUnreachable();\r\n\r\n compiler.currentType = classInstance.type;\r\n return module.createCall(\r\n allocateInstance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(classInstance.currentMemoryOffset)\r\n : module.createI32(classInstance.currentMemoryOffset)\r\n ],\r\n options.nativeSizeType\r\n );\r\n}\r\n\r\nconst abortInternalName = \"abort\";\r\n\r\n/** Compiles an abort wired to the conditionally imported 'abort' function. */\r\nexport function compileAbort(\r\n compiler: Compiler,\r\n message: Expression | null,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n var module = compiler.module;\r\n\r\n var stringType = program.typesLookup.get(\"string\"); // might be intended\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortPrototype = program.elementsLookup.get(abortInternalName); // might be intended\r\n if (!abortPrototype || abortPrototype.kind != ElementKind.FUNCTION_PROTOTYPE) return module.createUnreachable();\r\n\r\n var abortInstance = compiler.resolver.resolveFunction(abortPrototype, null);\r\n if (!(abortInstance && compiler.compileFunction(abortInstance))) return module.createUnreachable();\r\n\r\n var messageArg = message != null\r\n ? compiler.compileExpression(message, stringType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : stringType.toNativeZero(module);\r\n\r\n var filenameArg = compiler.compileStaticString(reportNode.range.source.normalizedPath);\r\n\r\n compiler.currentType = Type.void;\r\n return module.createBlock(null, [\r\n module.createCallImport(\r\n abortInstance.internalName, [\r\n messageArg,\r\n filenameArg,\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ],\r\n NativeType.None\r\n ),\r\n module.createUnreachable()\r\n ]);\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__24__;","// Copy Binaryen exports to global scope\r\n\r\nconst binaryen = global.Binaryen || require(\"binaryen\");\r\n\r\nfor (var key in binaryen)\r\n if (key.startsWith(\"_Binaryen\") || key.startsWith(\"_Relooper\"))\r\n global[key] = binaryen[key];\r\n\r\n// Utilize Binaryen's heap\r\n\r\nglobal.allocate_memory = function(size) {\r\n if (!size) return 0; // should be safe in our case\r\n return binaryen._malloc(size);\r\n};\r\n\r\nglobal.free_memory = function(ptr) {\r\n if (ptr) binaryen._free(ptr);\r\n};\r\n\r\nglobal.move_memory = function(dest, src, n) {\r\n return binaryen._memmove(dest, src, n);\r\n};\r\n\r\nglobal.store = function(ptr, val) {\r\n binaryen.HEAPU8[ptr] = val;\r\n};\r\n\r\nglobal.load = function(ptr) {\r\n return binaryen.HEAPU8[ptr];\r\n};\r\n\r\n// Implement module stubs\r\n\r\nconst Module = require(\"../../module\").Module;\r\n\r\nModule.prototype.toText = function() {\r\n return new binaryen.Module(this.ref).emitText();\r\n};\r\n\r\nModule.prototype.toAsmjs = function() {\r\n return new binaryen.Module(this.ref).emitAsmjs();\r\n};\r\n","module.exports = globalScope => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n\r\n globalScope[\"allocate_memory\"] = function allocate_memory(size) {\r\n if (!(size >>>= 0)) return 0;\r\n\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7)\r\n HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n\r\n return ptr;\r\n };\r\n\r\n globalScope[\"free_memory\"] = function free_memory(ptr) {\r\n // TODO\r\n };\r\n\r\n globalScope[\"move_memory\"] = function move_memory(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n };\r\n\r\n globalScope[\"store\"] = function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n };\r\n\r\n globalScope[\"load\"] = function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n };\r\n};\r\n","/** @module 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\nrequire(\"./memory\")(globalScope);\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 \"../../../std/portable/index\";\r\nimport \"./binaryen\";\r\nimport \"./float\";\r\nimport \"./i64\";\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/ast.ts","webpack://assemblyscript/./src/util/index.ts","webpack://assemblyscript/./src/module.ts","webpack://assemblyscript/./src/program.ts","webpack://assemblyscript/./src/types.ts","webpack://assemblyscript/(webpack)/buildin/global.js","webpack://assemblyscript/./src/tokenizer.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.ts","webpack://assemblyscript/./src/compiler.ts","webpack://assemblyscript/./src/parser.ts","webpack://assemblyscript/./src/definitions.ts","webpack://assemblyscript/./src/decompiler.ts","webpack://assemblyscript/./src/index.ts","webpack://assemblyscript/./node_modules/long/src/long.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./src/glue/js/float.js","webpack://assemblyscript/./src/resolver.ts","webpack://assemblyscript/./src/util/binary.ts","webpack://assemblyscript/./src/util/text.ts","webpack://assemblyscript/./src/util/path.ts","webpack://assemblyscript/./src/util/charcode.ts","webpack://assemblyscript/./src/builtins.ts","webpack://assemblyscript/external \"binaryen\"","webpack://assemblyscript/./src/glue/js/binaryen.js","webpack://assemblyscript/./std/portable/memory.js","webpack://assemblyscript/./std/portable/index.js","webpack://assemblyscript/./src/glue/js/index.ts"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__24__","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","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","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","__export","NativeType","ExpressionId","compiler_1","_BinaryenTypeNone","_BinaryenTypeInt32","_BinaryenTypeInt64","_BinaryenTypeFloat32","_BinaryenTypeFloat64","_BinaryenTypeUnreachable","_BinaryenTypeAuto","_BinaryenInvalidId","_BinaryenBlockId","_BinaryenIfId","_BinaryenLoopId","_BinaryenBreakId","_BinaryenSwitchId","_BinaryenCallId","_BinaryenCallImportId","_BinaryenCallIndirectId","_BinaryenGetLocalId","_BinaryenSetLocalId","_BinaryenGetGlobalId","_BinaryenSetGlobalId","_BinaryenLoadId","_BinaryenStoreId","_BinaryenConstId","_BinaryenUnaryId","_BinaryenBinaryId","_BinaryenSelectId","_BinaryenDropId","_BinaryenReturnId","_BinaryenHostId","_BinaryenNopId","_BinaryenUnreachableId","_BinaryenAtomicCmpxchgId","_BinaryenAtomicRMWId","_BinaryenAtomicWaitId","_BinaryenAtomicWakeId","UnaryOp","_BinaryenClzInt32","_BinaryenCtzInt32","_BinaryenPopcntInt32","_BinaryenNegFloat32","_BinaryenAbsFloat32","_BinaryenCeilFloat32","_BinaryenFloorFloat32","_BinaryenTruncFloat32","_BinaryenNearestFloat32","_BinaryenSqrtFloat32","_BinaryenEqZInt32","_BinaryenClzInt64","_BinaryenCtzInt64","_BinaryenPopcntInt64","_BinaryenNegFloat64","_BinaryenAbsFloat64","_BinaryenCeilFloat64","_BinaryenFloorFloat64","_BinaryenTruncFloat64","_BinaryenNearestFloat64","_BinaryenSqrtFloat64","_BinaryenEqZInt64","_BinaryenExtendSInt32","_BinaryenExtendUInt32","_BinaryenWrapInt64","_BinaryenTruncSFloat32ToInt32","_BinaryenTruncSFloat32ToInt64","_BinaryenTruncUFloat32ToInt32","_BinaryenTruncUFloat32ToInt64","_BinaryenTruncSFloat64ToInt32","_BinaryenTruncSFloat64ToInt64","_BinaryenTruncUFloat64ToInt32","_BinaryenTruncUFloat64ToInt64","_BinaryenReinterpretFloat32","_BinaryenReinterpretFloat64","_BinaryenConvertSInt32ToFloat32","_BinaryenConvertSInt32ToFloat64","_BinaryenConvertUInt32ToFloat32","_BinaryenConvertUInt32ToFloat64","_BinaryenConvertSInt64ToFloat32","_BinaryenConvertSInt64ToFloat64","_BinaryenConvertUInt64ToFloat32","_BinaryenConvertUInt64ToFloat64","_BinaryenPromoteFloat32","_BinaryenDemoteFloat64","_BinaryenReinterpretInt32","_BinaryenReinterpretInt64","_BinaryenExtendS8Int32","_BinaryenExtendS16Int32","_BinaryenExtendS8Int64","_BinaryenExtendS16Int64","_BinaryenExtendS32Int64","BinaryOp","_BinaryenAddInt32","_BinaryenSubInt32","_BinaryenMulInt32","_BinaryenDivSInt32","_BinaryenDivUInt32","_BinaryenRemSInt32","_BinaryenRemUInt32","_BinaryenAndInt32","_BinaryenOrInt32","_BinaryenXorInt32","_BinaryenShlInt32","_BinaryenShrUInt32","_BinaryenShrSInt32","_BinaryenRotLInt32","_BinaryenRotRInt32","_BinaryenEqInt32","_BinaryenNeInt32","_BinaryenLtSInt32","_BinaryenLtUInt32","_BinaryenLeSInt32","_BinaryenLeUInt32","_BinaryenGtSInt32","_BinaryenGtUInt32","_BinaryenGeSInt32","_BinaryenGeUInt32","_BinaryenAddInt64","_BinaryenSubInt64","_BinaryenMulInt64","_BinaryenDivSInt64","_BinaryenDivUInt64","_BinaryenRemSInt64","_BinaryenRemUInt64","_BinaryenAndInt64","_BinaryenOrInt64","_BinaryenXorInt64","_BinaryenShlInt64","_BinaryenShrUInt64","_BinaryenShrSInt64","_BinaryenRotLInt64","_BinaryenRotRInt64","_BinaryenEqInt64","_BinaryenNeInt64","_BinaryenLtSInt64","_BinaryenLtUInt64","_BinaryenLeSInt64","_BinaryenLeUInt64","_BinaryenGtSInt64","_BinaryenGtUInt64","_BinaryenGeSInt64","_BinaryenGeUInt64","_BinaryenAddFloat32","_BinaryenSubFloat32","_BinaryenMulFloat32","_BinaryenDivFloat32","_BinaryenCopySignFloat32","_BinaryenMinFloat32","_BinaryenMaxFloat32","_BinaryenEqFloat32","_BinaryenNeFloat32","_BinaryenLtFloat32","_BinaryenLeFloat32","_BinaryenGtFloat32","_BinaryenGeFloat32","_BinaryenAddFloat64","_BinaryenSubFloat64","_BinaryenMulFloat64","_BinaryenDivFloat64","_BinaryenCopySignFloat64","_BinaryenMinFloat64","_BinaryenMaxFloat64","_BinaryenEqFloat64","_BinaryenNeFloat64","_BinaryenLtFloat64","_BinaryenLeFloat64","_BinaryenGtFloat64","_BinaryenGeFloat64","HostOp","_BinaryenPageSize","_BinaryenCurrentMemory","_BinaryenGrowMemory","_BinaryenHasFeature","AtomicRMWOp","_BinaryenAtomicRMWAdd","_BinaryenAtomicRMWSub","_BinaryenAtomicRMWAnd","_BinaryenAtomicRMWOr","_BinaryenAtomicRMWXor","_BinaryenAtomicRMWXchg","MemorySegment","buffer","offset","segment","Module","cachedTemporaryName","hasTemporaryFunction","cachedPrecomputeName","cachedPrecomputeNames","ref","_BinaryenModuleCreate","cachedByValue","allocate_memory","createFrom","cArr","allocU8Array","_BinaryenModuleRead","free_memory","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","index","_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","None","_BinaryenBlock","createBreak","_BinaryenBreak","createDrop","_BinaryenDrop","createLoop","_BinaryenLoop","createIf","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","defaultName","numNames","strs","_BinaryenSwitch","createCall","target","_BinaryenCall","createCallImport","_BinaryenCallImport","createCallIndirect","typeName","_BinaryenCallIndirect","createUnreachable","_BinaryenUnreachable","addGlobal","mutable","_BinaryenAddGlobal","addFunction","varTypes","_BinaryenAddFunction","removeFunction","_BinaryenRemoveFunction","addTemporaryFunction","tempName","typeRef","removeTemporaryFunction","addFunctionExport","internalName","cStr1","cStr2","_BinaryenAddFunctionExport","addTableExport","_BinaryenAddTableExport","addMemoryExport","_BinaryenAddMemoryExport","addGlobalExport","_BinaryenAddGlobalExport","removeExport","_BinaryenRemoveExport","addFunctionImport","externalModuleName","externalBaseName","functionType","cStr3","_BinaryenAddFunctionImport","addTableImport","_BinaryenAddTableImport","addMemoryImport","_BinaryenAddMemoryImport","addGlobalImport","globalType","_BinaryenAddGlobalImport","removeImport","_BinaryenRemoveImport","setMemory","initial","maximum","segments","exportName","segs","offs","sizs","Target","WASM64","i64_low","i64_high","cArr1","cArr2","cArr3","_BinaryenSetMemory","setFunctionTable","funcs","_BinaryenSetFunctionTable","setStart","func","_BinaryenSetStart","setOptimizeLevel","level","_BinaryenSetOptimizeLevel","setShrinkLevel","_BinaryenSetShrinkLevel","setDebugInfo","on","_BinaryenSetDebugInfo","optimize","_BinaryenFunctionOptimize","_BinaryenModuleOptimize","runPasses","passes","_BinaryenFunctionRunPasses","_BinaryenModuleRunPasses","precomputeFunction","validate","_BinaryenModuleValidate","interpret","_BinaryenModuleInterpret","toBinary","sourceMapUrl","binaryPtr","sourceMapPtr","_BinaryenModuleAllocateAndWrite","readInt","binaryBytes","ret","BinaryModule","output","Uint8Array","load","readBuffer","sourceMap","readString","toText","Error","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","i32","MAX_VALUE","nested1","nested2","_BinaryenExpressionGetId","Const","_BinaryenExpressionGetType","I32","_BinaryenConstGetValueI32","I64","_BinaryenConstGetValueI64Low","_BinaryenConstGetValueI64High","F32","_BinaryenConstGetValueF32","F64","_BinaryenConstGetValueF64","GetLocal","_BinaryenGetLocalGetIndex","GetGlobal","globalName","_BinaryenGetGlobalGetName","Load","_BinaryenLoadGetPtr","_BinaryenLoadIsAtomic","_BinaryenLoadGetBytes","_BinaryenLoadGetOffset","_BinaryenLoadIsSigned","_BinaryenLoadGetAlign","Unary","_BinaryenUnaryGetValue","_BinaryenUnaryGetOp","Binary","_BinaryenBinaryGetLeft","_BinaryenBinaryGetRight","_BinaryenBinaryGetOp","addDebugInfoFile","_BinaryenModuleAddDebugInfoFileName","getDebugInfoFile","_BinaryenModuleGetDebugInfoFileName","setDebugLocation","fileIndex","lineNumber","columnNumber","_BinaryenFunctionSetDebugLocation","MAX_MEMORY_WASM32","MAX_MEMORY_WASM64","getExpressionId","getExpressionType","getConstValueI32","getConstValueI64Low","getConstValueI64High","getConstValueF32","getConstValueF64","getGetLocalIndex","getSetLocalIndex","_BinaryenSetLocalGetIndex","getSetLocalValue","_BinaryenSetLocalGetValue","isTeeLocal","_BinaryenSetLocalIsTee","getBinaryOp","getBinaryLeft","getBinaryRight","getUnaryOp","getUnaryValue","getLoadBytes","getLoadOffset","getLoadPtr","isLoadSigned","getStoreBytes","_BinaryenStoreGetBytes","getStoreOffset","_BinaryenStoreGetOffset","getStorePtr","_BinaryenStoreGetPtr","getStoreValue","_BinaryenStoreGetValue","getBlockName","_BinaryenBlockGetName","getBlockChildCount","_BinaryenBlockGetNumChildren","getBlockChild","_BinaryenBlockGetChild","getIfCondition","_BinaryenIfGetCondition","getIfTrue","_BinaryenIfGetIfTrue","getIfFalse","_BinaryenIfGetIfFalse","getLoopName","_BinaryenLoopGetName","getLoopBody","_BinaryenLoopGetBody","getBreakName","_BinaryenBreakGetName","getBreakCondition","_BinaryenBreakGetCondition","getSelectThen","_BinaryenSelectGetIfTrue","getSelectElse","_BinaryenSelectGetIfFalse","getSelectCondition","_BinaryenSelectGetCondition","getDropValue","_BinaryenDropGetValue","getReturnValue","_BinaryenReturnGetValue","getCallTarget","_BinaryenCallGetTarget","getHostOp","_BinaryenHostGetOp","getHostOperandCount","_BinaryenHostGetNumOperands","getHostOperand","_BinaryenHostGetOperand","getHostName","_BinaryenHostGetNameOperand","getFunctionBody","_BinaryenFunctionGetBody","getFunctionName","_BinaryenFunctionGetName","getFunctionParamCount","_BinaryenFunctionGetNumParams","getFunctionParamType","_BinaryenFunctionGetParam","getFunctionResultType","_BinaryenFunctionGetResult","relooper","_RelooperCreate","addBlock","_RelooperAddBlock","addBranch","from","to","_RelooperAddBranch","addBlockWithSwitch","_RelooperAddBlockWithSwitch","addBranchForSwitch","indexes","_RelooperAddBranchForSwitch","renderAndDispose","entry","labelHelper","_RelooperRenderAndDispose","u8s","numValues","idx","store","i32s","val","ptrs","str","u","stringLengthUTF8","cp","u1","u2","u3","u4","arr","String","fromCodePoints","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","arrayPrototype","stringInstance","mainFunction","resolver","Resolver","sources","getSource","lookupSourceByPath","normalizedPathWithoutExtension","tmp","initialize","options","Type","i8","i16","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","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","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","stringPrototype","resolveClass","has","Duplicate_identifier_0","programLevelInternalName","FUNCTION_PROTOTYPE","startFunction","GENERIC","AMBIENT","MAIN","Global","withConstantIntegerValue","setConstantFloat","withConstantFloatValue","queuedNamedExports","checkDecorators","acceptedFlags","presentFlags","decoratorKindToFlag","Duplicate_decorator","Decorator_0_is_not_valid_here","checkGlobal","parentNode","hasDecorator","BUILTIN","isLibrary","namespace","fileLevelInternalName","simpleName","ClassPrototype","numImplementsTypes","Unmanaged_classes_cannot_implement_interfaces","Operation_not_supported","MODULE_EXPORT","Export_declaration_conflicts_with_exported_declaration_of_0","isEntry","memberDeclarations","memberDeclaration","initializeField","GET","SET","initializeAccessor","initializeMethod","classPrototype","isInterface","INTERFACE_PROTOTYPE","staticField","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","prefix","FILESPACE","referencedName","referencedElement","seen","Set","add","initializeImport","indexPart","InterfacePrototype","parentNamespace","Namespace","existingExport","Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local","global_1","Element","program","NAMESPACE","ENUM","ENUMVALUE","constantValue","ConstantValueKind","VariableLikeElement","constantValueKind","constantIntegerValue","CONST","INLINED","constantFloatValue","Parameter","Local","LOCAL","scopedGlobal","instances","classTypeArguments","Function","contextualTypeArguments","localsByName","localsByIndex","additionalLocals","breakContext","debugLocations","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","DECLARE","localIndex","INSTANCE","local","thisType","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","_b","inheritedName","inheritedType","parameterTypes","parameterType","parameterName","getParameterName","flow","Flow","addLocal","getTempLocal","wrapped","temps","toNativeType","pop","setLocalWrapped","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","debugLocation","debugInfoRef","FunctionTarget","FUNCTION_TARGET","toSignatureString","asFunction","FIELD_PROTOTYPE","Field","FIELD","memoryOffset","Class","base","currentMemoryOffset","constructorInstance","asClass","inheritedTypeArguments_2","inheritedTypeArguments_2_1","baseType","isAssignableTo","current","lookupOverload","unchecked","uncheckedOverload","instance","overload","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","canConversionOverflow","SetLocal","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","AndI32","computeSmallIntegerMask","ShlI32","shift","size","ShrI32","ShrU32","DivU32","RemI32","RemU32","EqzI32","EqzI64","ClzI32","CtzI32","PopcntI32","MIN_VALUE","fromType","Block","last","If","Select","Call","Unreachable","fromSize","byteSize","toSize","TypeKind","TypeFlags","cachedNullableType","ceil","classReference","signatureReference","nonNullableType","isize64","isize32","usize64","usize32","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","g","eval","e","window","IdentifierHandling","tokenFromKeyword","AS","ASYNC","AWAIT","CASE","CATCH","DEBUGGER","DEFAULT","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","IS","KEYOF","LET","MODULE","OF","PACKAGE","PRIVATE","PROTECTED","PUBLIC","READONLY","TYPEOF","VAR","WITH","YIELD","tokenIsAlsoIdentifier","token","operatorTokenToString","DOT_DOT_DOT","LESSTHAN","GREATERTHAN","LESSTHAN_EQUALS","GREATERTHAN_EQUALS","EQUALS_EQUALS","EXCLAMATION_EQUALS","EQUALS_EQUALS_EQUALS","EXCLAMATION_EQUALS_EQUALS","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","program_1","Options","WASM32","importMemory","importTable","features","feature","Feature","ConversionKind","WrapMode","mangleImportName_moduleName","mangleImportName_elementName","Compiler","currentOuterFunction","currentEnum","currentType","memorySegments","stringSegments","functionTable","argcVar","argcSet","f32ModInstance","f64ModInstance","f32PowInstance","f64PowInstance","max","compile","startFunctionInstance","startFunctionBody","compileSource","funcRef","ensureFunctionType","i64_align","numPages","i64_shr_u","functionTableSize","functionTableExported","entries","compileSourceByPath","reportNode","File_0_not_found","COMPILED","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","nativeType","isConstant","MODULE_IMPORT","mangleImportName","initializeInStart","compileInlineConstant","compileExpression","precomputeExpressionRef","Compiling_constant_with_non_constant_initializer_as_mutable","mangleExportName","isTopLevel","compileEnum","previousValue","initInStart","valueDeclaration","AddI32","Cannot_export_a_mutable_global","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","nativeSizeType","makeConditionalAllocate","A_function_whose_declared_type_is_not_void_must_return_a_value","ensureTrampoline","ensureArgcSet","compileInterfaceDeclaration","compileNamespace","compileClassUsingTypeArguments","internalExportName","functionInstance","functionDeclaration","globalDeclaration","alternativeReportNode","resolveClassInclTypeArguments","compileClass","staticMembers","setter","ctorInstance","_e","_f","getterName","setterName","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","repeatLabel","alwaysTrue","condPre","incrExpr","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","contextualType","retainType","mask","conversionKind","wrapMode","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileInstanceOfExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","ensureSmallIntegerWrap","precomputeExpression","Conversion_from_type_0_to_1_requires_an_explicit_cast","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","leftExpr","leftType","rightExpr","rightType","commonType","compound","compileBinaryOverload","Operator_0_cannot_be_applied_to_types_1_and_2","compileAssignment","AddI64","AddF32","AddF64","SubI32","SubI64","SubF32","SubF64","MulI64","MulF32","MulF64","resolveFunction","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","resolvedElementExpression","isUnchecked","indexedSet","Index_signature_in_type_0_only_permits_reading","Index_signature_is_missing_in_type_0","valueWithCorrectType","tee","thisExpression","resolvedThisExpression","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","compileCallIndirect","typeArgumentNodes","resolveTypeArguments","compileCall","checkCallSignature","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","inline","compileCallInlineUnchecked","numArgumentsInclThis","previousFlow","thisLocal","paramExpr","argumentLocal","bodyStatement","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","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","compileStaticString","compileObjectLiteral","stringValue","stringSegment","stringLength","stringBuffer","stringOffset","stringType","elementType","isStatic","arrayInstance","arrayType","elementCount","nativeElementType","byteLength","Int32Array","Float32Array","Float64Array","usizeTypeSize","arraySize","bufferTotalSize","clz","data","writeI64","writeI32","writeF32","writeF64","nativeArrayType","ctor","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","ifThenFlow","ifThenExpr","ifThenType","ifElseFlow","ifElseExpr","ifElseType","getValue","nativeOne","setValue","NegF32","NegF64","makeIsFalseish","ExtendI8ToI32","ExtendI16ToI32","field","fieldType","nativeFieldType","fieldDeclaration","parentElement","builtinsFile","Parser","backlog","seenlog","donelog","tryParseSignatureIsSignature","parseParametersThis","parseFile","indexOf","tn","parseTopLevelStatement","startPos","parseDecorator","skipStatement","exportStart","exportEnd","contextIsAmbient","A_declare_modifier_cannot_be_used_in_an_already_ambient_context","first","parseEnum","parseVariable","parseFunction","parseStatement","parseClassOrInterface","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","Decorators_are_not_valid_here","nextFile","clear","parseType","acceptParenthesized","suppressErrors","isNullableSignature","tryParseSignature","Unexpected_token","innerType","Identifier_expected","nullable","parameter","bracketStart","bracketRange","isSignature","REST","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","VIRTUAL","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","ExportsWalker","includePrivate","todo","walk","visitElement","visitGlobal","visitEnum","visitFunctionInstances","visitClassInstances","visitField","prop","hasCompiledMember","_g","_h","_j","visitNamespace","visitFunction","visitClass","IDLBuilder","indentLevel","build","isConst","indent","typeToString","i64_to_string","members_1","members_1_1","visitInterface","TSDBuilder","numMembers","members_2","members_2_1","Decompiler","functionId","decompile","decompiler","decompileFunction","nativeTypeToType","decompileExpression","nested","string","Loop","Break","Switch","CallImport","CallIndirect","SetGlobal","Store","AbsF32","CeilF32","FloorF32","TruncF32","NearestF32","SqrtF32","ClzI64","CtzI64","PopcntI64","AbsF64","CeilF64","FloorF64","TruncF64","NearestF64","SqrtF64","ReinterpretF32","ReinterpretF64","ReinterpretI32","ReinterpretI64","RotlI32","RotrI32","RotlI64","RotrI64","CopysignF32","MinF32","MaxF32","CopysignF64","MinF64","MaxF64","Drop","Return","Host","CurrentMemory","GrowMemory","AtomicCmpxchg","AtomicRMW","AtomicWait","AtomicWake","Auto","decompiler_1","definitions_1","formatDiagnostic","parser_1","parser","nextDiagnostic","isInfo","isWarning","isError","createOptions","setTarget","setNoTreeShaking","setNoAssert","setImportMemory","setImportTable","setSourceMap","setMemoryBase","setGlobalAlias","FEATURE_SIGN_EXTENSION","FEATURE_MUTABLE_GLOBAL","enableFeature","setOptimizeLevelHints","optimizeLevel","shrinkLevel","finishParsing","compileProgram","decompileModule","buildIDL","buildTSD","Long","wasm","WebAssembly","Instance","low","high","unsigned","isLong","obj","__isLong__","INT_CACHE","UINT_CACHE","fromInt","cachedObj","cache","fromBits","fromNumber","isNaN","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","Math","pow","fromString","radix","RangeError","radixToPower","parseInt","power","mul","fromValue","TWO_PWR_16_DBL","TWO_PWR_24","ONE","UONE","NEG_ONE","LongPrototype","toInt","toNumber","isZero","isNegative","eq","radixLong","div","rem1","sub","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","equals","notEquals","neq","ne","lessThan","comp","lt","lessThanOrEqual","lte","le","greaterThan","gt","greaterThanOrEqual","gte","ge","compare","thisNeg","otherNeg","negate","not","addend","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","subtract","subtrahend","multiply","multiplier","get_high","b00","divide","divisor","approx","res","div_u","div_s","toUnsigned","shru","shr","shl","floor","log2","log","LN2","delta","approxRes","approxRem","modulo","rem_u","rem_s","mod","and","or","xor","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toSigned","toBytes","toBytesLE","toBytesBE","hi","lo","fromBytes","fromBytesLE","fromBytesBE","i64_div","i64_div_u","i64_rem","i64_rem_u","i64_xor","i64_shr","i64_eq","minSafeF32","MIN_SAFE_INTEGER","maxSafeF32","MAX_SAFE_INTEGER","minSafeF64","maxSafeF64","fround","f32_as_i32","i32_as_f32","f64_as_i64","i64_as_f64","ReportMode","reportMode","REPORT","resolveSignature","numTypeArguments","paramType","instanceKey","placeholderType","parameterTypeNodes","parameterTypeNode","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","_k","_l","_m","overloadPrototype","operatorPartial","typeParameterNodes","readI32","readI64","readF32","readF64","valueI64","indentX1","indentX2","indentX4","separator","ipos","dirname","origin","CharCode","lookupInUnicodeMap","unicodeIdentifierStart","isUnicodeIdentifierStart","unicodeIdentifierPart","isUnicodeIdentifierPart","mid","compiler","evaluateConstantType","tempLocal0","tempLocal1","evaluateConstantOffset","alignLog2","fieldName","Type_0_has_no_property_1","abort","operandExprs","signatureParts","nativeParamTypes","operandType","deferASM","deferASMCall","typeArgument","valueType","allocateInternalName","allocatePrototype","An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf","allocateInstance","abortInternalName","abortPrototype","abortInstance","messageArg","filenameArg","binaryen","Binaryen","_malloc","_free","move_memory","dest","src","_memmove","HEAPU8","emitText","emitAsmjs","globalScope","HEAP","HEAP_OFFSET","oldHeap","copyWithin","UnreachableError","captureStackTrace","stack","AssertionError","ASC_TARGET","defineProperties","writable","MIN_POSITIVE_VALUE","EPSILON","clz32","abs","trunc","round","sqrt","x","y","sign","isTrueish","undefined","fromCodePoint","Number","isInteger","isArray"],"mappings":"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AM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,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,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAG1D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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__24__) {\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 = 29);\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 a builtin. */\r\n BUILTIN = 1 << 21,\r\n /** Is compiled. */\r\n COMPILED = 1 << 22,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 23,\r\n /** Is scoped. */\r\n SCOPED = 1 << 24,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 25,\r\n /** Is a virtual method. */\r\n VIRTUAL = 1 << 26,\r\n /** Is the main function. */\r\n MAIN = 1 << 27,\r\n\r\n // Other\r\n\r\n QUOTED = 1 << 28\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 * 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}\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.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 * 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 * A thin wrapper around Binaryen's C-API.\r\n * @module module\r\n *//***/\r\n\r\nimport {\r\n Target\r\n} from \"./compiler\";\r\n\r\nexport type ModuleRef = usize;\r\nexport type FunctionTypeRef = usize;\r\nexport type FunctionRef = usize;\r\nexport type ExpressionRef = usize;\r\nexport type GlobalRef = usize;\r\nexport type ImportRef = usize;\r\nexport type ExportRef = usize;\r\nexport type Index = u32;\r\n\r\nexport enum NativeType {\r\n None = _BinaryenTypeNone(),\r\n I32 = _BinaryenTypeInt32(),\r\n I64 = _BinaryenTypeInt64(),\r\n F32 = _BinaryenTypeFloat32(),\r\n F64 = _BinaryenTypeFloat64(),\r\n Unreachable = _BinaryenTypeUnreachable(),\r\n Auto = _BinaryenTypeAuto()\r\n}\r\n\r\nexport enum ExpressionId {\r\n Invalid = _BinaryenInvalidId(),\r\n Block = _BinaryenBlockId(),\r\n If = _BinaryenIfId(),\r\n Loop = _BinaryenLoopId(),\r\n Break = _BinaryenBreakId(),\r\n Switch = _BinaryenSwitchId(),\r\n Call = _BinaryenCallId(),\r\n CallImport = _BinaryenCallImportId(),\r\n CallIndirect = _BinaryenCallIndirectId(),\r\n GetLocal = _BinaryenGetLocalId(),\r\n SetLocal = _BinaryenSetLocalId(),\r\n GetGlobal = _BinaryenGetGlobalId(),\r\n SetGlobal = _BinaryenSetGlobalId(),\r\n Load = _BinaryenLoadId(),\r\n Store = _BinaryenStoreId(),\r\n Const = _BinaryenConstId(),\r\n Unary = _BinaryenUnaryId(),\r\n Binary = _BinaryenBinaryId(),\r\n Select = _BinaryenSelectId(),\r\n Drop = _BinaryenDropId(),\r\n Return = _BinaryenReturnId(),\r\n Host = _BinaryenHostId(),\r\n Nop = _BinaryenNopId(),\r\n Unreachable = _BinaryenUnreachableId(),\r\n AtomicCmpxchg = _BinaryenAtomicCmpxchgId(),\r\n AtomicRMW = _BinaryenAtomicRMWId(),\r\n AtomicWait = _BinaryenAtomicWaitId(),\r\n AtomicWake = _BinaryenAtomicWakeId()\r\n}\r\n\r\nexport enum UnaryOp {\r\n ClzI32 = _BinaryenClzInt32(),\r\n CtzI32 = _BinaryenCtzInt32(),\r\n PopcntI32 = _BinaryenPopcntInt32(),\r\n NegF32 = _BinaryenNegFloat32(),\r\n AbsF32 = _BinaryenAbsFloat32(),\r\n CeilF32 = _BinaryenCeilFloat32(),\r\n FloorF32 = _BinaryenFloorFloat32(),\r\n TruncF32 = _BinaryenTruncFloat32(),\r\n NearestF32 = _BinaryenNearestFloat32(),\r\n SqrtF32 = _BinaryenSqrtFloat32(),\r\n EqzI32 = _BinaryenEqZInt32(),\r\n ClzI64 = _BinaryenClzInt64(),\r\n CtzI64 = _BinaryenCtzInt64(),\r\n PopcntI64 = _BinaryenPopcntInt64(),\r\n NegF64 = _BinaryenNegFloat64(),\r\n AbsF64 = _BinaryenAbsFloat64(),\r\n CeilF64 = _BinaryenCeilFloat64(),\r\n FloorF64 = _BinaryenFloorFloat64(),\r\n TruncF64 = _BinaryenTruncFloat64(),\r\n NearestF64 = _BinaryenNearestFloat64(),\r\n SqrtF64 = _BinaryenSqrtFloat64(),\r\n EqzI64 = _BinaryenEqZInt64(),\r\n ExtendI32 = _BinaryenExtendSInt32(),\r\n ExtendU32 = _BinaryenExtendUInt32(),\r\n WrapI64 = _BinaryenWrapInt64(),\r\n TruncF32ToI32 = _BinaryenTruncSFloat32ToInt32(),\r\n TruncF32ToI64 = _BinaryenTruncSFloat32ToInt64(),\r\n TruncF32ToU32 = _BinaryenTruncUFloat32ToInt32(),\r\n TruncF32ToU64 = _BinaryenTruncUFloat32ToInt64(),\r\n TruncF64ToI32 = _BinaryenTruncSFloat64ToInt32(),\r\n TruncF64ToI64 = _BinaryenTruncSFloat64ToInt64(),\r\n TruncF64ToU32 = _BinaryenTruncUFloat64ToInt32(),\r\n TruncF64ToU64 = _BinaryenTruncUFloat64ToInt64(),\r\n ReinterpretF32 = _BinaryenReinterpretFloat32(),\r\n ReinterpretF64 = _BinaryenReinterpretFloat64(),\r\n ConvertI32ToF32 = _BinaryenConvertSInt32ToFloat32(),\r\n ConvertI32ToF64 = _BinaryenConvertSInt32ToFloat64(),\r\n ConvertU32ToF32 = _BinaryenConvertUInt32ToFloat32(),\r\n ConvertU32ToF64 = _BinaryenConvertUInt32ToFloat64(),\r\n ConvertI64ToF32 = _BinaryenConvertSInt64ToFloat32(),\r\n ConvertI64ToF64 = _BinaryenConvertSInt64ToFloat64(),\r\n ConvertU64ToF32 = _BinaryenConvertUInt64ToFloat32(),\r\n ConvertU64ToF64 = _BinaryenConvertUInt64ToFloat64(),\r\n PromoteF32 = _BinaryenPromoteFloat32(),\r\n DemoteF64 = _BinaryenDemoteFloat64(),\r\n ReinterpretI32 = _BinaryenReinterpretInt32(),\r\n ReinterpretI64 = _BinaryenReinterpretInt64(),\r\n\r\n // see: https://github.com/WebAssembly/sign-extension-ops\r\n ExtendI8ToI32 = _BinaryenExtendS8Int32(),\r\n ExtendI16ToI32 = _BinaryenExtendS16Int32(),\r\n ExtendI8ToI64 = _BinaryenExtendS8Int64(),\r\n ExtendI16ToI64 = _BinaryenExtendS16Int64(),\r\n ExtendI32ToI64 = _BinaryenExtendS32Int64()\r\n\r\n // see: https://github.com/WebAssembly/nontrapping-float-to-int-conversions\r\n // TruncF32ToI32Sat\r\n // TruncF32ToU32Sat\r\n // TruncF64ToI32Sat\r\n // TruncF64ToU32Sat\r\n // TruncF32ToI64Sat\r\n // TruncF32ToU64Sat\r\n // TruncF64ToI64Sat\r\n // TruncF64ToU64Sat\r\n}\r\n\r\nexport enum BinaryOp {\r\n AddI32 = _BinaryenAddInt32(),\r\n SubI32 = _BinaryenSubInt32(),\r\n MulI32 = _BinaryenMulInt32(),\r\n DivI32 = _BinaryenDivSInt32(),\r\n DivU32 = _BinaryenDivUInt32(),\r\n RemI32 = _BinaryenRemSInt32(),\r\n RemU32 = _BinaryenRemUInt32(),\r\n AndI32 = _BinaryenAndInt32(),\r\n OrI32 = _BinaryenOrInt32(),\r\n XorI32 = _BinaryenXorInt32(),\r\n ShlI32 = _BinaryenShlInt32(),\r\n ShrU32 = _BinaryenShrUInt32(),\r\n ShrI32 = _BinaryenShrSInt32(),\r\n RotlI32 = _BinaryenRotLInt32(),\r\n RotrI32 = _BinaryenRotRInt32(),\r\n EqI32 = _BinaryenEqInt32(),\r\n NeI32 = _BinaryenNeInt32(),\r\n LtI32 = _BinaryenLtSInt32(),\r\n LtU32 = _BinaryenLtUInt32(),\r\n LeI32 = _BinaryenLeSInt32(),\r\n LeU32 = _BinaryenLeUInt32(),\r\n GtI32 = _BinaryenGtSInt32(),\r\n GtU32 = _BinaryenGtUInt32(),\r\n GeI32 = _BinaryenGeSInt32(),\r\n GeU32 = _BinaryenGeUInt32(),\r\n AddI64 = _BinaryenAddInt64(),\r\n SubI64 = _BinaryenSubInt64(),\r\n MulI64 = _BinaryenMulInt64(),\r\n DivI64 = _BinaryenDivSInt64(),\r\n DivU64 = _BinaryenDivUInt64(),\r\n RemI64 = _BinaryenRemSInt64(),\r\n RemU64 = _BinaryenRemUInt64(),\r\n AndI64 = _BinaryenAndInt64(),\r\n OrI64 = _BinaryenOrInt64(),\r\n XorI64 = _BinaryenXorInt64(),\r\n ShlI64 = _BinaryenShlInt64(),\r\n ShrU64 = _BinaryenShrUInt64(),\r\n ShrI64 = _BinaryenShrSInt64(),\r\n RotlI64 = _BinaryenRotLInt64(),\r\n RotrI64 = _BinaryenRotRInt64(),\r\n EqI64 = _BinaryenEqInt64(),\r\n NeI64 = _BinaryenNeInt64(),\r\n LtI64 = _BinaryenLtSInt64(),\r\n LtU64 = _BinaryenLtUInt64(),\r\n LeI64 = _BinaryenLeSInt64(),\r\n LeU64 = _BinaryenLeUInt64(),\r\n GtI64 = _BinaryenGtSInt64(),\r\n GtU64 = _BinaryenGtUInt64(),\r\n GeI64 = _BinaryenGeSInt64(),\r\n GeU64 = _BinaryenGeUInt64(),\r\n AddF32 = _BinaryenAddFloat32(),\r\n SubF32 = _BinaryenSubFloat32(),\r\n MulF32 = _BinaryenMulFloat32(),\r\n DivF32 = _BinaryenDivFloat32(),\r\n CopysignF32 = _BinaryenCopySignFloat32(),\r\n MinF32 = _BinaryenMinFloat32(),\r\n MaxF32 = _BinaryenMaxFloat32(),\r\n EqF32 = _BinaryenEqFloat32(),\r\n NeF32 = _BinaryenNeFloat32(),\r\n LtF32 = _BinaryenLtFloat32(),\r\n LeF32 = _BinaryenLeFloat32(),\r\n GtF32 = _BinaryenGtFloat32(),\r\n GeF32 = _BinaryenGeFloat32(),\r\n AddF64 = _BinaryenAddFloat64(),\r\n SubF64 = _BinaryenSubFloat64(),\r\n MulF64 = _BinaryenMulFloat64(),\r\n DivF64 = _BinaryenDivFloat64(),\r\n CopysignF64 = _BinaryenCopySignFloat64(),\r\n MinF64 = _BinaryenMinFloat64(),\r\n MaxF64 = _BinaryenMaxFloat64(),\r\n EqF64 = _BinaryenEqFloat64(),\r\n NeF64 = _BinaryenNeFloat64(),\r\n LtF64 = _BinaryenLtFloat64(),\r\n LeF64 = _BinaryenLeFloat64(),\r\n GtF64 = _BinaryenGtFloat64(),\r\n GeF64 = _BinaryenGeFloat64()\r\n}\r\n\r\nexport enum HostOp {\r\n PageSize = _BinaryenPageSize(),\r\n CurrentMemory = _BinaryenCurrentMemory(),\r\n GrowMemory = _BinaryenGrowMemory(),\r\n HasFeature = _BinaryenHasFeature(),\r\n\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n // MoveMemory\r\n // SetMemory\r\n}\r\n\r\nexport enum AtomicRMWOp {\r\n Add = _BinaryenAtomicRMWAdd(),\r\n Sub = _BinaryenAtomicRMWSub(),\r\n And = _BinaryenAtomicRMWAnd(),\r\n Or = _BinaryenAtomicRMWOr(),\r\n Xor = _BinaryenAtomicRMWXor(),\r\n Xchg = _BinaryenAtomicRMWXchg()\r\n}\r\n\r\nexport class MemorySegment {\r\n\r\n buffer: Uint8Array;\r\n offset: I64;\r\n\r\n static create(buffer: Uint8Array, offset: I64): MemorySegment {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n }\r\n}\r\n\r\nexport class Module {\r\n\r\n ref: ModuleRef;\r\n\r\n private cachedByValue: usize;\r\n\r\n /** Maximum number of pages when targeting WASM32. */\r\n static readonly MAX_MEMORY_WASM32: Index = 0xffff;\r\n\r\n /** Maximum number of pages when targeting WASM64. */\r\n static readonly MAX_MEMORY_WASM64: Index = 0xffff; // TODO\r\n\r\n static create(): Module {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.cachedByValue = allocate_memory(16);\r\n return module;\r\n }\r\n\r\n static createFrom(buffer: Uint8Array): Module {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.cachedByValue = allocate_memory(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n free_memory(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeFunctionType(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunctionType(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocPtrArray(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, numNames, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) free_memory(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallImport(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCallImport(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocPtrArray(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[] | null,\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes ? varTypes.length : 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n private cachedTemporaryName: usize = 0;\r\n private hasTemporaryFunction: bool = false;\r\n\r\n addTemporaryFunction(result: NativeType, paramTypes: NativeType[] | null, body: ExpressionRef): FunctionRef {\r\n this.hasTemporaryFunction = assert(!this.hasTemporaryFunction);\r\n var tempName = this.cachedTemporaryName;\r\n if (!tempName) this.cachedTemporaryName = tempName = allocString(\"\"); // works because strings are interned\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n let typeRef = _BinaryenAddFunctionType(this.ref, tempName, result, cArr, paramTypes ? paramTypes.length : 0);\r\n return _BinaryenAddFunction(this.ref, tempName, typeRef, 0, 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeTemporaryFunction(): void {\r\n this.hasTemporaryFunction = !assert(this.hasTemporaryFunction);\r\n var tempName = assert(this.cachedTemporaryName);\r\n _BinaryenRemoveFunction(this.ref, tempName);\r\n _BinaryenRemoveFunctionType(this.ref, tempName);\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeImport(internalName: string): void {\r\n var cStr = allocString(internalName);\r\n try {\r\n _BinaryenRemoveImport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n free_memory(cArr3);\r\n free_memory(cArr2);\r\n free_memory(cArr1);\r\n for (let i = k - 1; i >= 0; --i) free_memory(segs[i]);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(funcs: FunctionRef[]): void {\r\n var cArr = allocPtrArray(funcs);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, funcs.length);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n free_memory(cArr);\r\n for (let i = numNames; i >= 0; --i) {\r\n free_memory(names[i]);\r\n }\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0;\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeFunction(func: FunctionRef): void {\r\n var names = this.cachedPrecomputeNames;\r\n if (!names) {\r\n let name = allocString(\"precompute\");\r\n this.cachedPrecomputeName = name;\r\n this.cachedPrecomputeNames = names = allocI32Array([ name ]);\r\n }\r\n _BinaryenFunctionRunPasses(func, this.ref, names, 1);\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): BinaryModule {\r\n var out = this.cachedByValue;\r\n var cStr = allocString(sourceMapUrl);\r\n var binaryPtr: usize = 0;\r\n var sourceMapPtr: usize = 0;\r\n try {\r\n _BinaryenModuleAllocateAndWrite(out, this.ref, cStr);\r\n binaryPtr = readInt(out);\r\n let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let ret = new BinaryModule();\r\n ret.output = readBuffer(binaryPtr, binaryBytes);\r\n ret.sourceMap = readString(sourceMapPtr);\r\n return ret;\r\n } finally {\r\n if (cStr) free_memory(cStr);\r\n if (binaryPtr) free_memory(binaryPtr);\r\n if (sourceMapPtr) free_memory(sourceMapPtr);\r\n }\r\n }\r\n\r\n toText(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n toAsmjs(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n dispose(): void {\r\n assert(this.ref);\r\n free_memory(this.cachedByValue);\r\n free_memory(this.cachedTemporaryName);\r\n free_memory(this.cachedPrecomputeName);\r\n free_memory(this.cachedPrecomputeNames);\r\n _BinaryenModuleDispose(this.ref);\r\n this.ref = 0;\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(\r\n expr: ExpressionRef,\r\n noSideEffects: bool = false,\r\n maxDepth: i32 = i32.MAX_VALUE\r\n ): ExpressionRef { // currently supports side effect free expressions only\r\n if (maxDepth < 0) return 0;\r\n maxDepth -= 1;\r\n\r\n var nested1: ExpressionRef,\r\n nested2: ExpressionRef;\r\n\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n }\r\n case ExpressionId.GetLocal: {\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n }\r\n case ExpressionId.GetGlobal: {\r\n let globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n }\r\n case ExpressionId.Load: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return (\r\n _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n );\r\n }\r\n case ExpressionId.Unary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n }\r\n case ExpressionId.Binary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\n// expressions\r\n\r\nexport function getExpressionId(expr: ExpressionRef): ExpressionId {\r\n return _BinaryenExpressionGetId(expr);\r\n}\r\n\r\nexport function getExpressionType(expr: ExpressionRef): NativeType {\r\n return _BinaryenExpressionGetType(expr);\r\n}\r\n\r\nexport function getConstValueI32(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI32(expr);\r\n}\r\n\r\nexport function getConstValueI64Low(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64Low(expr);\r\n}\r\n\r\nexport function getConstValueI64High(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64High(expr);\r\n}\r\n\r\nexport function getConstValueF32(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF32(expr);\r\n}\r\n\r\nexport function getConstValueF64(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF64(expr);\r\n}\r\n\r\nexport function getGetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenGetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenSetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSetLocalGetValue(expr);\r\n}\r\n\r\nexport function isTeeLocal(expr: ExpressionRef): bool {\r\n return _BinaryenSetLocalIsTee(expr);\r\n}\r\n\r\nexport function getBinaryOp(expr: ExpressionRef): BinaryOp {\r\n return _BinaryenBinaryGetOp(expr);\r\n}\r\n\r\nexport function getBinaryLeft(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetLeft(expr);\r\n}\r\n\r\nexport function getBinaryRight(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetRight(expr);\r\n}\r\n\r\nexport function getUnaryOp(expr: ExpressionRef): UnaryOp {\r\n return _BinaryenUnaryGetOp(expr);\r\n}\r\n\r\nexport function getUnaryValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenUnaryGetValue(expr);\r\n}\r\n\r\nexport function getLoadBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetBytes(expr);\r\n}\r\n\r\nexport function getLoadOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetOffset(expr);\r\n}\r\n\r\nexport function getLoadPtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoadGetPtr(expr);\r\n}\r\n\r\nexport function isLoadSigned(expr: ExpressionRef): bool {\r\n return _BinaryenLoadIsSigned(expr);\r\n}\r\n\r\nexport function getStoreBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetBytes(expr);\r\n}\r\n\r\nexport function getStoreOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetOffset(expr);\r\n}\r\n\r\nexport function getStorePtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetPtr(expr);\r\n}\r\n\r\nexport function getStoreValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetValue(expr);\r\n}\r\n\r\nexport function getBlockName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBlockGetName(expr));\r\n}\r\n\r\nexport function getBlockChildCount(expr: ExpressionRef): Index {\r\n return _BinaryenBlockGetNumChildren(expr);\r\n}\r\n\r\nexport function getBlockChild(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenBlockGetChild(expr, index);\r\n}\r\n\r\nexport function getIfCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetCondition(expr);\r\n}\r\n\r\nexport function getIfTrue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfTrue(expr);\r\n}\r\n\r\nexport function getIfFalse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfFalse(expr);\r\n}\r\n\r\nexport function getLoopName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenLoopGetName(expr));\r\n}\r\n\r\nexport function getLoopBody(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoopGetBody(expr);\r\n}\r\n\r\nexport function getBreakName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBreakGetName(expr));\r\n}\r\n\r\nexport function getBreakCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBreakGetCondition(expr);\r\n}\r\n\r\nexport function getSelectThen(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfTrue(expr);\r\n}\r\n\r\nexport function getSelectElse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfFalse(expr);\r\n}\r\n\r\nexport function getSelectCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetCondition(expr);\r\n}\r\n\r\nexport function getDropValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenDropGetValue(expr);\r\n}\r\n\r\nexport function getReturnValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenReturnGetValue(expr);\r\n}\r\n\r\nexport function getCallTarget(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenCallGetTarget(expr));\r\n}\r\n\r\nexport function getHostOp(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenHostGetOp(expr);\r\n}\r\n\r\nexport function getHostOperandCount(expr: ExpressionRef): Index {\r\n return _BinaryenHostGetNumOperands(expr);\r\n}\r\n\r\nexport function getHostOperand(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenHostGetOperand(expr, index);\r\n}\r\n\r\nexport function getHostName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenHostGetNameOperand(expr));\r\n}\r\n\r\n// functions\r\n\r\nexport function getFunctionBody(func: FunctionRef): ExpressionRef {\r\n return _BinaryenFunctionGetBody(func);\r\n}\r\n\r\nexport function getFunctionName(func: FunctionRef): string | null {\r\n return readString(_BinaryenFunctionGetName(func));\r\n}\r\n\r\nexport function getFunctionParamCount(func: FunctionRef): Index {\r\n return _BinaryenFunctionGetNumParams(func);\r\n}\r\n\r\nexport function getFunctionParamType(func: FunctionRef, index: Index): NativeType {\r\n return _BinaryenFunctionGetParam(func, index);\r\n}\r\n\r\nexport function getFunctionResultType(func: FunctionRef): NativeType {\r\n return _BinaryenFunctionGetResult(func);\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n }\r\n\r\n private constructor() {}\r\n\r\n addBlock(code: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlock(this.ref, code);\r\n }\r\n\r\n addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void {\r\n _RelooperAddBranch(from, to, condition, code);\r\n }\r\n\r\n addBlockWithSwitch(code: ExpressionRef, condition: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n }\r\n\r\n addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n }\r\n}\r\n\r\n// export function hasSideEffects(expr: ExpressionRef): bool {\r\n// switch (_BinaryenExpressionGetId(expr = getPtr(expr))) {\r\n// case ExpressionId.GetLocal:\r\n// case ExpressionId.GetGlobal:\r\n// case ExpressionId.Const:\r\n// case ExpressionId.Nop:\r\n// case ExpressionId.Unreachable: {\r\n// return false;\r\n// }\r\n// case ExpressionId.Block: {\r\n// for (let i = 0, k = _BinaryenBlockGetNumChildren(expr); i < k; ++i) {\r\n// if (hasSideEffects(_BinaryenBlockGetChild(expr, i))) return true;\r\n// }\r\n// return false;\r\n// }\r\n// case ExpressionId.If: {\r\n// return hasSideEffects(_BinaryenIfGetCondition(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfFalse(expr));\r\n// }\r\n// case ExpressionId.Unary: {\r\n// return hasSideEffects(_BinaryenUnaryGetValue(expr));\r\n// }\r\n// case ExpressionId.Binary: {\r\n// return hasSideEffects(_BinaryenBinaryGetLeft(expr))\r\n// || hasSideEffects(_BinaryenBinaryGetRight(expr));\r\n// }\r\n// case ExpressionId.Drop: {\r\n// return hasSideEffects(_BinaryenDropGetValue(expr));\r\n// }\r\n// case ExpressionId.Select: {\r\n// return hasSideEffects(_BinaryenSelectGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenSelectGetIfFalse(expr))\r\n// || hasSideEffects(_BinaryenSelectGetCondition(expr));\r\n// }\r\n// }\r\n// return true;\r\n// }\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var numValues = u8s.length;\r\n var ptr = allocate_memory(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = allocate_memory(i32s.length << 2);\r\n var idx = ptr;\r\n for (let i = 0, k = i32s.length; i < k; ++i) {\r\n let val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocPtrArray(ptrs: usize[] | null): usize {\r\n return allocI32Array(ptrs); // TODO: WASM64 one day\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = allocate_memory(stringLengthUTF8(str) + 1);\r\n // the following is based on Emscripten's stringToUTF8Array\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\nfunction readInt(ptr: usize): i32 {\r\n return (\r\n load(ptr ) |\r\n (load(ptr + 1) << 8) |\r\n (load(ptr + 2) << 16) |\r\n (load(ptr + 3) << 24)\r\n );\r\n}\r\n\r\nfunction readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (let i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n arr.push(cp);\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\nexport class BinaryModule {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n","/**\r\n * 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} 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 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 /** 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\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 currentExport.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 currentExport.member.externalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n queuedExport.member.range, queuedExport.member.name.text\r\n );\r\n }\r\n break;\r\n }\r\n } while (currentExport);\r\n }\r\n\r\n // resolve base prototypes of derived classes\r\n 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 var 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 // register 'Array'\r\n var arrayPrototype = this.elementsLookup.get(\"Array\");\r\n if (arrayPrototype) {\r\n assert(arrayPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayPrototype = arrayPrototype;\r\n }\r\n\r\n // register 'String'\r\n var stringPrototype = this.elementsLookup.get(\"String\");\r\n if (stringPrototype) {\r\n assert(stringPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n let stringInstance = resolver.resolveClass(stringPrototype, null);\r\n if (stringInstance) {\r\n if (this.typesLookup.has(\"string\")) {\r\n let declaration = (stringPrototype).declaration;\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n } else {\r\n this.stringInstance = stringInstance;\r\n this.typesLookup.set(\"string\", stringInstance.type);\r\n }\r\n }\r\n }\r\n\r\n // 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\");\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\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 (!(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 the element globally if it is ...\r\n if (\r\n // explicitly annotated with @global - or -\r\n (element.hasDecorator(DecoratorFlags.GLOBAL)) ||\r\n // part of the special builtins library file - or -\r\n (declaration.range.source.is(CommonFlags.BUILTIN)) ||\r\n // exported from a top-level library file\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 // builtins can use the global name directly instead of being just an alias\r\n if (element.is(CommonFlags.BUILTIN)) element.internalName = globalName;\r\n }\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 this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, prototype);\r\n }\r\n }\r\n\r\n // initialize members\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n 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.NONE)\r\n : DecoratorFlags.NONE\r\n );\r\n staticField.parent = classPrototype;\r\n classPrototype.members.set(name, staticField);\r\n this.elementsLookup.set(internalName, staticField);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n staticField.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance fields are remembered until resolved\r\n } else {\r\n if (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 this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, element);\r\n }\r\n }\r\n\r\n var values = declaration.values;\r\n for (let i = 0, k = values.length; i < k; ++i) {\r\n this.initializeEnumValue(values[i], element);\r\n }\r\n\r\n this.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 identifier: 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 = identifier.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 = identifier.text;\r\n (filespace).members.set(simpleName, element);\r\n\r\n // add global alias if from a library file\r\n if (identifier.range.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 identifier.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 }\r\n\r\n private initializeExport(\r\n member: ExportMember,\r\n internalPath: string | null,\r\n queuedExports: Map\r\n ): void {\r\n var externalName = member.range.source.internalPath + PATH_DELIMITER + member.externalName.text;\r\n if (this.fileLevelExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n var referencedName: string;\r\n var referencedElement: Element | null;\r\n var queuedExport: QueuedExport | null;\r\n\r\n // export local element\r\n if (internalPath == null) {\r\n referencedName = member.range.source.internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the element exists\r\n if (referencedElement = this.elementsLookup.get(referencedName)) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = false;\r\n queuedExport.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 this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, prototype);\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 this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, prototype);\r\n }\r\n }\r\n\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"interface member expected\");\r\n }\r\n }\r\n }\r\n\r\n this.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 if (this.moduleLevelExports.get(simpleName) !== namespace) { // not merged\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n this.moduleLevelExports.set(simpleName, namespace);\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.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 (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 this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n continue;\r\n }\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, global);\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}\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 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 | CommonFlags.BUILTIN) || prototype.is(CommonFlags.DECLARE))) {\r\n let localIndex = 0;\r\n if (parent && parent.kind == ElementKind.CLASS) {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let local = new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n );\r\n this.localsByName.set(\"this\", local);\r\n this.localsByIndex[local.index] = local;\r\n let inheritedTypeArguments = (parent).contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments.has(inheritedName)) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n }\r\n } else {\r\n assert(!this.is(CommonFlags.INSTANCE)); // internal error\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n let parameterType = parameterTypes[i];\r\n let parameterName = signature.getParameterName(i);\r\n let local = new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n // FIXME: declaration?\r\n );\r\n this.localsByName.set(parameterName, local);\r\n this.localsByIndex[local.index] = local;\r\n }\r\n }\r\n this.flow = Flow.create(this);\r\n }\r\n\r\n /** Adds a local of the specified type, with an optional name. */\r\n addLocal(type: Type, name: string | null = null, declaration: VariableDeclaration | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = this.signature.parameterTypes.length + this.additionalLocals.length;\r\n if (this.is(CommonFlags.INSTANCE)) ++localIndex;\r\n var local = new Local(\r\n this.prototype.program,\r\n name\r\n ? name\r\n : \"var$\" + localIndex.toString(10),\r\n localIndex,\r\n type,\r\n declaration\r\n );\r\n if (name) {\r\n if (this.localsByName.has(name)) throw new Error(\"duplicate local name\");\r\n this.localsByName.set(name, local);\r\n }\r\n this.localsByIndex[local.index] = local;\r\n this.additionalLocals.push(type);\r\n return local;\r\n }\r\n\r\n private tempI32s: Local[] | null = null;\r\n private tempI64s: Local[] | null = null;\r\n private tempF32s: Local[] | null = null;\r\n private tempF64s: Local[] | null = null;\r\n\r\n /** Gets a free temporary local of the specified type. */\r\n getTempLocal(type: Type, wrapped: bool = false): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s;\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps && temps.length) {\r\n local = temps.pop();\r\n local.type = type;\r\n local.flags = CommonFlags.NONE;\r\n } else {\r\n local = this.addLocal(type);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n if (local.is(CommonFlags.INLINED)) return;\r\n assert(local.index >= 0);\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n assert(local.index >= 0);\r\n temps.push(local);\r\n }\r\n\r\n /** Gets and immediately frees a temporary local of the specified type. */\r\n getAndFreeTempLocal(type: Type, wrapped: bool): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps.length) {\r\n local = temps[temps.length - 1];\r\n local.type = type;\r\n } else {\r\n local = this.addLocal(type);\r\n temps.push(local);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Enters a(nother) break context. */\r\n enterBreakContext(): string {\r\n var id = this.nextBreakId++;\r\n if (!this.breakStack) this.breakStack = [ id ];\r\n else this.breakStack.push(id);\r\n return this.breakContext = id.toString(10);\r\n }\r\n\r\n /** Leaves the current break context. */\r\n leaveBreakContext(): void {\r\n assert(this.breakStack != null);\r\n var length = (this.breakStack).length;\r\n assert(length > 0);\r\n (this.breakStack).pop();\r\n if (length > 1) {\r\n this.breakContext = (this.breakStack)[length - 2].toString(10);\r\n } else {\r\n this.breakContext = null;\r\n this.breakStack = null;\r\n }\r\n }\r\n\r\n /** Finalizes the function once compiled, releasing no longer needed resources. */\r\n finalize(module: Module, ref: FunctionRef): void {\r\n this.ref = ref;\r\n assert(!this.breakStack || !this.breakStack.length); // internal error\r\n this.breakStack = null;\r\n this.breakContext = null;\r\n this.tempI32s = this.tempI64s = this.tempF32s = this.tempF64s = null;\r\n if (this.program.options.sourceMap) {\r\n let debugLocations = this.debugLocations;\r\n for (let i = 0, k = debugLocations.length; i < k; ++i) {\r\n let debugLocation = debugLocations[i];\r\n module.setDebugLocation(\r\n ref,\r\n debugLocation.debugInfoRef,\r\n debugLocation.source.debugInfoIndex,\r\n debugLocation.line,\r\n debugLocation.column\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n}\r\n\r\n/** A resolved function target, that is a function called indirectly by an index and signature. */\r\nexport class FunctionTarget extends Element {\r\n\r\n kind = ElementKind.FUNCTION_TARGET;\r\n\r\n /** Underlying signature. */\r\n signature: Signature;\r\n /** Function type. */\r\n type: Type;\r\n\r\n /** Constructs a new function target. */\r\n constructor(program: Program, signature: Signature) {\r\n super(program, \"\", \"\");\r\n var simpleName = signature.toSignatureString();\r\n this.simpleName = simpleName;\r\n this.internalName = simpleName;\r\n this.signature = signature;\r\n this.type = Type.u32.asFunction(signature);\r\n }\r\n}\r\n\r\n/** A yet unresolved instance field prototype. */\r\nexport class FieldPrototype extends Element {\r\n\r\n kind = ElementKind.FIELD_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FieldDeclaration;\r\n /** Parent class prototype. */\r\n classPrototype: ClassPrototype;\r\n\r\n /** Constructs a new field prototype. */\r\n constructor(\r\n classPrototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FieldDeclaration\r\n ) {\r\n super(classPrototype.program, simpleName, internalName);\r\n this.classPrototype = classPrototype;\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** A resolved instance field. */\r\nexport class Field extends VariableLikeElement {\r\n\r\n kind = ElementKind.FIELD;\r\n\r\n /** Field prototype reference. */\r\n prototype: FieldPrototype;\r\n /** Field memory offset, if an instance field. */\r\n memoryOffset: i32 = -1;\r\n\r\n /** Constructs a new field. */\r\n constructor(\r\n prototype: FieldPrototype,\r\n internalName: string,\r\n type: Type,\r\n declaration: FieldDeclaration,\r\n parent: Class\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName, type, declaration);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.type = type;\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A property comprised of a getter and a setter function. */\r\nexport class Property extends Element {\r\n\r\n kind = ElementKind.PROPERTY;\r\n\r\n /** Parent class prototype. */\r\n parent: ClassPrototype;\r\n /** Getter prototype. */\r\n getterPrototype: FunctionPrototype | null = null;\r\n /** Setter prototype. */\r\n setterPrototype: FunctionPrototype | null = null;\r\n\r\n /** Constructs a new property prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n parent: ClassPrototype\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A yet unresolved class prototype. */\r\nexport class ClassPrototype extends Element {\r\n\r\n kind = ElementKind.CLASS_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: ClassDeclaration;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Instance member prototypes. */\r\n instanceMembers: Map | null = null;\r\n /** Base class prototype, if applicable. */\r\n basePrototype: ClassPrototype | null = null; // set in Program#initialize\r\n /** Constructor prototype. */\r\n constructorPrototype: FunctionPrototype | null = null;\r\n /** Operator overload prototypes. */\r\n overloadPrototypes: Map = new Map();\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A resolved class. */\r\nexport class Class extends Element {\r\n\r\n kind = ElementKind.CLASS;\r\n\r\n /** Prototype reference. */\r\n prototype: ClassPrototype;\r\n /** Resolved type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Resolved class type. */\r\n type: Type;\r\n /** Base class, if applicable. */\r\n base: Class | null;\r\n /** Contextual type arguments for fields and methods. */\r\n contextualTypeArguments: Map | null = null;\r\n /** Current member memory offset. */\r\n currentMemoryOffset: u32 = 0;\r\n /** Constructor instance. */\r\n constructorInstance: Function | null = null;\r\n /** Operator overloads. */\r\n overloads: Map | null = null;\r\n\r\n /** Constructs a new class. */\r\n constructor(\r\n prototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] | null = null,\r\n base: Class | null = null\r\n ) {\r\n super(prototype.program, simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.typeArguments = typeArguments;\r\n this.type = prototype.program.options.usizeType.asClass(this);\r\n this.base = base;\r\n\r\n // inherit static members and contextual type arguments from base class\r\n if (base) {\r\n let inheritedTypeArguments = base.contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [baseName, baseType] of inheritedTypeArguments) {\r\n this.contextualTypeArguments.set(baseName, baseType);\r\n }\r\n }\r\n }\r\n\r\n // apply instance-specific contextual type arguments\r\n var declaration = this.prototype.declaration;\r\n var i: i32, k: i32;\r\n if (declaration) { // irrelevant for built-ins\r\n let typeParameters = declaration.typeParameters;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n if (k) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (i = 0; i < k; ++i) {\r\n this.contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n }\r\n } else if (typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n }\r\n }\r\n\r\n /** Tests if a value of this class type is assignable to a target of the specified class type. */\r\n isAssignableTo(target: Class): bool {\r\n var current: Class | null = this;\r\n do if (current == target) return true;\r\n while (current = current.base);\r\n return false;\r\n }\r\n\r\n /** Looks up the operator overload of the specified kind. */\r\n lookupOverload(kind: OperatorKind, unchecked: bool = false): Function | null {\r\n if (unchecked) {\r\n switch (kind) {\r\n case OperatorKind.INDEXED_GET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_GET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n case OperatorKind.INDEXED_SET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_SET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n var instance: Class | null = this;\r\n do {\r\n let overloads = instance.overloads;\r\n if (overloads) {\r\n let overload = overloads.get(kind);\r\n if (overload) return overload;\r\n }\r\n } while (instance = instance.base);\r\n return null;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A yet unresolved interface. */\r\nexport class InterfacePrototype extends ClassPrototype {\r\n\r\n kind = ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: InterfaceDeclaration; // more specific\r\n\r\n /** Constructs a new interface prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: InterfaceDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, declaration, decoratorFlags);\r\n }\r\n}\r\n\r\n/** A resolved interface. */\r\nexport class Interface extends Class {\r\n\r\n kind = ElementKind.INTERFACE;\r\n\r\n /** Prototype reference. */\r\n prototype: InterfacePrototype; // more specific\r\n /** Base interface, if applcable. */\r\n base: Interface | null; // more specific\r\n\r\n /** Constructs a new interface. */\r\n constructor(\r\n prototype: InterfacePrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, simpleName, internalName, typeArguments, base);\r\n }\r\n}\r\n\r\n/** Control flow flags indicating specific conditions. */\r\nexport const enum FlowFlags {\r\n /** No specific conditions. */\r\n NONE = 0,\r\n\r\n // 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 * Mappings from AssemblyScript types to WebAssembly types.\r\n * @module types\r\n *//***/\r\n\r\nimport {\r\n Class,\r\n FunctionTarget\r\n} from \"./program\";\r\n\r\nimport {\r\n NativeType,\r\n ExpressionRef,\r\n Module\r\n} from \"./module\";\r\n\r\n/** Indicates the kind of a type. */\r\nexport const enum TypeKind {\r\n\r\n // signed integers\r\n\r\n /** An 8-bit signed integer. */\r\n I8,\r\n /** A 16-bit signed integer. */\r\n I16,\r\n /** A 32-bit signed integer. */\r\n I32,\r\n /** A 64-bit signed integer. */\r\n I64,\r\n /** A 32-bit/64-bit signed integer, depending on the target. */\r\n ISIZE,\r\n\r\n // unsigned integers\r\n\r\n /** An 8-bit unsigned integer. */\r\n U8,\r\n /** A 16-bit unsigned integer. */\r\n U16,\r\n /** A 32-bit unsigned integer. Also the base of function types. */\r\n U32,\r\n /** A 64-bit unsigned integer. */\r\n U64,\r\n /** A 32-bit/64-bit unsigned integer, depending on the target. Also the base of class types. */\r\n USIZE,\r\n /** A 1-bit unsigned integer. */\r\n BOOL, // sic\r\n\r\n // floats\r\n\r\n /** A 32-bit float. */\r\n F32,\r\n /** A 64-bit double. */\r\n F64,\r\n\r\n // other\r\n\r\n /** No return type. */\r\n VOID\r\n}\r\n\r\n/** Indicates capabilities of a type. */\r\nexport const enum TypeFlags {\r\n NONE = 0,\r\n /** Is a signed type that can represent negative values. */\r\n SIGNED = 1 << 0,\r\n /** Is an unsigned type that cannot represent negative values. */\r\n UNSIGNED = 1 << 1,\r\n /** Is an integer type. */\r\n INTEGER = 1 << 2,\r\n /** Is a floating point type. */\r\n FLOAT = 1 << 3,\r\n /** Is a pointer type. */\r\n POINTER = 1 << 4,\r\n /** Is smaller than 32-bits. */\r\n SHORT = 1 << 5,\r\n /** Is larger than 32-bits. */\r\n LONG = 1 << 6,\r\n /** Is a value type. */\r\n VALUE = 1 << 7,\r\n /** Is a reference type. */\r\n REFERENCE = 1 << 8,\r\n /** Is a nullable type. */\r\n NULLABLE = 1 << 9\r\n}\r\n\r\n/** Represents a resolved type. */\r\nexport class Type {\r\n\r\n /** Type kind. */\r\n kind: TypeKind;\r\n /** Type flags. */\r\n flags: TypeFlags;\r\n /** Size in bits. */\r\n size: u32;\r\n /** Size in bytes. */\r\n byteSize: i32;\r\n /** Underlying class reference, if a class type. */\r\n classReference: Class | null;\r\n /** Underlying signature reference, if a function type. */\r\n signatureReference: Signature | null;\r\n /** Respective non-nullable type, if nullable. */\r\n nonNullableType: Type;\r\n /** Cached nullable type, if non-nullable. */\r\n private cachedNullableType: Type | null = null;\r\n\r\n /** Constructs a new resolved type. */\r\n constructor(kind: TypeKind, flags: TypeFlags, size: u32) {\r\n this.kind = kind;\r\n this.flags = flags;\r\n this.size = size;\r\n this.byteSize = ceil(size / 8);\r\n this.classReference = null;\r\n this.signatureReference = null;\r\n this.nonNullableType = this;\r\n }\r\n\r\n /** Returns the 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 /** 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","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\r\n * A TypeScript tokenizer modified for AssemblyScript.\r\n *\r\n * Skips over trivia and provides a general mark/reset mechanism for the parser to utilize on\r\n * ambiguous tokens.\r\n *\r\n * @module tokenizer\r\n *//***/\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Source,\r\n CommentKind\r\n} from \"./ast\";\r\n\r\nimport {\r\n CharCode,\r\n isLineBreak,\r\n isWhiteSpace,\r\n isIdentifierStart,\r\n isIdentifierPart,\r\n isDecimalDigit,\r\n isOctalDigit,\r\n isKeywordCharacter\r\n} from \"./util\";\r\n\r\n/** Named token types. */\r\nexport enum Token {\r\n\r\n // keywords\r\n // discarded: ANY, BOOLEAN, NEVER, NUMBER, STRING, SYMBOL, UNDEFINED, LESSTHAN_SLASH\r\n\r\n ABSTRACT,\r\n AS,\r\n ASYNC,\r\n AWAIT, // ES2017\r\n BREAK, // ES2017\r\n CASE, // ES2017\r\n CATCH, // ES2017\r\n CLASS, // ES2017\r\n CONST, // ES2017\r\n CONTINUE, // ES2017\r\n CONSTRUCTOR,\r\n DEBUGGER, // ES2017\r\n DECLARE,\r\n DEFAULT, // ES2017\r\n DELETE, // ES2017\r\n DO, // ES2017\r\n ELSE, // ES2017\r\n ENUM, // ES2017 future\r\n EXPORT, // ES2017\r\n EXTENDS, // ES2017\r\n FALSE, // ES\r\n FINALLY, // ES2017\r\n FOR, // ES2017\r\n FROM, // AS possible identifier\r\n FUNCTION, // ES2017\r\n GET,\r\n IF, // ES2017\r\n IMPLEMENTS, // ES2017 non-lexical\r\n IMPORT, // ES2017\r\n IN, // ES2017\r\n INSTANCEOF, // ES2017\r\n INTERFACE, // ES2017 non-lexical\r\n IS,\r\n KEYOF,\r\n LET, // ES2017 non-lexical\r\n MODULE, // AS possible identifier\r\n NAMESPACE, // AS possible identifier\r\n NEW, // ES2017\r\n NULL, // ES\r\n OF,\r\n PACKAGE, // ES2017 non-lexical\r\n PRIVATE, // ES2017 non-lexical\r\n PROTECTED, // ES2017 non-lexical\r\n PUBLIC, // ES2017 non-lexical\r\n READONLY,\r\n RETURN, // ES2017\r\n SET,\r\n STATIC, // ES2017 non-lexical\r\n SUPER, // ES2017\r\n SWITCH, // ES2017\r\n THIS, // ES2017\r\n THROW, // ES2017\r\n TRUE, // ES\r\n TRY, // ES2017\r\n TYPE, // AS possible identifier\r\n TYPEOF, // ES2017\r\n VAR, // ES2017\r\n VOID, // ES2017\r\n WHILE, // ES2017\r\n WITH, // ES2017\r\n YIELD, // ES2017\r\n\r\n // punctuation\r\n\r\n OPENBRACE,\r\n CLOSEBRACE,\r\n OPENPAREN,\r\n CLOSEPAREN,\r\n OPENBRACKET,\r\n CLOSEBRACKET,\r\n DOT,\r\n DOT_DOT_DOT,\r\n SEMICOLON,\r\n COMMA,\r\n LESSTHAN,\r\n GREATERTHAN,\r\n LESSTHAN_EQUALS,\r\n GREATERTHAN_EQUALS,\r\n EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS,\r\n EQUALS_EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS_EQUALS,\r\n EQUALS_GREATERTHAN,\r\n PLUS,\r\n MINUS,\r\n ASTERISK_ASTERISK,\r\n ASTERISK,\r\n SLASH,\r\n PERCENT,\r\n PLUS_PLUS,\r\n MINUS_MINUS,\r\n LESSTHAN_LESSTHAN,\r\n GREATERTHAN_GREATERTHAN,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN,\r\n AMPERSAND,\r\n BAR,\r\n CARET,\r\n EXCLAMATION,\r\n TILDE,\r\n AMPERSAND_AMPERSAND,\r\n BAR_BAR,\r\n QUESTION,\r\n COLON,\r\n EQUALS,\r\n PLUS_EQUALS,\r\n MINUS_EQUALS,\r\n ASTERISK_EQUALS,\r\n ASTERISK_ASTERISK_EQUALS,\r\n SLASH_EQUALS,\r\n PERCENT_EQUALS,\r\n LESSTHAN_LESSTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS,\r\n AMPERSAND_EQUALS,\r\n BAR_EQUALS,\r\n CARET_EQUALS,\r\n AT,\r\n\r\n // literals\r\n\r\n IDENTIFIER,\r\n STRINGLITERAL,\r\n INTEGERLITERAL,\r\n FLOATLITERAL,\r\n\r\n // meta\r\n\r\n INVALID,\r\n ENDOFFILE\r\n}\r\n\r\nexport 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","/**\n * Generated from diagnosticsMessages.json. Do not edit.\n * @module diagnostics\n *//***/\n\n/* tslint:disable:max-line-length */\n\n/** Enum of available diagnostic codes. */\nexport enum DiagnosticCode {\n Operation_not_supported = 100,\n Operation_is_unsafe = 101,\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\n Type_0_cannot_be_changed_to_type_1 = 202,\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\n Basic_type_0_cannot_be_nullable = 204,\n Cannot_export_a_mutable_global = 205,\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\n Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa = 207,\n Unmanaged_classes_cannot_implement_interfaces = 208,\n Invalid_regular_expression_flags = 209,\n Implementation_0_must_match_the_signature_1 = 210,\n Class_0_is_sealed_and_cannot_be_extended = 211,\n Decorator_0_is_not_valid_here = 212,\n Duplicate_decorator = 213,\n An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf = 214,\n Optional_parameter_must_have_an_initializer = 215,\n Constructor_of_class_0_must_not_require_any_arguments = 216,\n Unterminated_string_literal = 1002,\n Identifier_expected = 1003,\n _0_expected = 1005,\n A_file_cannot_have_a_reference_to_itself = 1006,\n Trailing_comma_not_allowed = 1009,\n Unexpected_token = 1012,\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\n Parameter_cannot_have_question_mark_and_initializer = 1015,\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\n Enum_member_must_have_initializer = 1061,\n Statements_are_not_allowed_in_ambient_contexts = 1036,\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\n _0_modifier_cannot_be_used_here = 1042,\n A_rest_parameter_cannot_be_optional = 1047,\n A_rest_parameter_cannot_have_an_initializer = 1048,\n A_set_accessor_must_have_exactly_one_parameter = 1049,\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\n A_get_accessor_cannot_have_parameters = 1054,\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\n An_accessor_cannot_have_type_parameters = 1094,\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\n Type_parameter_list_cannot_be_empty = 1098,\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\n Expression_expected = 1109,\n Type_expected = 1110,\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\n Duplicate_label_0 = 1114,\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\n Digit_expected = 1124,\n Hexadecimal_digit_expected = 1125,\n Unexpected_end_of_text = 1126,\n Invalid_character = 1127,\n _case_or_default_expected = 1130,\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\n Type_argument_expected = 1140,\n String_literal_expected = 1141,\n Line_break_not_permitted_here = 1142,\n Declaration_expected = 1146,\n _const_declarations_must_be_initialized = 1155,\n Unterminated_regular_expression_literal = 1161,\n Interface_declaration_cannot_have_implements_clause = 1176,\n Binary_digit_expected = 1177,\n Octal_digit_expected = 1178,\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\n Unterminated_Unicode_escape_sequence = 1199,\n Decorators_are_not_valid_here = 1206,\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\n Method_0_cannot_have_an_implementation_because_it_is_marked_abstract = 1245,\n A_class_may_only_extend_another_class = 1311,\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\n Duplicate_identifier_0 = 2300,\n Cannot_find_name_0 = 2304,\n Module_0_has_no_exported_member_1 = 2305,\n Generic_type_0_requires_1_type_argument_s = 2314,\n Type_0_is_not_generic = 2315,\n Type_0_is_not_assignable_to_type_1 = 2322,\n Index_signature_is_missing_in_type_0 = 2329,\n _this_cannot_be_referenced_in_current_location = 2332,\n _super_can_only_be_referenced_in_a_derived_class = 2335,\n Property_0_does_not_exist_on_type_1 = 2339,\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\n _get_and_set_accessor_must_have_the_same_type = 2380,\n Constructor_implementation_is_missing = 2390,\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\n Multiple_constructor_implementations_are_not_allowed = 2392,\n Duplicate_function_implementation = 2393,\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\n Type_0_has_no_property_1 = 2460,\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\n Index_signature_in_type_0_only_permits_reading = 2542,\n Expected_0_arguments_but_got_1 = 2554,\n Expected_at_least_0_arguments_but_got_1 = 2555,\n Expected_0_type_arguments_but_got_1 = 2558,\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\n Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration = 2673,\n Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration = 2674,\n Namespace_0_has_no_exported_member_1 = 2694,\n File_0_not_found = 6054,\n Numeric_separators_are_not_allowed_here = 6188,\n Multiple_consecutive_numeric_separators_are_not_permitted = 6189\n}\n\n/** Translates a diagnostic code to its respective string. */\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\n switch (code) {\n case 100: return \"Operation not supported.\";\n case 101: return \"Operation is unsafe.\";\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\n case 204: return \"Basic type '{0}' cannot be nullable.\";\n case 205: return \"Cannot export a mutable global.\";\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\n case 207: return \"Unmanaged classes cannot extend managed classes and vice-versa.\";\n case 208: return \"Unmanaged classes cannot implement interfaces.\";\n case 209: return \"Invalid regular expression flags.\";\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\n case 212: return \"Decorator '{0}' is not valid here.\";\n case 213: return \"Duplicate decorator.\";\n case 214: return \"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.\";\n case 215: return \"Optional parameter must have an initializer.\";\n case 216: return \"Constructor of class '{0}' must not require any arguments.\";\n case 1002: return \"Unterminated string literal.\";\n case 1003: return \"Identifier expected.\";\n case 1005: return \"'{0}' expected.\";\n case 1006: return \"A file cannot have a reference to itself.\";\n case 1009: return \"Trailing comma not allowed.\";\n case 1012: return \"Unexpected token.\";\n case 1014: return \"A rest parameter must be last in a parameter list.\";\n case 1015: return \"Parameter cannot have question mark and initializer.\";\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\n case 1061: return \"Enum member must have initializer.\";\n case 1036: return \"Statements are not allowed in ambient contexts.\";\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\n case 1042: return \"'{0}' modifier cannot be used here.\";\n case 1047: return \"A rest parameter cannot be optional.\";\n case 1048: return \"A rest parameter cannot have an initializer.\";\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\n case 1054: return \"A 'get' accessor cannot have parameters.\";\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\n case 1094: return \"An accessor cannot have type parameters.\";\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\n case 1098: return \"Type parameter list cannot be empty.\";\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\n case 1108: return \"A 'return' statement can only be used within a function body.\";\n case 1109: return \"Expression expected.\";\n case 1110: return \"Type expected.\";\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\n case 1114: return \"Duplicate label '{0}'.\";\n case 1121: return \"Octal literals are not allowed in strict mode.\";\n case 1124: return \"Digit expected.\";\n case 1125: return \"Hexadecimal digit expected.\";\n case 1126: return \"Unexpected end of text.\";\n case 1127: return \"Invalid character.\";\n case 1130: return \"'case' or 'default' expected.\";\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\n case 1140: return \"Type argument expected.\";\n case 1141: return \"String literal expected.\";\n case 1142: return \"Line break not permitted here.\";\n case 1146: return \"Declaration expected.\";\n case 1155: return \"'const' declarations must be initialized.\";\n case 1161: return \"Unterminated regular expression literal.\";\n case 1176: return \"Interface declaration cannot have 'implements' clause.\";\n case 1177: return \"Binary digit expected.\";\n case 1178: return \"Octal digit expected.\";\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\n case 1199: return \"Unterminated Unicode escape sequence.\";\n case 1206: return \"Decorators are not valid here.\";\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\n case 1245: return \"Method '{0}' cannot have an implementation because it is marked abstract.\";\n case 1311: return \"A class may only extend another class.\";\n case 1317: return \"A parameter property cannot be declared using a rest parameter.\";\n case 2300: return \"Duplicate identifier '{0}'.\";\n case 2304: return \"Cannot find name '{0}'.\";\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\n case 2315: return \"Type '{0}' is not generic.\";\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\n case 2329: return \"Index signature is missing in type '{0}'.\";\n case 2332: return \"'this' cannot be referenced in current location.\";\n case 2335: return \"'super' can only be referenced in a derived class.\";\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\n case 2390: return \"Constructor implementation is missing.\";\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\n case 2392: return \"Multiple constructor implementations are not allowed.\";\n case 2393: return \"Duplicate function implementation.\";\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\n case 2460: return \"Type '{0}' has no property '{1}'.\";\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\n case 2554: return \"Expected {0} arguments, but got {1}.\";\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\n case 2673: return \"Constructor of class '{0}' is private and only accessible within the class declaration.\";\n case 2674: return \"Constructor of class '{0}' is protected and only accessible within the class declaration.\";\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\n case 6054: return \"File '{0}' not found.\";\n case 6188: return \"Numeric separators are not allowed here.\";\n case 6189: return \"Multiple consecutive numeric separators are not permitted.\";\n default: return \"\";\n }\n}\n","/**\r\n * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileAllocate as compileBuiltinAllocate,\r\n compileAbort as compileBuiltinAbort\r\n} from \"./builtins\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module,\r\n MemorySegment,\r\n ExpressionRef,\r\n UnaryOp,\r\n BinaryOp,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionId,\r\n FunctionTypeRef,\r\n GlobalRef,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getFunctionBody,\r\n getGetLocalIndex,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName\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\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 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 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: Function[] = [];\r\n /** Argument count helper global. */\r\n argcVar: GlobalRef = 0;\r\n /** Argument count helper setter. */\r\n argcSet: FunctionRef = 0;\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n 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 let entries = new Array(functionTableSize);\r\n for (let i = 0; i < functionTableSize; ++i) {\r\n entries[i] = functionTable[i].ref;\r\n }\r\n module.setFunctionTable(entries);\r\n module.addTableExport(\"0\", \"table\");\r\n functionTableExported = true;\r\n }\r\n\r\n // import table if requested (default table is named '0' by Binaryen)\r\n if (options.importTable) {\r\n module.addTableImport(\"0\", \"env\", \"table\");\r\n if (!functionTableExported) module.addTableExport(\"0\", \"table\");\r\n }\r\n\r\n return module;\r\n }\r\n\r\n // sources\r\n\r\n /** Compiles a source by looking it up by path first. */\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var source = this.program.lookupSourceByPath(normalizedPathWithoutExtension);\r\n if (source) this.compileSource(source);\r\n else {\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n }\r\n\r\n /** Compiles a source. */\r\n compileSource(source: Source): void {\r\n if (source.is(CommonFlags.COMPILED)) return;\r\n source.set(CommonFlags.COMPILED);\r\n\r\n // compile top-level statements\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var 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 | CommonFlags.BUILTIN)) return true;\r\n\r\n var nativeType = global.type.toNativeType();\r\n var isConstant = global.isAny(CommonFlags.CONST) || global.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n\r\n // handle imports\r\n if (global.is(CommonFlags.AMBIENT)) {\r\n\r\n // constant global\r\n if (isConstant || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n global.set(CommonFlags.MODULE_IMPORT);\r\n 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\r\n // get_globals), hence such initializations must be performed in the start function for now.\r\n var initializeInStart = false;\r\n\r\n // inlined constant can be compiled as-is\r\n if (global.is(CommonFlags.INLINED)) {\r\n initExpr = this.compileInlineConstant(global, global.type, true);\r\n\r\n } else {\r\n\r\n // evaluate initializer if present\r\n if (declaration && declaration.initializer) {\r\n if (!initExpr) {\r\n initExpr = this.compileExpression(\r\n declaration.initializer,\r\n global.type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n }\r\n\r\n // check if the initializer is constant\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n\r\n // if a constant global, check if the initializer becomes constant after precompute\r\n if (isConstant) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n initializeInStart = true;\r\n }\r\n } else {\r\n initializeInStart = true;\r\n }\r\n }\r\n\r\n // initialize to zero if there's no initializer\r\n } else {\r\n initExpr = global.type.toNativeZero(module);\r\n }\r\n }\r\n\r\n var internalName = global.internalName;\r\n\r\n if (initializeInStart) { // initialize to mutable zero and set the actual value in start\r\n module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(module));\r\n this.startFunctionBody.push(module.createSetGlobal(internalName, initExpr));\r\n\r\n } else { // compile as-is\r\n\r\n if (isConstant) {\r\n let exprType = getExpressionType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(getConstValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return false;\r\n }\r\n }\r\n global.set(CommonFlags.INLINED); // inline the value from now on\r\n if (global.is(CommonFlags.MODULE_EXPORT)) {\r\n module.addGlobal(internalName, nativeType, false, initExpr);\r\n module.addGlobalExport(internalName, mangleExportName(global));\r\n } else if (declaration && declaration.isTopLevel) { // might become re-exported\r\n module.addGlobal(internalName, nativeType, false, initExpr);\r\n }\r\n\r\n } else /* mutable */ {\r\n module.addGlobal(internalName, nativeType, !isConstant, initExpr);\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // enums\r\n\r\n compileEnumDeclaration(declaration: EnumDeclaration): Enum | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(element)) return null;\r\n return element;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(CommonFlags.COMPILED)) return true;\r\n element.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n\r\n if (element.members) {\r\n for (let member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n let initInStart = false;\r\n let val = member;\r\n let valueDeclaration = val.declaration;\r\n val.set(CommonFlags.COMPILED);\r\n if (val.is(CommonFlags.INLINED)) {\r\n if (element.declaration.isTopLevelExport) {\r\n module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n false, // constant\r\n module.createI32(val.constantValue)\r\n );\r\n }\r\n } else {\r\n let initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(\r\n valueDeclaration.value,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n }\r\n } else if (previousValue == null) {\r\n initExpr = module.createI32(0);\r\n } else if (previousValue.is(CommonFlags.INLINED)) {\r\n initExpr = module.createI32(previousValue.constantValue + 1);\r\n } else {\r\n // in TypeScript this errors with TS1061, but actually we can do:\r\n initExpr = module.createBinary(BinaryOp.AddI32,\r\n module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n module.createI32(1)\r\n );\r\n if (element.is(CommonFlags.CONST)) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n if (initInStart) {\r\n module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n true, // mutable\r\n module.createI32(0)\r\n );\r\n this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr));\r\n } else {\r\n module.addGlobal(val.internalName, NativeType.I32, false, initExpr);\r\n if (getExpressionType(initExpr) == NativeType.I32) {\r\n val.constantValue = getConstValueI32(initExpr);\r\n val.set(CommonFlags.INLINED);\r\n } else {\r\n assert(false);\r\n val.constantValue = 0;\r\n }\r\n }\r\n }\r\n previousValue = val;\r\n\r\n // export values if the enum is exported\r\n if (element.is(CommonFlags.MODULE_EXPORT)) {\r\n if (member.is(CommonFlags.INLINED) || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n module.addGlobalExport(member.internalName, mangleExportName(member));\r\n } else if (valueDeclaration) {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n valueDeclaration.range\r\n );\r\n }\r\n }\r\n }\r\n }\r\n this.currentEnum = null;\r\n return true;\r\n }\r\n\r\n // functions\r\n\r\n /** Compiles a top-level function given its declaration. */\r\n compileFunctionDeclaration(\r\n declaration: FunctionDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n null, // no outer scope (is top level)\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n /** Resolves the specified type arguments prior to compiling the resulting function instance. */\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n outerScope: Flow | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = 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 private ensureFunctionType(\r\n parameterTypes: Type[] | null,\r\n returnType: Type,\r\n thisType: Type | null = null\r\n ): FunctionTypeRef {\r\n var numParameters = parameterTypes ? parameterTypes.length : 0;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n if (parameterTypes) {\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = parameterTypes[i].toNativeType();\r\n }\r\n }\r\n var resultType = returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n let name = Signature.makeSignatureString(parameterTypes, returnType, thisType);\r\n typeRef = module.addFunctionType(name, resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n assert(!instance.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN));\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 // check module-level export\r\n if (instance.is(CommonFlags.MODULE_EXPORT)) {\r\n if (signature.requiredParameters < signature.parameterTypes.length) {\r\n // export the trampoline if the function takes optional parameters\r\n instance = this.ensureTrampoline(instance);\r\n this.ensureArgcSet();\r\n }\r\n module.addFunctionExport(instance.internalName, mangleExportName(instance));\r\n }\r\n\r\n instance.finalize(module, ref);\r\n return true;\r\n }\r\n\r\n // namespaces\r\n\r\n compileNamespaceDeclaration(declaration: NamespaceDeclaration): void {\r\n var members = declaration.members;\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n switch (member.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n let variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n compileNamespace(ns: Namespace): void {\r\n if (!ns.members) return;\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let element of ns.members.values()) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking || (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var module = this.module;\r\n var 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 internalExportName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n member.externalName.text\r\n );\r\n let element = fileLevelExports.get(internalExportName);\r\n if (!element) continue; // reported in Program#initialize\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (!(element).is(CommonFlags.GENERIC)) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n let functionInstance = this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n if (functionInstance) {\r\n let functionDeclaration = functionInstance.prototype.declaration;\r\n if (functionDeclaration && functionDeclaration.needsExplicitExport(member)) {\r\n module.addFunctionExport(functionInstance.internalName, member.externalName.text);\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (this.compileGlobal(element) && statement.range.source.isEntry) {\r\n let globalDeclaration = (element).declaration;\r\n if (globalDeclaration && globalDeclaration.needsExplicitExport(member)) {\r\n if ((element).is(CommonFlags.INLINED)) {\r\n module.addGlobalExport(element.internalName, member.externalName.text);\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n member.range\r\n );\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // classes\r\n\r\n compileClassDeclaration(\r\n declaration: ClassDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): 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 if (!instance.is(CommonFlags.MODULE_EXPORT) || element.is(CommonFlags.PRIVATE)) break;\r\n let module = this.module;\r\n let name = (element).simpleName;\r\n let type = (element).type;\r\n let nativeType = type.toNativeType();\r\n let offset = (element).memoryOffset;\r\n let usizeType = this.options.usizeType;\r\n let nativeSizeType = this.options.nativeSizeType;\r\n\r\n // export an implicit getter: get:fieldName(this: usize) -> fieldType\r\n let getterName = mangleExportName(element, GETTER_PREFIX + name);\r\n module.addFunction(\r\n getterName,\r\n this.ensureFunctionType(null, type, usizeType),\r\n null,\r\n module.createLoad(\r\n type.byteSize,\r\n type.is(TypeFlags.SIGNED),\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(getterName, getterName);\r\n\r\n // export an implicit setter: set:fieldName(this: usize, value: fieldType) -> void\r\n if (element.is(CommonFlags.READONLY)) break;\r\n let setterName = mangleExportName(element, SETTER_PREFIX + name);\r\n module.addFunction(\r\n setterName,\r\n this.ensureFunctionType([ type ], Type.void, usizeType),\r\n null,\r\n module.createStore(\r\n type.byteSize,\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createGetLocal(1, nativeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(setterName, setterName);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], instance.contextualTypeArguments, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], instance.contextualTypeArguments, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n compileInterfaceDeclaration(\r\n declaration: InterfaceDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n // TODO\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n }\r\n\r\n // memory\r\n\r\n /** Adds a static memory segment with the specified data. */\r\n addMemorySegment(buffer: Uint8Array, alignment: i32 = 8): MemorySegment {\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n }\r\n\r\n // function table\r\n\r\n /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(CommonFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var functionTable = this.functionTable;\r\n var index = functionTable.length;\r\n if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) {\r\n // insert the trampoline if the function has optional parameters\r\n func = this.ensureTrampoline(func);\r\n }\r\n functionTable.push(func);\r\n func.functionTableIndex = index;\r\n return index;\r\n }\r\n\r\n // statements\r\n\r\n compileStatement(statement: Statement): ExpressionRef {\r\n var module = this.module;\r\n var stmt: ExpressionRef;\r\n switch (statement.kind) {\r\n case NodeKind.BLOCK: {\r\n stmt = this.compileBlockStatement(statement);\r\n break;\r\n }\r\n case NodeKind.BREAK: {\r\n stmt = this.compileBreakStatement(statement);\r\n break;\r\n }\r\n case NodeKind.CONTINUE: {\r\n stmt = this.compileContinueStatement(statement);\r\n break;\r\n }\r\n case NodeKind.DO: {\r\n stmt = this.compileDoStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EMPTY: {\r\n stmt = this.compileEmptyStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EXPRESSION: {\r\n stmt = this.compileExpressionStatement(statement);\r\n break;\r\n }\r\n case NodeKind.FOR: {\r\n stmt = this.compileForStatement(statement);\r\n break;\r\n }\r\n case NodeKind.IF: {\r\n stmt = this.compileIfStatement(statement);\r\n break;\r\n }\r\n case NodeKind.RETURN: {\r\n stmt = this.compileReturnStatement(statement);\r\n break;\r\n }\r\n case NodeKind.SWITCH: {\r\n stmt = this.compileSwitchStatement(statement);\r\n break;\r\n }\r\n case NodeKind.THROW: {\r\n stmt = this.compileThrowStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TRY: {\r\n stmt = this.compileTryStatement(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n stmt = this.compileVariableStatement(statement);\r\n if (!stmt) stmt = module.createNop();\r\n break;\r\n }\r\n case NodeKind.VOID: {\r\n stmt = this.compileVoidStatement(statement);\r\n break;\r\n }\r\n case NodeKind.WHILE: {\r\n stmt = this.compileWhileStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // type declarations must be top-level because function bodies are evaluated when\r\n // reachaable only.\r\n if (this.currentFunction == this.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)) break;\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 return module.createBlock(breakLabel, [\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 ], terminated ? NativeType.Unreachable : NativeType.None);\r\n }\r\n\r\n compileEmptyStatement(statement: EmptyStatement): ExpressionRef {\r\n return this.module.createNop();\r\n }\r\n\r\n compileExpressionStatement(statement: ExpressionStatement): ExpressionRef {\r\n var expr = this.compileExpression(statement.expression, Type.void, ConversionKind.NONE, WrapMode.NONE);\r\n if (this.currentType != Type.void) {\r\n expr = this.module.createDrop(expr);\r\n this.currentType = Type.void;\r\n }\r\n return expr;\r\n }\r\n\r\n compileForStatement(statement: ForStatement): ExpressionRef {\r\n // A for statement initiates a new branch with its own scoped variables\r\n // possibly declared in its initializer, and break context.\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var 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 = this.precomputeExpressionRef(condExpr);\r\n if (getExpressionId(condPre) == ExpressionId.Const) {\r\n assert(getExpressionType(condPre) == NativeType.I32);\r\n if (getConstValueI32(condPre) != 0) alwaysTrue = true;\r\n // TODO: could skip compilation if the condition is always false here, but beware that the\r\n // initializer could still declare new 'var's that are used later on.\r\n }\r\n // recompile to original\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n } else {\r\n // omitted condition is always true\r\n condExpr = module.createI32(1);\r\n alwaysTrue = true;\r\n }\r\n var incrExpr = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : 0;\r\n var bodyExpr = this.compileStatement(statement.statement);\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 var terminated = alwaysTrue && flow.isAny(FlowFlags.ANY_TERMINATING);\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,\r\n module.createBlock(null, repeatBlock, NativeType.None)\r\n )\r\n );\r\n\r\n return module.createBlock(\r\n breakLabel,\r\n breakBlock,\r\n terminated\r\n ? NativeType.Unreachable\r\n : NativeType.None\r\n );\r\n }\r\n\r\n compileIfStatement(statement: IfStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var ifTrue = statement.ifTrue;\r\n var ifFalse = statement.ifFalse;\r\n\r\n // The condition doesn't initiate a branch yet\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary branches if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileStatement(ifTrue)\r\n : ifFalse\r\n ? this.compileStatement(ifFalse)\r\n : module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Each arm initiates a branch\r\n var 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 compileBuiltinAbort(this, null, statement);\r\n }\r\n\r\n compileTryStatement(statement: TryStatement): ExpressionRef {\r\n // TODO\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n /**\r\n * Compiles a variable statement. Returns `0` if an initializer is not\r\n * necessary.\r\n */\r\n compileVariableStatement(statement: VariableStatement, isKnownGlobal: bool = false): ExpressionRef {\r\n var program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var declarations = statement.declarations;\r\n var numDeclarations = declarations.length;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n currentFunction == this.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.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) == ExpressionId.Const) {\r\n let local = new Local(program, name, -1, type);\r\n switch (getExpressionType(initExpr)) {\r\n case NativeType.I32: {\r\n local = local.withConstantIntegerValue(\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 = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n if (!getConstValueI32(condExprPrecomp)) return module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Statements initiate a new branch with its own break context\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var 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 alwaysReturns = alwaysTrue && flow.is(FlowFlags.RETURNS);\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 var expr = 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 ], alwaysReturns ? NativeType.Unreachable : NativeType.None);\r\n return expr;\r\n }\r\n\r\n // expressions\r\n\r\n /**\r\n * Compiles the value of an inlined constant element.\r\n * @param retainType If true, the annotated type of the constant is retained. Otherwise, the value\r\n * is precomputed according to context.\r\n */\r\n compileInlineConstant(\r\n element: VariableLikeElement,\r\n contextualType: Type,\r\n retainType: bool\r\n ): ExpressionRef {\r\n assert(element.is(CommonFlags.INLINED));\r\n var type = element.type;\r\n switch (\r\n !retainType &&\r\n type.is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n type.size < contextualType.size\r\n ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension\r\n : (this.currentType = type).kind\r\n ) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n let shift = type.computeSmallIntegerShift(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) << shift >> shift\r\n : 0\r\n ); // recognized by canOverflow\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let mask = element.type.computeSmallIntegerMask(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) & mask\r\n : 0\r\n ); // recognized by canOverflow\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n if (!element.program.options.isWasm64) {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return element.constantValueKind == ConstantValueKind.INTEGER\r\n ? this.module.createI64(\r\n i64_low(element.constantIntegerValue),\r\n i64_high(element.constantIntegerValue)\r\n )\r\n : this.module.createI64(0);\r\n }\r\n case TypeKind.F64: {\r\n if (!(element.is(CommonFlags.BUILTIN) && contextualType == Type.f32)) {\r\n return this.module.createF64((element).constantFloatValue);\r\n }\r\n // otherwise fall-through: basically precomputes f32.demote/f64 of NaN / Infinity\r\n this.currentType = Type.f32;\r\n }\r\n case TypeKind.F32: {\r\n return this.module.createF32((element).constantFloatValue);\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n\r\n compileExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n this.currentType = contextualType;\r\n\r\n var expr: ExpressionRef;\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n expr = this.compileAssertionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.BINARY: {\r\n expr = this.compileBinaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.CALL: {\r\n expr = this.compileCallExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.COMMA: {\r\n expr = this.compileCommaExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n expr = this.compileElementAccessExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.FUNCTION: {\r\n expr = this.compileFunctionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.FALSE:\r\n case NodeKind.NULL:\r\n case NodeKind.THIS:\r\n case NodeKind.SUPER:\r\n case NodeKind.TRUE: {\r\n expr = this.compileIdentifierExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.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.precomputeExpressionRef(\r\n this.compileExpression(expression, contextualType, conversionKind, wrapMode)\r\n );\r\n }\r\n\r\n precomputeExpressionRef(expr: ExpressionRef): ExpressionRef {\r\n var module = this.module;\r\n var type = this.currentType;\r\n var nativeType = type.toNativeType();\r\n var funcRef = module.addTemporaryFunction(nativeType, null, expr);\r\n module.runPasses([ \"precompute\" ], funcRef);\r\n var ret = getFunctionBody(funcRef);\r\n module.removeTemporaryFunction();\r\n return ret;\r\n }\r\n\r\n convertExpression(\r\n expr: ExpressionRef,\r\n fromType: Type,\r\n toType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n assert(conversionKind != ConversionKind.NONE);\r\n var module = this.module;\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.VOID) {\r\n assert(toType.kind != TypeKind.VOID); // convertExpression should not be called with void -> void\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) 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 toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32,\r\n this.ensureSmallIntegerWrap(expr, fromType) // must clear garbage bits\r\n );\r\n wrapMode = WrapMode.NONE;\r\n\r\n // i32 to i32\r\n } else {\r\n // small i32 to ...\r\n if (fromType.is(TypeFlags.SHORT)) {\r\n // small i32 to larger i32\r\n if (fromType.size < toType.size) {\r\n expr = this.ensureSmallIntegerWrap(expr, fromType); // must clear garbage bits\r\n wrapMode = WrapMode.NONE;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.currentType = toType;\r\n return wrapMode == WrapMode.WRAP\r\n ? this.ensureSmallIntegerWrap(expr, toType)\r\n : expr;\r\n }\r\n\r\n compileAssertionExpression(expression: AssertionExpression, contextualType: Type): ExpressionRef {\r\n var toType = this.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.resolvedElementExpression) { // indexed access\r\n let isUnchecked = currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, (target).internalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (target).internalName\r\n );\r\n }\r\n return this.module.createUnreachable();\r\n }\r\n assert(indexedSet.signature.parameterTypes.length == 2); // parser must guarantee this\r\n 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.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let type = (target).type;\r\n this.currentType = tee ? type : Type.void;\r\n let nativeType = type.toNativeType();\r\n if (type.kind == TypeKind.BOOL) {\r\n // make sure bools are wrapped (usually are) when storing as 8 bits\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type);\r\n }\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let flow = currentFunction.flow;\r\n let tempLocal = currentFunction.getAndFreeTempLocal(\r\n type,\r\n !flow.canOverflow(valueWithCorrectType, type)\r\n );\r\n let tempLocalIndex = tempLocal.index;\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n return module.createBlock(null, [\r\n module.createSetLocal(tempLocalIndex, valueWithCorrectType),\r\n module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n module.createGetLocal(tempLocalIndex, nativeType),\r\n nativeType,\r\n (target).memoryOffset\r\n ),\r\n module.createGetLocal(tempLocalIndex, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n valueWithCorrectType,\r\n nativeType,\r\n (target).memoryOffset\r\n );\r\n }\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (target).setterPrototype;\r\n if (setterPrototype) {\r\n let setterInstance = 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.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n return this.makeCallDirect(setterInstance, [ thisExpr, valueWithCorrectType ]);\r\n } else {\r\n return this.makeCallDirect(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n\r\n // otherwise call the setter first, then the getter\r\n let getterPrototype = (target).getterPrototype;\r\n assert(getterPrototype != null); // must have one if there is a setter\r\n let getterInstance = 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.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(returnType, false);\r\n let tempLocalIndex = tempLocal.index;\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ // set and remember the target\r\n module.createTeeLocal(tempLocalIndex, thisExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [ // get from remembered target\r\n module.createGetLocal(tempLocalIndex, nativeReturnType)\r\n ])\r\n ], nativeReturnType);\r\n } else {\r\n // note that this must be performed here because `resolved` is shared\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCallDirect(getterInstance)\r\n ], nativeReturnType);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, target.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.resolver.resolvedElementExpression;\r\n if (elementExpression) {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, target.internalName\r\n );\r\n this.currentType = tee ? indexedGet.signature.returnType : Type.void;\r\n return module.createUnreachable();\r\n }\r\n let targetType = (target).type;\r\n let thisExpression = assert(this.resolver.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let elementExpr = this.compileExpression(\r\n elementExpression,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let tempLocalTarget = currentFunction.getTempLocal(targetType, false);\r\n let tempLocalElement = currentFunction.getAndFreeTempLocal(this.currentType, false);\r\n let returnType = indexedGet.signature.returnType;\r\n this.currentFunction.freeTempLocal(tempLocalTarget);\r\n return module.createBlock(null, [\r\n this.makeCallDirect(indexedSet, [\r\n module.createTeeLocal(tempLocalTarget.index, thisExpr),\r\n module.createTeeLocal(tempLocalElement.index, elementExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(indexedGet, [\r\n module.createGetLocal(tempLocalTarget.index, tempLocalTarget.type.toNativeType()),\r\n module.createGetLocal(tempLocalElement.index, tempLocalElement.type.toNativeType())\r\n ])\r\n ], returnType.toNativeType());\r\n } else {\r\n return this.makeCallDirect(indexedSet, [\r\n thisExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n }\r\n // fall-through\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var target = this.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.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return this.compileCallExpressionBuiltin(prototype, expression, contextualType);\r\n }\r\n\r\n let instance: Function | null = null;\r\n\r\n // resolve generic call if type arguments have been provided\r\n if (typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.expression.range, prototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n instance = 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.resolvedThisExpression),\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n return this.compileCallDirect(\r\n instance,\r\n expression.arguments,\r\n expression,\r\n thisExpr,\r\n instance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n // indirect call: index argument with signature (non-generic, can't be inlined)\r\n case ElementKind.LOCAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetLocal((target).index, NativeType.I32);\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetGlobal((target).internalName, (target).type.toNativeType());\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (signature = type.signatureReference) {\r\n let thisExpression = assert(this.resolver.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n indexArg = module.createLoad(\r\n 4,\r\n false,\r\n thisExpr,\r\n NativeType.I32,\r\n (target).memoryOffset\r\n );\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FUNCTION_TARGET: {\r\n signature = (target).signature;\r\n indexArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n break;\r\n }\r\n case ElementKind.PROPERTY: // TODO\r\n\r\n // not supported\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n return this.compileCallIndirect(\r\n signature,\r\n indexArg,\r\n expression.arguments,\r\n expression\r\n );\r\n }\r\n\r\n private compileCallExpressionBuiltin(\r\n prototype: FunctionPrototype,\r\n expression: CallExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var 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 return this.compileCallInlineUnchecked(instance, argumentExpressions, reportNode, thisArg);\r\n }\r\n\r\n // Otherwise compile to just a call\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallDirect(instance, operands);\r\n }\r\n\r\n // Depends on being pre-checked in compileCallDirect\r\n private compileCallInlineUnchecked(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n var declaration = instance.prototype.declaration;\r\n\r\n // Create an empty child flow with its own scope and mark it for inlining\r\n var previousFlow = currentFunction.flow;\r\n var returnLabel = instance.internalName + \"|inlined.\" + (instance.nextInlineId++).toString(10);\r\n var returnType = instance.signature.returnType;\r\n var flow = Flow.create(currentFunction);\r\n flow.set(FlowFlags.INLINE_CONTEXT);\r\n flow.returnLabel = returnLabel;\r\n flow.returnType = returnType;\r\n flow.contextualTypeArguments = instance.contextualTypeArguments;\r\n\r\n // Convert provided call arguments to temporary locals. It is important that these are compiled\r\n // here, with their respective locals being blocked. There is no 'makeCallInline'.\r\n var body = [];\r\n if (thisArg) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n if (getExpressionId(thisArg) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(thisArg),\r\n (parent).type,\r\n \"this\"\r\n );\r\n } else {\r\n let thisLocal = flow.addScopedLocal((parent).type, \"this\", false);\r\n body.push(\r\n module.createSetLocal(thisLocal.index, thisArg)\r\n );\r\n }\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i) {\r\n let paramExpr = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(paramExpr) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(paramExpr),\r\n parameterTypes[i],\r\n signature.getParameterName(i)\r\n );\r\n // inherits wrap status\r\n } else {\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(paramExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, paramExpr)\r\n );\r\n }\r\n }\r\n\r\n // Compile optional parameter initializers in the scope of the inlined flow\r\n currentFunction.flow = flow;\r\n var numParameters = signature.parameterTypes.length;\r\n for (let i = numArguments; i < numParameters; ++i) {\r\n let initExpr = this.compileExpression(\r\n assert(declaration.signature.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(\"oob\", [\r\n module.createSwitch(names, \"oob\",\r\n // condition is number of provided optional arguments, so subtract required arguments\r\n minArguments\r\n ? module.createBinary(\r\n BinaryOp.SubI32,\r\n module.createGetGlobal(\"~argc\", NativeType.I32),\r\n module.createI32(minArguments)\r\n )\r\n : module.createGetGlobal(\"~argc\", NativeType.I32)\r\n )\r\n ]),\r\n module.createUnreachable()\r\n ]);\r\n for (let i = 0; i < numOptional; ++i, ++operandIndex) {\r\n let type = originalParameterTypes[minArguments + i];\r\n 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 if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n let localType = (target).type;\r\n let localIndex = (target).index;\r\n assert(localIndex >= 0);\r\n this.currentType = localType;\r\n return this.module.createGetLocal(localIndex, localType.toNativeType());\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return this.module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum\r\n if (!target.is(CommonFlags.COMPILED)) {\r\n this.error(\r\n DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,\r\n expression.range\r\n );\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.module.createI32((target).constantValue);\r\n }\r\n return this.module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let instance = 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 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.compileStaticString((expression).value);\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 compileStaticString(stringValue: string): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var stringSegments = this.stringSegments;\r\n\r\n var stringSegment: MemorySegment | null = stringSegments.get(stringValue);\r\n if (!stringSegment) {\r\n let stringLength = stringValue.length;\r\n let stringBuffer = new Uint8Array(4 + stringLength * 2);\r\n stringBuffer[0] = stringLength & 0xff;\r\n stringBuffer[1] = (stringLength >>> 8) & 0xff;\r\n stringBuffer[2] = (stringLength >>> 16) & 0xff;\r\n stringBuffer[3] = (stringLength >>> 24) & 0xff;\r\n for (let i = 0; i < stringLength; ++i) {\r\n stringBuffer[4 + i * 2] = stringValue.charCodeAt(i) & 0xff;\r\n stringBuffer[5 + i * 2] = (stringValue.charCodeAt(i) >>> 8) & 0xff;\r\n }\r\n stringSegment = this.addMemorySegment(stringBuffer, options.usizeType.byteSize);\r\n stringSegments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n var stringType = this.program.typesLookup.get(\"string\");\r\n this.currentType = stringType ? stringType : options.usizeType;\r\n if (options.isWasm64) {\r\n return module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n }\r\n assert(i64_is_i32(stringOffset));\r\n return module.createI32(i64_low(stringOffset));\r\n }\r\n\r\n compileArrayLiteral(elementType: Type, expressions: (Expression | null)[], reportNode: Node): ExpressionRef {\r\n var isStatic = true;\r\n var module = this.module;\r\n\r\n // obtain the array type\r\n var arrayPrototype = assert(this.program.arrayPrototype);\r\n if (!arrayPrototype || arrayPrototype.kind != ElementKind.CLASS_PROTOTYPE) return module.createUnreachable();\r\n var arrayInstance = this.resolver.resolveClass(arrayPrototype, [ elementType ]);\r\n if (!arrayInstance) return module.createUnreachable();\r\n var arrayType = arrayInstance.type;\r\n\r\n var elementCount = expressions.length;\r\n if (elementCount) { // non-empty static or dynamic\r\n let nativeElementType = elementType.toNativeType();\r\n let values: usize;\r\n let byteLength: usize;\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n values = changetype(new Int32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n values = changetype(new Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n values = changetype(new Float32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n values = changetype(new Float64Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // precompute value expressions\r\n let exprs = new Array(elementCount);\r\n let expr: BinaryenExpressionRef;\r\n for (let i = 0; i < elementCount; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : elementType.toNativeZero(module);\r\n if (isStatic) {\r\n expr = this.precomputeExpressionRef(exprs[i]);\r\n if (getExpressionId(expr) == ExpressionId.Const) {\r\n assert(getExpressionType(expr) == nativeElementType);\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n changetype(values)[i] = getConstValueI32(expr);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n changetype(values)[i] = i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n changetype(values)[i] = getConstValueF32(expr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n changetype(values)[i] = getConstValueF64(expr);\r\n break;\r\n }\r\n default: assert(false); // checked above\r\n }\r\n } else {\r\n // TODO: emit a warning if declared 'const'\r\n // if (isConst) {\r\n // this.warn(\r\n // DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n // reportNode.range\r\n // );\r\n // }\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n let usizeTypeSize = this.options.usizeType.byteSize;\r\n if (isStatic) { // non-empty, all elements can be precomputed\r\n\r\n // Create a combined static memory segment composed of:\r\n // Array struct + ArrayBuffer struct + aligned ArrayBuffer data\r\n\r\n let arraySize = usizeTypeSize + 4; // buffer_ & length_\r\n let bufferHeaderSize = (4 + 7) & ~7; // aligned byteLength (8)\r\n let bufferTotalSize = 1 << (32 - clz(byteLength + bufferHeaderSize - 1)); // see internals\r\n let data = new Uint8Array(arraySize + bufferTotalSize);\r\n let segment = this.addMemorySegment(data);\r\n let offset = 0;\r\n\r\n // write Array struct\r\n if (usizeTypeSize == 8) {\r\n writeI64(i64_add(segment.offset, i64_new(arraySize)), data, offset); // buffer_ @ segment[arSize]\r\n offset += 8;\r\n } else {\r\n assert(i64_high(segment.offset) == 0);\r\n writeI32(i64_low(segment.offset) + arraySize, data, offset); // buffer_ @ segment[arSize]\r\n offset += 4;\r\n }\r\n writeI32(elementCount, data, offset); // length_\r\n offset += 4;\r\n assert(offset == arraySize);\r\n\r\n // write ArrayBuffer struct\r\n writeI32(byteLength, data, offset);\r\n offset += bufferHeaderSize; // incl. alignment\r\n\r\n // write ArrayBuffer data\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.I64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n case NativeType.F32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.F64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n assert(offset <= arraySize + bufferTotalSize);\r\n\r\n this.currentType = arrayType;\r\n return usizeTypeSize == 8\r\n ? module.createI64(\r\n i64_low(segment.offset),\r\n i64_high(segment.offset)\r\n )\r\n : module.createI32(\r\n i64_low(segment.offset)\r\n );\r\n\r\n } else { // non-empty, some elements can't be precomputed\r\n\r\n this.currentType = arrayType;\r\n let setter = arrayInstance.lookupOverload(OperatorKind.INDEXED_SET, true);\r\n if (!setter) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n reportNode.range, arrayInstance.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let nativeArrayType = arrayType.toNativeType();\r\n let currentFunction = this.currentFunction;\r\n let tempLocal = currentFunction.getTempLocal(arrayType, false);\r\n let stmts = new Array(2 + elementCount);\r\n let index = 0;\r\n stmts[index++] = module.createSetLocal(tempLocal.index,\r\n this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(elementCount)\r\n ])\r\n );\r\n for (let i = 0; i < elementCount; ++i) {\r\n stmts[index++] = this.makeCallDirect(setter, [\r\n module.createGetLocal(tempLocal.index, nativeArrayType), // this\r\n module.createI32(i),\r\n exprs[i]\r\n ]);\r\n }\r\n assert(index + 1 == stmts.length);\r\n stmts[index] = module.createGetLocal(tempLocal.index, nativeArrayType);\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = arrayType;\r\n return module.createBlock(null, stmts, nativeArrayType);\r\n }\r\n\r\n } else { // empty, TBD: cache this somehow?\r\n this.currentType = arrayType;\r\n return this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(0)\r\n ]);\r\n }\r\n }\r\n\r\n 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 compileBuiltinAllocate(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 first matching constructor\r\n var currentClassInstance: Class | null = classInstance;\r\n var constructorInstance = classInstance.constructorInstance;\r\n while (!constructorInstance && (currentClassInstance = classInstance.base)) {\r\n constructorInstance = currentClassInstance.constructorInstance;\r\n }\r\n\r\n // if a constructor is present, call it with a zero `this`\r\n if (constructorInstance) {\r\n expr = this.compileCallDirect(constructorInstance, expression.arguments, expression,\r\n options.usizeType.toNativeZero(module)\r\n );\r\n\r\n // otherwise simply allocate a new instance and initialize its fields\r\n } else {\r\n expr = this.makeAllocate(classInstance, expression);\r\n }\r\n\r\n this.currentType = classInstance.type;\r\n return expr;\r\n }\r\n\r\n compileParenthesizedExpression(\r\n expression: ParenthesizedExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n // does not change types, just order\r\n return this.compileExpression(\r\n expression.expression,\r\n contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n /**\r\n * Compiles a property access in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compilePropertyAccessExpression(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var 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 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.resolvedThisExpression);\r\n assert((target).memoryOffset >= 0);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = (target).type;\r\n return module.createLoad(\r\n (target).type.byteSize,\r\n (target).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n thisExpr,\r\n (target).type.toNativeType(),\r\n (target).memoryOffset\r\n );\r\n }\r\n case ElementKind.PROPERTY: { // instance property (here: getter)\r\n let prototype = (target).getterPrototype;\r\n if (prototype) {\r\n let instance = this.resolver.resolveFunction(prototype, null);\r\n if (!instance) return module.createUnreachable();\r\n let signature = instance.signature;\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n 0,\r\n instance.is(CommonFlags.INSTANCE),\r\n propertyAccess\r\n )) {\r\n return module.createUnreachable();\r\n }\r\n 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.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess, thisExpr, inline);\r\n } else {\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess, 0, inline);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.range, (target).simpleName, (target).parent.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n propertyAccess.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileTernaryExpression(expression: TernaryExpression, contextualType: Type): ExpressionRef {\r\n var ifThen = expression.ifThen;\r\n var ifElse = expression.ifElse;\r\n var currentFunction = this.currentFunction;\r\n 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.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE)\r\n : this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n var 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 compileBuiltinAllocate(this, classInstance, reportNode)\r\n )\r\n );\r\n\r\n // apply field initializers\r\n if (classInstance.members) {\r\n for (let member of classInstance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n let field = member;\r\n let fieldType = field.type;\r\n let nativeFieldType = fieldType.toNativeType();\r\n let fieldDeclaration = field.prototype.declaration;\r\n assert(!field.isAny(CommonFlags.CONST));\r\n if (fieldDeclaration.initializer) { // use initializer\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n this.compileExpression( // reports\r\n fieldDeclaration.initializer,\r\n fieldType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n ),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n } else { // initialize with zero\r\n // TODO: might be unnecessary if the ctor initializes the field\r\n let parameterIndex = (field.prototype.declaration).parameterIndex;\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n parameterIndex >= 0 // initialized via parameter\r\n ? module.createGetLocal(1 + parameterIndex, nativeFieldType)\r\n : fieldType.toNativeZero(module),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // return `this`\r\n initializers.push(\r\n module.createGetLocal(tempLocal.index, nativeSizeType)\r\n );\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = classInstance.type;\r\n return module.createBlock(null, initializers, nativeSizeType);\r\n }\r\n\r\n /** Makes a conditional allocation expression inside of the constructor of the specified class. */\r\n makeConditionalAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n // requires that `this` is the first local\r\n var module = this.module;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n this.currentType = classInstance.type;\r\n return module.createIf(\r\n nativeSizeType == NativeType.I64\r\n ? module.createBinary(\r\n BinaryOp.NeI64,\r\n module.createGetLocal(0, NativeType.I64),\r\n module.createI64(0)\r\n )\r\n : module.createGetLocal(0, NativeType.I32),\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createTeeLocal(0,\r\n this.makeAllocate(classInstance, reportNode)\r\n )\r\n );\r\n }\r\n\r\n /** Adds the debug location of the specified expression at the specified range to the source map. */\r\n addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n var currentFunction = this.currentFunction;\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n range.debugInfoRef = expr;\r\n currentFunction.debugLocations.push(range);\r\n }\r\n}\r\n\r\n// helpers\r\n\r\nfunction mangleExportName(element: Element, simpleName: string = element.simpleName): string {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION: {\r\n let parent = (element).parent || (element).prototype.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName\r\n : simpleName;\r\n }\r\n case ElementKind.FIELD: {\r\n let parent = assert((element).parent);\r\n return mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName;\r\n }\r\n case ElementKind.ENUMVALUE: {\r\n let parent = assert((element).parent);\r\n return mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName;\r\n }\r\n case ElementKind.CLASS: {\r\n let parent = (element).prototype.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + STATIC_DELIMITER\r\n + simpleName\r\n : simpleName;\r\n }\r\n default: {\r\n let parent = element.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + STATIC_DELIMITER\r\n + simpleName\r\n : simpleName;\r\n }\r\n }\r\n}\r\n\r\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 * 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\nconst builtinsFile = LIBRARY_PREFIX + \"builtins.ts\";\r\n\r\n/** Parser interface. */\r\nexport class Parser extends DiagnosticEmitter {\r\n\r\n /** Program being created. */\r\n program: Program;\r\n /** 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 // mark the special builtins library file\r\n if (source.normalizedPath == builtinsFile) {\r\n source.set(CommonFlags.BUILTIN);\r\n }\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, program.diagnostics);\r\n tn.onComment = this.onComment;\r\n source.tokenizer = tn;\r\n var statements = source.statements;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n let statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n statements.push(statement);\r\n }\r\n }\r\n tn.finish();\r\n }\r\n\r\n /** Parses a top-level statement. */\r\n parseTopLevelStatement(\r\n tn: Tokenizer,\r\n namespace: Node | null = null\r\n ): Statement | null {\r\n var flags = CommonFlags.NONE;\r\n var startPos: i32 = -1;\r\n\r\n // check decorators\r\n var decorators: DecoratorNode[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) {\r\n this.skipStatement(tn);\r\n continue;\r\n }\r\n if (!decorators) decorators = [];\r\n decorators.push(decorator);\r\n }\r\n\r\n // mark builtins\r\n flags |= (tn.source.flags & CommonFlags.BUILTIN);\r\n\r\n // check modifiers\r\n var exportStart: i32 = 0;\r\n var exportEnd: i32 = 0;\r\n if (tn.skip(Token.EXPORT)) {\r\n if (tn.skip(Token.DEFAULT)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n flags |= CommonFlags.EXPORT;\r\n exportStart = tn.tokenPos;\r\n exportEnd = tn.pos;\r\n }\r\n\r\n var declareStart: i32 = 0;\r\n var declareEnd: i32 = 0;\r\n var contextIsAmbient = namespace != null && namespace.is(CommonFlags.AMBIENT);\r\n if (tn.skip(Token.DECLARE)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n if (contextIsAmbient) {\r\n this.error(\r\n DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n flags |= CommonFlags.DECLARE | CommonFlags.AMBIENT;\r\n } else if (contextIsAmbient) {\r\n flags |= CommonFlags.AMBIENT;\r\n }\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n\r\n // handle declarations\r\n var first = tn.peek();\r\n if (startPos < 0) startPos = tn.nextTokenPos;\r\n switch (first) {\r\n case Token.CONST: {\r\n tn.next();\r\n flags |= CommonFlags.CONST;\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n break;\r\n } else {\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n }\r\n break;\r\n }\r\n case Token.LET: flags |= CommonFlags.LET;\r\n case Token.VAR: {\r\n tn.next();\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ENUM: {\r\n tn.next();\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.FUNCTION: {\r\n tn.next();\r\n statement = this.parseFunction(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ABSTRACT: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (!tn.skip(Token.CLASS)) {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n break;\r\n } else {\r\n tn.discard(state);\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n // fall through\r\n }\r\n case Token.CLASS:\r\n case Token.INTERFACE: {\r\n tn.next();\r\n statement = this.parseClassOrInterface(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.NAMESPACE: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n case Token.IMPORT: {\r\n tn.next();\r\n flags |= CommonFlags.IMPORT;\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExportImport(tn, startPos);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n default: {\r\n\r\n // handle plain exports\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExport(tn, flags, startPos);\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (exportEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(exportStart, exportEnd), \"export\"\r\n ); // recoverable\r\n }\r\n if (declareEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(declareStart, declareEnd), \"declare\"\r\n ); // recoverable\r\n }\r\n if (!namespace) {\r\n statement = this.parseStatement(tn, true);\r\n } // TODO: else?\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorators[i].range\r\n );\r\n }\r\n }\r\n return statement;\r\n }\r\n\r\n /** Obtains the next file to parse. */\r\n nextFile(): string | null {\r\n var backlog = this.backlog;\r\n return backlog.length ? backlog.shift() : null;\r\n }\r\n\r\n /** Finishes parsing and returns the program. */\r\n finish(): Program {\r\n if (this.backlog.length) throw new Error(\"backlog is not empty\");\r\n this.backlog = [];\r\n this.seenlog.clear();\r\n 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 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 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 value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n names.push(name);\r\n values.push(value);\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 this.error(\r\n DiagnosticCode.Expression_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): CommonTypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n var state = tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n if (tn.peek() === Token.GREATERTHAN) {\r\n break;\r\n }\r\n let type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset(state);\r\n return null;\r\n }\r\n typeArguments.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n if (tn.skip(Token.GREATERTHAN) && tn.skip(Token.OPENPAREN)) {\r\n return typeArguments;\r\n }\r\n tn.reset(state);\r\n return null;\r\n }\r\n\r\n parseArguments(\r\n tn: Tokenizer\r\n ): Expression[] | null {\r\n\r\n // at '(': (Expression (',' Expression)*)? ')'\r\n\r\n var args = new Array();\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return args;\r\n }\r\n\r\n parseExpression(\r\n tn: Tokenizer,\r\n precedence: Precedence = 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","/**\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 element of this.program.moduleLevelExports.values()) this.visitElement(element);\r\n var todo = this.todo;\r\n for (let i = 0; i < todo.length; ) this.visitElement(todo[i]);\r\n }\r\n\r\n /** Visits an element.*/\r\n visitElement(element: Element): void {\r\n if (element.is(CommonFlags.PRIVATE) && !this.includePrivate) return;\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitGlobal(element);\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.visitFunctionInstances(element);\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n this.visitClassInstances(element);\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n if ((element).is(CommonFlags.COMPILED)) this.visitField(element);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prop = element;\r\n let getter = prop.getterPrototype;\r\n if (getter) this.visitFunctionInstances(getter);\r\n let setter = prop.setterPrototype;\r\n if (setter) this.visitFunctionInstances(setter);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n if (hasCompiledMember(element)) this.visitNamespace(element);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n\r\n private visitFunctionInstances(element: FunctionPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitFunction(instance);\r\n }\r\n }\r\n\r\n private visitClassInstances(element: ClassPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitClass(instance);\r\n }\r\n }\r\n\r\n abstract visitGlobal(element: Global): void;\r\n abstract visitEnum(element: Enum): void;\r\n abstract visitFunction(element: Function): void;\r\n abstract visitClass(element: Class): void;\r\n abstract visitInterface(element: Interface): void;\r\n abstract visitField(element: Field): void;\r\n abstract visitNamespace(element: Element): void;\r\n}\r\n\r\n/** A WebIDL definitions builder. */\r\nexport class IDLBuilder extends ExportsWalker {\r\n\r\n /** Builds WebIDL definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new IDLBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n if (isConst) {\r\n switch (element.constantValueKind) {\r\n case ConstantValueKind.INTEGER: {\r\n sb.push(\" = \");\r\n sb.push(i64_to_string(element.constantIntegerValue));\r\n break;\r\n }\r\n case ConstantValueKind.FLOAT: {\r\n sb.push(\" = \");\r\n sb.push(element.constantFloatValue.toString());\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n let isConst = (member).is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"readonly \");\r\n sb.push(\"unsigned long \");\r\n sb.push(name);\r\n if (isConst) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n }\r\n for (let member of members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) this.visitElement(member);\r\n }\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(this.typeToString(parameters[i]));\r\n sb.push(\" \");\r\n sb.push(signature.getParameterName(i));\r\n }\r\n sb.push(\");\\n\");\r\n var members = element.members;\r\n if (members && members.size) {\r\n indent(sb, this.indentLevel);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n // TODO\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n // TODO\r\n }\r\n\r\n visitNamespace(element: Namespace): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"byte\";\r\n case TypeKind.I16: return \"short\";\r\n case TypeKind.I32: return \"long\";\r\n case TypeKind.I64: return \"long long\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"long long\" : \"long\";\r\n case TypeKind.U8: return \"octet\";\r\n case TypeKind.U16: return \"unsigned short\";\r\n case TypeKind.U32: return \"unsigned long\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"unsigned long long\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"unsigned long long\" : \"unsigned long\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"boolean\";\r\n case TypeKind.F32: return \"unrestricted float\";\r\n case TypeKind.F64: return \"unrestricted double\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"interface ASModule {\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n/** A TypeScript definitions builder. */\r\nexport class TSDBuilder extends ExportsWalker {\r\n\r\n /** Builds TypeScript definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new TSDBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.STATIC)) {\r\n if (isConst) sb.push(\"static readonly \");\r\n else sb.push(\"static \");\r\n } else {\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"var \");\r\n }\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"enum \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n let numMembers = members.size;\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n indent(sb, this.indentLevel);\r\n sb.push(name);\r\n if (member.is(CommonFlags.INLINED)) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\",\\n\");\r\n --numMembers;\r\n }\r\n }\r\n if (numMembers) this.visitNamespace(element);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n if (element.isAny(CommonFlags.PRIVATE | CommonFlags.SET)) return;\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.GET)) {\r\n sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally\r\n sb.push(\": \");\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\";\\n\");\r\n return;\r\n } else {\r\n if (!element.isAny(CommonFlags.STATIC | CommonFlags.INSTANCE)) sb.push(\"function \");\r\n sb.push(element.simpleName);\r\n }\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(signature.getParameterName(i));\r\n sb.push(\": \");\r\n sb.push(this.typeToString(parameters[i]));\r\n }\r\n if (element.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.SET)) {\r\n sb.push(\")\");\r\n } else {\r\n sb.push(\"): \");\r\n sb.push(this.typeToString(signature.returnType));\r\n }\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n var isInterface = element.kind == ElementKind.INTERFACE;\r\n indent(sb, this.indentLevel++);\r\n if (isInterface) {\r\n sb.push(\"interface \");\r\n } else {\r\n if (element.is(CommonFlags.ABSTRACT)) sb.push(\"abstract \");\r\n sb.push(\"class \");\r\n }\r\n sb.push(element.simpleName);\r\n var base = element.base;\r\n if (base && base.is(CommonFlags.COMPILED | CommonFlags.MODULE_EXPORT)) {\r\n sb.push(\" extends \");\r\n sb.push(base.simpleName); // TODO: fqn\r\n }\r\n sb.push(\" {\\n\");\r\n var members = element.prototype.members; // static\r\n if (members) {\r\n for (let member of members.values()) {\r\n this.visitElement(member);\r\n }\r\n }\r\n var ctor = element.constructorInstance;\r\n if (ctor) this.visitFunction(ctor);\r\n members = element.members; // instance\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n if (element.is(CommonFlags.PRIVATE)) return;\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.READONLY)) sb.push(\"readonly \");\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitNamespace(element: Element): void {\r\n var members = element.members;\r\n if (members && members.size) {\r\n let sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"namespace \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"I64\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"I64\" : \"i32\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"U64\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"U64\" : \"u32\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"declare module ASModule {\\n\");\r\n sb.push(\" type i8 = number;\\n\");\r\n sb.push(\" type i16 = number;\\n\");\r\n sb.push(\" type i32 = number;\\n\");\r\n sb.push(\" type u8 = number;\\n\");\r\n sb.push(\" type u16 = number;\\n\");\r\n sb.push(\" type u32 = number;\\n\");\r\n sb.push(\" type f32 = number;\\n\");\r\n sb.push(\" type f64 = number;\\n\");\r\n sb.push(\" type bool = any;\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n sb.push(\"export default ASModule;\\n\");\r\n return this.sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n/** Tests if a namespace-like element has at least one compiled member. */\r\nfunction hasCompiledMember(element: Element): bool {\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (member.is(CommonFlags.COMPILED) || hasCompiledMember(member)) return true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n","/**\r\n * A decompiler that generates low-level AssemblyScript from WebAssembly binaries.\r\n * @module decompiler\r\n *//***/\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n ExpressionId,\r\n UnaryOp,\r\n BinaryOp,\r\n HostOp,\r\n FunctionRef,\r\n ExpressionRef,\r\n Index,\r\n getFunctionName,\r\n getFunctionBody,\r\n getFunctionParamCount,\r\n getFunctionParamType,\r\n getFunctionResultType,\r\n getExpressionId,\r\n getExpressionType,\r\n getBlockName,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getIfCondition,\r\n getIfTrue,\r\n getIfFalse,\r\n getLoopName,\r\n getLoopBody,\r\n getBreakName,\r\n getBreakCondition,\r\n getGetLocalIndex,\r\n getSetLocalIndex,\r\n getSetLocalValue,\r\n getLoadOffset,\r\n getLoadPtr,\r\n getStoreOffset,\r\n getStorePtr,\r\n getStoreValue,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getUnaryOp,\r\n getUnaryValue,\r\n getBinaryOp,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getSelectThen,\r\n getSelectElse,\r\n getSelectCondition,\r\n getDropValue,\r\n getReturnValue,\r\n getHostOp,\r\n getHostOperand\r\n} from \"./module\";\r\n\r\n// TODO :-)\r\n\r\nexport class Decompiler {\r\n\r\n static decompile(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n }\r\n\r\n text: string[] = [];\r\n functionId: i32 = 0;\r\n\r\n constructor() { }\r\n\r\n /** Decompiles a module to an AST that can then be serialized. */\r\n decompile(module: Module): void {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n decompileFunction(func: FunctionRef): void {\r\n var name = getFunctionName(func) || \"$\" + this.functionId.toString(10);\r\n var body = getFunctionBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (let i: Index = 0, k: Index = getFunctionParamCount(func); i < k; ++i) {\r\n if (i > 0) this.push(\", \");\r\n this.push(\"$\");\r\n this.push(i.toString(10));\r\n this.push(\": \");\r\n this.push(nativeTypeToType(getFunctionParamType(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(getFunctionResultType(func)));\r\n this.push(\" \");\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"\\n}\\n\");\r\n }\r\n ++this.functionId;\r\n }\r\n\r\n decompileExpression(expr: ExpressionRef): void {\r\n var id = getExpressionId(expr);\r\n var type = getExpressionType(expr);\r\n\r\n var nested: ExpressionRef;\r\n var string: string | null;\r\n var i: Index, k: Index;\r\n\r\n switch (id) {\r\n case ExpressionId.Block: { // TODO: magic\r\n if ((string = getBlockName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = getBlockChildCount(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(getBlockChild(expr, i));\r\n }\r\n this.push(\"}\\n\");\r\n return;\r\n }\r\n case ExpressionId.If: {\r\n if (type == NativeType.None) {\r\n this.push(\"if (\");\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(getIfTrue(expr));\r\n if (nested = getIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(getIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(getIfFalse(expr));\r\n }\r\n return;\r\n }\r\n case ExpressionId.Loop: {\r\n if ((string = getLoopName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(getLoopBody(expr));\r\n this.push(\"while (0);\\n\");\r\n }\r\n case ExpressionId.Break: {\r\n if (nested = getBreakCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = getBreakName(expr)) != null) {\r\n this.push(\"break \");\r\n this.push(string);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"break;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Switch:\r\n case ExpressionId.Call:\r\n case ExpressionId.CallImport:\r\n case ExpressionId.CallIndirect: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.GetLocal: {\r\n this.push(\"$\");\r\n this.push(getGetLocalIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(getSetLocalIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(getSetLocalValue(expr));\r\n return;\r\n }\r\n case ExpressionId.GetGlobal:\r\n case ExpressionId.SetGlobal: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.Load: {\r\n this.push(\"load<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getLoadOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getLoadPtr(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Store: {\r\n this.push(\"store<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getStoreOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getStorePtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getStoreValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Const: {\r\n switch (type) {\r\n case NativeType.I32: {\r\n this.push(getConstValueI32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.I64: {\r\n this.push(\r\n i64_to_string(\r\n i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(getConstValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(getConstValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NegF32:\r\n case UnaryOp.NegF64: {\r\n this.push(\"-\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: {\r\n this.push(\"!\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Binary: { // TODO: precedence\r\n switch (getBinaryOp(expr)) {\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.SubI32:\r\n case BinaryOp.SubI64:\r\n case BinaryOp.SubF32:\r\n case BinaryOp.SubF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.MulI32:\r\n case BinaryOp.MulI64:\r\n case BinaryOp.MulF32:\r\n case BinaryOp.MulF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivI32:\r\n case BinaryOp.DivI64:\r\n case BinaryOp.DivF32:\r\n case BinaryOp.DivF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n case ExpressionId.Select: {\r\n this.push(\"select<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.decompileExpression(getSelectThen(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectElse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(getDropValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = getReturnValue(expr)) {\r\n this.push(\"return \");\r\n this.decompileExpression(nested);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"return;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Host: {\r\n switch (getHostOp(expr)) {\r\n case HostOp.CurrentMemory: {\r\n this.push(\"current_memory()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"grow_memory(\");\r\n this.decompileExpression(getHostOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Nop: {\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Unreachable: {\r\n this.push(\"unreachable()\");\r\n return;\r\n }\r\n case ExpressionId.AtomicCmpxchg:\r\n case ExpressionId.AtomicRMW:\r\n case ExpressionId.AtomicWait:\r\n case ExpressionId.AtomicWake:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n private push(text: string): void {\r\n // mostly here so we can add debugging if necessary\r\n this.text.push(text);\r\n }\r\n\r\n finish(): string {\r\n var ret = this.text.join(\"\");\r\n this.text = [];\r\n return ret;\r\n }\r\n}\r\n\r\nfunction nativeTypeToType(type: NativeType): string {\r\n switch (type) {\r\n case NativeType.None: return \"void\";\r\n case NativeType.I32: return \"i32\";\r\n case NativeType.I64: return \"i64\";\r\n case NativeType.F32: return \"f32\";\r\n case NativeType.F64: return \"f64\";\r\n case NativeType.Unreachable: throw new Error(\"unreachable type\");\r\n case NativeType.Auto: throw new Error(\"auto type\");\r\n default: throw new Error(\"unexpected type\");\r\n }\r\n}\r\n","/**\r\n * Low-level C-like compiler API.\r\n * @module index\r\n *//***/\r\n\r\nimport {\r\n Compiler,\r\n Options,\r\n Target,\r\n Feature\r\n} from \"./compiler\";\r\n\r\nimport {\r\n Decompiler\r\n} from \"./decompiler\";\r\n\r\nimport {\r\n IDLBuilder,\r\n TSDBuilder\r\n} from \"./definitions\";\r\n\r\nimport {\r\n DiagnosticMessage,\r\n DiagnosticCategory,\r\n formatDiagnosticMessage\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module\r\n} from \"./module\";\r\n\r\nimport {\r\n Parser\r\n} from \"./parser\";\r\n\r\nimport {\r\n Program\r\n} 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","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n","const Long = global.Long || require(\"long\");\r\n\r\nglobal.i64_zero = Long.ZERO;\r\n\r\nglobal.i64_one = Long.ONE;\r\n\r\nglobal.i64_new = function(lo, hi) {\r\n return Long.fromBits(lo, hi);\r\n};\r\n\r\nglobal.i64_low = function(value) {\r\n return value.low;\r\n};\r\n\r\nglobal.i64_high = function(value) {\r\n return value.high;\r\n};\r\n\r\nglobal.i64_add = function(left, right) {\r\n return left.add(right);\r\n};\r\n\r\nglobal.i64_sub = function(left, right) {\r\n return left.sub(right);\r\n};\r\n\r\nglobal.i64_mul = function(left, right) {\r\n return left.mul(right);\r\n};\r\n\r\nglobal.i64_div = function(left, right) {\r\n return left.div(right);\r\n};\r\n\r\nglobal.i64_div_u = function(left, right) {\r\n return left.toUnsigned().div(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_rem = function(left, right) {\r\n return left.mod(right);\r\n};\r\n\r\nglobal.i64_rem_u = function(left, right) {\r\n return left.toUnsigned().mod(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_and = function(left, right) {\r\n return left.and(right);\r\n};\r\n\r\nglobal.i64_or = function(left, right) {\r\n return left.or(right);\r\n};\r\n\r\nglobal.i64_xor = function(left, right) {\r\n return left.xor(right);\r\n};\r\n\r\nglobal.i64_shl = function(left, right) {\r\n return left.shl(right);\r\n};\r\n\r\nglobal.i64_shr = function(left, right) {\r\n return left.shr(right);\r\n};\r\n\r\nglobal.i64_shr_u = function(left, right) {\r\n return left.shru(right);\r\n};\r\n\r\nglobal.i64_not = function(value) {\r\n return value.not();\r\n};\r\n\r\nglobal.i64_eq = function(left, right) {\r\n return left.eq(right);\r\n};\r\n\r\nglobal.i64_ne = function(left, right) {\r\n return left.ne(right);\r\n};\r\n\r\nglobal.i64_align = function(value, alignment) {\r\n assert(alignment && (alignment & (alignment - 1)) == 0);\r\n var mask = Long.fromInt(alignment - 1);\r\n return value.add(mask).and(mask.not());\r\n};\r\n\r\nglobal.i64_is_i8 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i8.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i8.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i16 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i16.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i16.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i32 = function(value) {\r\n return (value.high === 0 && value.low >= 0)\r\n || (value.high === -1 && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_u8 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u8.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u16 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u16.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u32 = function(value) {\r\n return value.high === 0;\r\n};\r\n\r\nglobal.i64_is_bool = function(value) {\r\n return value.high === 0 && (value.low === 0 || value.low === 1);\r\n};\r\n\r\nconst minSafeF32 = Long.fromNumber(f32.MIN_SAFE_INTEGER);\r\nconst maxSafeF32 = Long.fromNumber(f32.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f32 = function(value) {\r\n return value.gte(minSafeF32) && value.lte(maxSafeF32);\r\n};\r\n\r\nconst minSafeF64 = Long.fromNumber(f64.MIN_SAFE_INTEGER);\r\nconst maxSafeF64 = Long.fromNumber(f64.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f64 = function(value) {\r\n return value.gte(minSafeF64) && value.lte(maxSafeF64);\r\n};\r\n\r\nglobal.i64_to_f32 = function(value) {\r\n return global.Math.fround(value.toNumber());\r\n};\r\n\r\nglobal.i64_to_f64 = function(value) {\r\n return value.toNumber();\r\n};\r\n\r\nglobal.i64_to_string = function(value, unsigned) {\r\n return (unsigned ? value.toUnsigned() : value).toString(10);\r\n};\r\n","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","/**\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\nenum 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 /** Target expression of the previously resolved property or element access. */\r\n resolvedThisExpression: Expression | null = null;\r\n /** Element expression of the previously resolved element access. */\r\n resolvedElementExpression : Expression | null = null;\r\n\r\n /** Constructs 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.resolvedThisExpression = null;\r\n this.resolvedElementExpression = 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.resolvedThisExpression = null;\r\n this.resolvedElementExpression = 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.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n // search global scope\r\n if (element = elementsLookup.get(name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n 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 classReference = (target).type.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, (target).type.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = 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.resolvedElementExpression;\r\n if (elementExpression) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementExpression.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (!(target = returnType.classReference)) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, returnType.toString()\r\n );\r\n return null;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // Look up the member within\r\n switch (target.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n case ElementKind.CLASS: {\r\n do {\r\n let members = target.members;\r\n let member: Element | null;\r\n if (members && (member = members.get(propertyName))) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = null;\r\n return member; // instance FIELD, static GLOBAL, FUNCTION_PROTOTYPE...\r\n }\r\n // traverse inherited static members on the base prototype if target is a class prototype\r\n if (target.kind == ElementKind.CLASS_PROTOTYPE) {\r\n if ((target).basePrototype) {\r\n target = (target).basePrototype;\r\n } else {\r\n break;\r\n }\r\n // traverse inherited instance members on the base class if target is a class instance\r\n } else if (target.kind == ElementKind.CLASS) {\r\n if ((target).base) {\r\n target = (target).base;\r\n } else {\r\n break;\r\n }\r\n } else {\r\n break;\r\n }\r\n } while (true);\r\n break;\r\n }\r\n default: { // enums or other namespace-like elements\r\n let members = target.members;\r\n if (members) {\r\n let member = members.get(propertyName);\r\n if (member) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = null;\r\n return member; // static ENUMVALUE, static GLOBAL, static FUNCTION_PROTOTYPE...\r\n }\r\n }\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.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS: { // element access on element access\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n 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.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = 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.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return classType;\r\n }\r\n }\r\n return null;\r\n }\r\n case NodeKind.BINARY: { // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n }\r\n case NodeKind.THIS: { // -> Class / ClassPrototype\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"this\");\r\n if (explicitLocal) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return parent;\r\n }\r\n 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.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent && parent.kind == ElementKind.CLASS && (parent = (parent).base)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return parent;\r\n }\r\n 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.resolvedThisExpression = expression;\r\n this.resolvedElementExpression = 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","/** @module util *//***/\r\n\r\n/** Reads a 32-bit integer from the specified buffer. */\r\nexport function readI32(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset ]\r\n | buffer[offset + 1] << 8\r\n | buffer[offset + 2] << 16\r\n | buffer[offset + 3] << 24;\r\n}\r\n\r\n/** Writes a 32-bit integer to the specified buffer. */\r\nexport function writeI32(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset ] = value;\r\n buffer[offset + 1] = value >>> 8;\r\n buffer[offset + 2] = value >>> 16;\r\n buffer[offset + 3] = value >>> 24;\r\n}\r\n\r\n/** Reads a 64-bit integer from the specified buffer. */\r\nexport function readI64(buffer: Uint8Array, offset: i32): I64 {\r\n var lo = readI32(buffer, offset);\r\n var hi = readI32(buffer, offset + 4);\r\n return i64_new(lo, hi);\r\n}\r\n\r\n/** Writes a 64-bit integer to the specified buffer. */\r\nexport function writeI64(value: I64, buffer: Uint8Array, offset: i32): void {\r\n writeI32(i64_low(value), buffer, offset);\r\n writeI32(i64_high(value), buffer, offset + 4);\r\n}\r\n\r\n/** Reads a 32-bit float from the specified buffer. */\r\nexport function readF32(buffer: Uint8Array, offset: i32): f32 {\r\n return i32_as_f32(readI32(buffer, offset));\r\n}\r\n\r\n/** Writes a 32-bit float to the specified buffer. */\r\nexport function writeF32(value: f32, buffer: Uint8Array, offset: i32): void {\r\n writeI32(f32_as_i32(value), buffer, offset);\r\n}\r\n\r\n/** Reads a 64-bit float from the specified buffer. */\r\nexport function readF64(buffer: Uint8Array, offset: i32): f64 {\r\n return i64_as_f64(readI64(buffer, offset));\r\n}\r\n\r\n/** Writes a 64-bit float to the specified buffer. */\r\nexport function writeF64(value: f64, buffer: Uint8Array, offset: i32): void {\r\n var valueI64 = f64_as_i64(value);\r\n writeI32(i64_low(valueI64), buffer, offset);\r\n writeI32(i64_high(valueI64), buffer, offset + 4);\r\n}\r\n","/** @module util *//***/\r\n\r\nconst indentX1 = \" \";\r\nconst indentX2 = \" \";\r\nconst indentX4 = \" \";\r\n\r\n/** Creates an indentation matching the number of specified levels. */\r\nexport function indent(sb: string[], level: i32): void {\r\n while (level >= 4) {\r\n sb.push(indentX4);\r\n level -= 4;\r\n }\r\n if (level >= 2) {\r\n sb.push(indentX2);\r\n level -= 2;\r\n }\r\n if (level) {\r\n sb.push(indentX1);\r\n }\r\n}\r\n","/** @module util *//***/\r\n\r\nimport {\r\n CharCode\r\n} from \"./charcode\";\r\n\r\nconst separator = CharCode.SLASH;\r\n\r\n/**\r\n * Normalizes the specified path, removing interior placeholders.\r\n * Expects a posix-compatible relative path (not Windows compatible).\r\n */\r\nexport function normalizePath(path: string): string {\r\n var pos = 0;\r\n var len = path.length;\r\n\r\n // trim leading './'\r\n while (pos + 1 < len &&\r\n path.charCodeAt(pos) == CharCode.DOT &&\r\n path.charCodeAt(pos + 1) == separator\r\n ) {\r\n pos += 2;\r\n }\r\n\r\n if (pos > 0 || len < path.length) {\r\n path = path.substring(pos, len);\r\n len -= pos;\r\n pos = 0;\r\n }\r\n\r\n var atEnd: bool;\r\n while (pos + 1 < len) {\r\n atEnd = false;\r\n\r\n // we are only interested in '/.' sequences ...\r\n if (\r\n path.charCodeAt(pos) == separator &&\r\n path.charCodeAt(pos + 1) == CharCode.DOT\r\n ) {\r\n // '/.' ( '/' | $ )\r\n atEnd = pos + 2 == len;\r\n if (atEnd ||\r\n pos + 2 < len &&\r\n path.charCodeAt(pos + 2) == separator\r\n ) {\r\n path = atEnd\r\n ? path.substring(0, pos)\r\n : path.substring(0, pos) + path.substring(pos + 2);\r\n len -= 2;\r\n continue;\r\n }\r\n\r\n // '/.' ( './' | '.' $ )\r\n atEnd = pos + 3 == len;\r\n if (atEnd && path.charCodeAt(pos + 2) == CharCode.DOT ||\r\n pos + 3 < len &&\r\n path.charCodeAt(pos + 2) == CharCode.DOT &&\r\n path.charCodeAt(pos + 3) == separator\r\n ) {\r\n // find preceeding '/'\r\n let ipos = pos;\r\n while (--ipos >= 0) {\r\n if (path.charCodeAt(ipos) == separator) {\r\n if (pos - ipos != 3 ||\r\n path.charCodeAt(ipos + 1) != CharCode.DOT ||\r\n path.charCodeAt(ipos + 2) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = atEnd\r\n ? path.substring(0, ipos)\r\n : path.substring(0, ipos) + path.substring(pos + 3);\r\n len -= pos + 3 - ipos;\r\n pos = ipos - 1; // incremented again at end of loop\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // if there's no preceeding '/', trim start if non-empty\r\n if (ipos < 0 && pos > 0) {\r\n if (pos != 2 ||\r\n path.charCodeAt(0) != CharCode.DOT ||\r\n path.charCodeAt(1) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = path.substring(pos + 4);\r\n len = path.length;\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n pos++;\r\n }\r\n return len > 0 ? path : \".\";\r\n}\r\n\r\n/** Resolves the specified path relative to the specified origin. */\r\nexport function resolvePath(normalizedPath: string, origin: string): string {\r\n if (normalizedPath.startsWith(\"std/\")) {\r\n return normalizedPath;\r\n }\r\n return normalizePath(\r\n dirname(origin) + String.fromCharCode(separator) + normalizedPath\r\n );\r\n}\r\n\r\n/** Obtains the directory portion of a normalized path. */\r\nexport function dirname(normalizedPath: string): string {\r\n var pos = normalizedPath.length;\r\n while (--pos > 0) {\r\n if (normalizedPath.charCodeAt(pos) == separator) {\r\n return normalizedPath.substring(0, pos);\r\n }\r\n }\r\n return \".\";\r\n}\r\n","/** @module util *//***/\r\n\r\n/** An enum of named character codes. */\r\nexport const enum CharCode {\r\n\r\n NULL = 0,\r\n LINEFEED = 0x0A,\r\n CARRIAGERETURN = 0x0D,\r\n LINESEPARATOR = 0x2028,\r\n PARAGRAPHSEPARATOR = 0x2029,\r\n NEXTLINE = 0x0085,\r\n\r\n SPACE = 0x20,\r\n NONBREAKINGSPACE = 0xA0,\r\n ENQUAD = 0x2000,\r\n EMQUAD = 0x2001,\r\n ENSPACE = 0x2002,\r\n EMSPACE = 0x2003,\r\n THREEPEREMSPACE = 0x2004,\r\n FOURPEREMSPACE = 0x2005,\r\n SIXPEREMSPACE = 0x2006,\r\n FIGURESPACE = 0x2007,\r\n PUNCTUATIONSPACE = 0x2008,\r\n THINSPACE = 0x2009,\r\n HAIRSPACE = 0x200A,\r\n ZEROWIDTHSPACE = 0x200B,\r\n NARROWNOBREAKSPACE = 0x202F,\r\n IDEOGRAPHICSPACE = 0x3000,\r\n MATHEMATICALSPACE = 0x205F,\r\n OGHAM = 0x1680,\r\n\r\n _ = 0x5F,\r\n\r\n _0 = 0x30,\r\n _1 = 0x31,\r\n _2 = 0x32,\r\n _3 = 0x33,\r\n _4 = 0x34,\r\n _5 = 0x35,\r\n _6 = 0x36,\r\n _7 = 0x37,\r\n _8 = 0x38,\r\n _9 = 0x39,\r\n\r\n a = 0x61,\r\n b = 0x62,\r\n c = 0x63,\r\n d = 0x64,\r\n e = 0x65,\r\n f = 0x66,\r\n g = 0x67,\r\n h = 0x68,\r\n i = 0x69,\r\n j = 0x6A,\r\n k = 0x6B,\r\n l = 0x6C,\r\n m = 0x6D,\r\n n = 0x6E,\r\n o = 0x6F,\r\n p = 0x70,\r\n q = 0x71,\r\n r = 0x72,\r\n s = 0x73,\r\n t = 0x74,\r\n u = 0x75,\r\n v = 0x76,\r\n w = 0x77,\r\n x = 0x78,\r\n y = 0x79,\r\n z = 0x7A,\r\n\r\n A = 0x41,\r\n B = 0x42,\r\n C = 0x43,\r\n D = 0x44,\r\n E = 0x45,\r\n F = 0x46,\r\n G = 0x47,\r\n H = 0x48,\r\n I = 0x49,\r\n J = 0x4A,\r\n K = 0x4B,\r\n L = 0x4C,\r\n M = 0x4D,\r\n N = 0x4E,\r\n O = 0x4F,\r\n P = 0x50,\r\n Q = 0x51,\r\n R = 0x52,\r\n S = 0x53,\r\n T = 0x54,\r\n U = 0x55,\r\n V = 0x56,\r\n W = 0x57,\r\n X = 0x58,\r\n Y = 0x59,\r\n Z = 0x5a,\r\n\r\n AMPERSAND = 0x26,\r\n ASTERISK = 0x2A,\r\n AT = 0x40,\r\n BACKSLASH = 0x5C,\r\n BACKTICK = 0x60,\r\n BAR = 0x7C,\r\n CARET = 0x5E,\r\n CLOSEBRACE = 0x7D,\r\n CLOSEBRACKET = 0x5D,\r\n CLOSEPAREN = 0x29,\r\n COLON = 0x3A,\r\n COMMA = 0x2C,\r\n DOLLAR = 0x24,\r\n DOT = 0x2E,\r\n DOUBLEQUOTE = 0x22,\r\n EQUALS = 0x3D,\r\n EXCLAMATION = 0x21,\r\n GREATERTHAN = 0x3E,\r\n HASH = 0x23,\r\n LESSTHAN = 0x3C,\r\n MINUS = 0x2D,\r\n OPENBRACE = 0x7B,\r\n OPENBRACKET = 0x5B,\r\n OPENPAREN = 0x28,\r\n PERCENT = 0x25,\r\n PLUS = 0x2B,\r\n QUESTION = 0x3F,\r\n SEMICOLON = 0x3B,\r\n SINGLEQUOTE = 0x27,\r\n SLASH = 0x2F,\r\n TILDE = 0x7E,\r\n\r\n BACKSPACE = 0x08,\r\n FORMFEED = 0x0C,\r\n BYTEORDERMARK = 0xFEFF,\r\n TAB = 0x09,\r\n VERTICALTAB = 0x0B\r\n}\r\n\r\n/** Tests if the specified character code is some sort of line break. */\r\nexport function isLineBreak(c: CharCode): bool {\r\n switch (c) {\r\n case CharCode.LINEFEED:\r\n case CharCode.CARRIAGERETURN:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: {\r\n return true;\r\n }\r\n default: {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is some sort of white space. */\r\nexport function isWhiteSpace(c: i32): bool {\r\n switch (c) {\r\n case CharCode.SPACE:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.NONBREAKINGSPACE:\r\n case CharCode.NEXTLINE:\r\n case CharCode.OGHAM:\r\n case CharCode.NARROWNOBREAKSPACE:\r\n case CharCode.MATHEMATICALSPACE:\r\n case CharCode.IDEOGRAPHICSPACE:\r\n case CharCode.BYTEORDERMARK: {\r\n return true;\r\n }\r\n default: {\r\n return c >= CharCode.ENQUAD && c <= CharCode.ZEROWIDTHSPACE;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is a valid decimal digit. */\r\nexport function isDecimalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._9;\r\n}\r\n\r\n/** Tests if the specified character code is a valid octal digit. */\r\nexport function isOctalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._7;\r\n}\r\n\r\n/** Tests if the specified character code is a valid start of an identifier. */\r\nexport function isIdentifierStart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierStart(c);\r\n}\r\n\r\n/** Tests if the specified character code is a valid keyword character. */\r\nexport function isKeywordCharacter(c: i32): bool {\r\n return c >= CharCode.a && c <= CharCode.z;\r\n}\r\n\r\n/** Tests if the specified character code is a valid part of an identifier. */\r\nexport function isIdentifierPart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c >= CharCode._0 && c <= CharCode._9\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierPart(c);\r\n}\r\n\r\n// storing as u16 to save memory\r\nconst unicodeIdentifierStart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514,\r\n 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774,\r\n 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969,\r\n 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088,\r\n 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384,\r\n 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474,\r\n 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529,\r\n 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613,\r\n 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705,\r\n 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784,\r\n 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873,\r\n 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958,\r\n 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986,\r\n 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125,\r\n 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240,\r\n 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333,\r\n 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455,\r\n 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634,\r\n 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725,\r\n 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757,\r\n 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840,\r\n 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186,\r\n 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293,\r\n 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696,\r\n 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798,\r\n 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992,\r\n 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872,\r\n 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016,\r\n 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389,\r\n 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688,\r\n 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141,\r\n 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424,\r\n 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025,\r\n 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130,\r\n 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188,\r\n 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469,\r\n 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505,\r\n 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520,\r\n 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670,\r\n 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720,\r\n 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540,\r\n 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893,\r\n 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538,\r\n 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888,\r\n 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015,\r\n 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259,\r\n 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520,\r\n 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695,\r\n 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739,\r\n 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798,\r\n 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243,\r\n 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285,\r\n 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323,\r\n 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019,\r\n 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474,\r\n 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\nconst unicodeIdentifierPart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415,\r\n 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520,\r\n 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788,\r\n 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112,\r\n 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423,\r\n 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482,\r\n 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525,\r\n 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602,\r\n 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632,\r\n 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693,\r\n 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757,\r\n 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821,\r\n 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884,\r\n 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929,\r\n 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972,\r\n 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018,\r\n 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088,\r\n 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157,\r\n 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216,\r\n 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285,\r\n 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340,\r\n 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424,\r\n 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515,\r\n 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570,\r\n 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720,\r\n 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751,\r\n 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789,\r\n 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895,\r\n 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028,\r\n 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304,\r\n 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744,\r\n 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808,\r\n 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108,\r\n 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902,\r\n 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099,\r\n 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272,\r\n 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516,\r\n 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783,\r\n 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155,\r\n 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676,\r\n 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027,\r\n 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134,\r\n 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205,\r\n 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417,\r\n 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477,\r\n 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517,\r\n 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559,\r\n 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686,\r\n 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728,\r\n 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449,\r\n 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799,\r\n 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512,\r\n 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783,\r\n 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072,\r\n 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309,\r\n 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584,\r\n 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741,\r\n 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808,\r\n 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203,\r\n 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275,\r\n 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321,\r\n 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008,\r\n 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140,\r\n 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382,\r\n 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\n\r\nfunction lookupInUnicodeMap(code: u16, map: u16[]): bool {\r\n if (code < map[0]) return false;\r\n\r\n var lo = 0;\r\n var hi = map.length;\r\n var mid: i32;\r\n\r\n while (lo + 1 < hi) {\r\n mid = lo + (hi - lo) / 2;\r\n mid -= mid % 2;\r\n if (map[mid] <= code && code <= map[mid + 1]) {\r\n return true;\r\n }\r\n if (code < map[mid]) {\r\n hi = mid;\r\n } else {\r\n lo = mid + 2;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction isUnicodeIdentifierStart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierStart);\r\n}\r\n\r\nfunction isUnicodeIdentifierPart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierPart);\r\n}\r\n","/**\r\n * Built-in elements providing WebAssembly core functionality.\r\n * @module builtins\r\n *//***/\r\n\r\n import {\r\n Compiler,\r\n ConversionKind,\r\n WrapMode\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Expression,\r\n LiteralKind,\r\n LiteralExpression,\r\n StringLiteralExpression\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags\r\n} from \"./types\";\r\n\r\nimport {\r\n BinaryOp,\r\n UnaryOp,\r\n HostOp,\r\n NativeType,\r\n ExpressionRef,\r\n ExpressionId,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI64High,\r\n getConstValueI64Low,\r\n getConstValueI32\r\n} from \"./module\";\r\n\r\nimport {\r\n ElementKind,\r\n FunctionPrototype,\r\n Class,\r\n Field,\r\n OperatorKind,\r\n FlowFlags\r\n} from \"./program\";\r\n\r\n/** Compiles a call to a built-in function. */\r\nexport function compileCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n\r\n var arg0: ExpressionRef,\r\n arg1: ExpressionRef,\r\n arg2: ExpressionRef,\r\n ret: ExpressionRef;\r\n\r\n // NOTE that some implementations below make use of the select expression where straight-forward.\r\n // whether worth or not should probably be tested once/ it's known if/how embedders handle it.\r\n // search: createSelect\r\n\r\n switch (prototype.internalName) {\r\n\r\n // types\r\n\r\n case \"isInteger\": { // isInteger() / isInteger(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.INTEGER) && !type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isFloat\": { // isFloat() / isFloat(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.FLOAT)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isSigned\": { // isSigned() / isSigned(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.SIGNED)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isReference\": { // isReference() / isReference(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n compiler.currentType = Type.bool;\r\n return type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isString\": { // isString() / isString(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n if (classType) {\r\n let stringInstance = compiler.program.stringInstance;\r\n if (stringInstance && classType.isAssignableTo(stringInstance)) return module.createI32(1);\r\n }\r\n return module.createI32(0);\r\n }\r\n case \"isArray\": { // isArray() / isArray(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n return classType != null && classType.lookupOverload(OperatorKind.INDEXED_GET) != null\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n\r\n // math\r\n\r\n case \"clz\": { // clz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ClzI64\r\n : UnaryOp.ClzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.ClzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ctz\": { // ctz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.NONE, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.CtzI64\r\n : UnaryOp.CtzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.CtzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"popcnt\": { // popcnt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.PopcntI64\r\n : UnaryOp.PopcntI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.PopcntI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"rotl\": { // rotl(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotlI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotlI64\r\n : BinaryOp.RotlI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotlI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflows\r\n }\r\n case \"rotr\": { // rotr(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotrI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotrI64\r\n : BinaryOp.RotrI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotrI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflowws\r\n }\r\n case \"abs\": { // abs(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n // possibly overflows, e.g. abs(-128) == 128\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createSelect( // x > 0 ? x : 0-x\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI32, // ifFalse\r\n module.createI32(0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32)\r\n ),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n module.createI32(0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n compiler.options.usizeType.toNativeZero(module),\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n ),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType),\r\n compiler.options.usizeType.toNativeZero(module)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI64,\r\n module.createI64(0, 0),\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n ),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n module.createI64(0, 0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.BOOL: {\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.AbsF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.AbsF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"max\": { // max(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MaxF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MaxF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"min\": { // min(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MinF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MinF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ceil\": { // ceil(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.CeilF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.CeilF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"floor\": { // floor(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.FloorF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.FloorF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"copysign\": { // copysign(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) { // TODO: does an integer version make sense?\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.CopysignF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.CopysignF64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"nearest\": { // nearest(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.NearestF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.NearestF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"reinterpret\": { // reinterpret(value: *) -> T\r\n if (operands.length != 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (typeArguments[0].kind) {\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF32, arg0);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF64, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (typeArguments[0].is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.f64\r\n : Type.f32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ReinterpretF64\r\n : UnaryOp.ReinterpretF32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI64, arg0);\r\n break;\r\n }\r\n default: { // small integers and void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return ret;\r\n }\r\n case \"sqrt\": { // sqrt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) { // TODO: integer versions (that return f64 or convert)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.SqrtF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.SqrtF64, arg0);\r\n break;\r\n }\r\n // case TypeKind.VOID:\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"trunc\": { // trunc(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments && typeArguments.length) {\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n // TODO: truncate to contextual type directly (if not void etc.)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.TruncF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.TruncF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n // memory access\r\n\r\n case \"load\": { // load(offset: usize, constantOffset?: usize) -> *\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let offset = operands.length == 2 ? evaluateConstantOffset(compiler, operands[1]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return module.createLoad(\r\n typeArguments[0].byteSize,\r\n typeArguments[0].is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n arg0,\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n contextualType.size > typeArguments[0].size\r\n ? (compiler.currentType = contextualType).toNativeType()\r\n : (compiler.currentType = typeArguments[0]).toNativeType(),\r\n offset\r\n );\r\n }\r\n case \"store\": { // store(offset: usize, value: *, constantOffset?: usize) -> void\r\n compiler.currentType = Type.void;\r\n if (operands.length < 2 || operands.length > 3) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n typeArguments[0],\r\n typeArguments[0].is(TypeFlags.INTEGER)\r\n ? ConversionKind.NONE // no need to convert to small int (but now might result in a float)\r\n : ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let type: Type;\r\n if (\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n (\r\n !compiler.currentType.is(TypeFlags.INTEGER) || // float to int\r\n compiler.currentType.size < typeArguments[0].size // int to larger int (clear garbage bits)\r\n )\r\n ) {\r\n arg1 = compiler.convertExpression(\r\n arg1,\r\n compiler.currentType, typeArguments[0],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE, // still clears garbage bits\r\n operands[1]\r\n );\r\n type = typeArguments[0];\r\n } else {\r\n type = compiler.currentType;\r\n }\r\n let offset = operands.length == 3 ? evaluateConstantOffset(compiler, operands[2]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n return module.createStore(typeArguments[0].byteSize, arg0, arg1, type.toNativeType(), offset);\r\n }\r\n case \"sizeof\": { // sizeof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(byteSize);\r\n } else {\r\n ret = module.createI64(byteSize, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(byteSize, 0);\r\n } else {\r\n ret = module.createI32(byteSize);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"alignof\": { // alignof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n let alignLog2: i32;\r\n switch (byteSize) {\r\n case 1: { alignLog2 = 0; break; }\r\n case 2: { alignLog2 = 1; break; }\r\n case 4: { alignLog2 = 2; break; }\r\n case 8: { alignLog2 = 3; break; }\r\n default: { assert(false); return module.createUnreachable(); }\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(alignLog2);\r\n } else {\r\n ret = module.createI64(alignLog2, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(alignLog2, 0);\r\n } else {\r\n ret = module.createI32(alignLog2);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"offsetof\": { // offsetof(fieldName?: string) -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length > 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let classType = typeArguments[0].classReference;\r\n if (!classType) {\r\n compiler.error( // TODO: better error\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let offset: i32;\r\n if (operands.length) {\r\n if (\r\n operands[0].kind != NodeKind.LITERAL ||\r\n (operands[0]).literalKind != LiteralKind.STRING\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.String_literal_expected,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let fieldName = (operands[0]).value;\r\n let field = classType.members ? classType.members.get(fieldName) : null;\r\n if (!(field && field.kind == ElementKind.FIELD)) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_has_no_property_1,\r\n operands[0].range, classType.internalName, fieldName\r\n );\r\n return module.createUnreachable();\r\n }\r\n offset = (field).memoryOffset;\r\n } else {\r\n offset = classType.currentMemoryOffset;\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n return module.createI32(offset);\r\n } else {\r\n return module.createI64(offset);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n return module.createI64(offset);\r\n } else {\r\n return module.createI32(offset);\r\n }\r\n }\r\n }\r\n\r\n // control flow\r\n\r\n case \"select\": { // select(ifTrue: T, ifFalse: T, condition: bool) -> T\r\n if (operands.length != 3) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n let type = compiler.currentType;\r\n arg1 = compiler.compileExpression(operands[1], type, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n arg2 = compiler.makeIsTrueish(\r\n compiler.compileExpressionRetainType(operands[2], Type.bool, WrapMode.NONE),\r\n compiler.currentType\r\n );\r\n compiler.currentType = type;\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n default: { // any other value type\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unreachable\": { // unreachable() -> *\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n\r\n // host operations\r\n\r\n case \"current_memory\": { // current_memory() -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.CurrentMemory);\r\n }\r\n case \"grow_memory\": { // grow_memory(pages: i32) -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n arg0 = module.createUnreachable();\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.GrowMemory, null, [ arg0 ]);\r\n }\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n case \"move_memory\": { // move_memory(dest: usize, src: usize: n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.MoveMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n case \"set_memory\": { // set_memory(dest: usize, value: u8, n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n Type.u32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.SetMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n\r\n // other\r\n\r\n case \"changetype\": { // changetype(value: *) -> T\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpressionRetainType(\r\n operands[0],\r\n typeArguments[0],\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.size != typeArguments[0].size) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // if (reportNode.range.source.sourceKind != SourceKind.STDLIB)\r\n // compiler.warning(DiagnosticCode.Operation_is_unsafe, reportNode.range);\r\n return arg0; // any usize to any usize\r\n }\r\n case \"assert\": { // assert(isTrueish: T, message?: string) -> T with T != null\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else if (operands.length > 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.bool, WrapMode.WRAP);\r\n }\r\n\r\n let type = compiler.currentType;\r\n compiler.currentType = type.nonNullableType;\r\n\r\n // just return ifTrueish if assertions are disabled, or simplify if dropped anyway\r\n if (compiler.options.noAssert) {\r\n if (contextualType == Type.void) {\r\n compiler.currentType = Type.void;\r\n return module.createNop();\r\n }\r\n return arg0;\r\n }\r\n\r\n let abort = compileAbort(compiler, operands.length == 2 ? operands[1] : null, reportNode);\r\n\r\n compiler.currentType = type.nonNullableType;\r\n\r\n if (contextualType == Type.void) { // simplify if dropped anyway\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n // TODO: also check for NaN in float assertions, as in `Boolean(NaN) -> false`?\r\n case TypeKind.F32: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n arg0,\r\n module.createF32(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n arg0,\r\n module.createF64(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n default: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.I64)\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F32)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f64, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F64)\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unchecked\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = compiler.currentFunction.flow;\r\n flow.set(FlowFlags.UNCHECKED_CONTEXT);\r\n ret = compiler.compileExpressionRetainType(operands[0], contextualType, WrapMode.NONE);\r\n flow.unset(FlowFlags.UNCHECKED_CONTEXT);\r\n return ret;\r\n }\r\n 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 // conversions\r\n\r\n case \"i8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"isize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"usize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"bool\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.bool;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.bool,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n var expr = deferASMCall(compiler, prototype, operands, contextualType, reportNode);\r\n if (expr) {\r\n if (typeArguments && typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return expr;\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n}\r\n\r\n/** Defers an inline-assembler-like call to a built-in function. */\r\nfunction deferASMCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (prototype.internalName) {\r\n\r\n // TODO: Operators can't be just deferred (don't have a corresponding generic built-in)\r\n // add, sub, mul, div_s, div_u, rem_s, rem_u\r\n // and, or, xor, shl, shr_u, shr_s\r\n // eq, eqz, ne, lt_s, lt_u, le_s, le_u, gt_s, gt_u, ge_s, ge_u\r\n\r\n case \"i32.clz\": return deferASM(\"clz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.clz\": return deferASM(\"clz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.ctz\": return deferASM(\"ctz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.ctz\": return deferASM(\"ctz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.popcnt\": return deferASM(\"popcnt\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.popcnt\": return deferASM(\"popcnt\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotl\": return deferASM(\"rotl\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotl\": return deferASM(\"rotl\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotr\": return deferASM(\"rotr\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotr\": return deferASM(\"rotr\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.abs\": return deferASM(\"abs\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.abs\": return deferASM(\"abs\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.max\": return deferASM(\"max\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.max\": return deferASM(\"max\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.min\": return deferASM(\"min\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.min\": return deferASM(\"min\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.ceil\": return deferASM(\"ceil\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.ceil\": return deferASM(\"ceil\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.floor\": return deferASM(\"floor\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.floor\": return deferASM(\"floor\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.copysign\": return deferASM(\"copysign\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.copysign\": return deferASM(\"copysign\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.nearest\": return deferASM(\"nearest\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.nearest\": return deferASM(\"nearest\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.reinterpret_f32\": return deferASM(\"reinterpret\", compiler, Type.i32, operands, Type.f32, reportNode);\r\n case \"i64.reinterpret_f64\": return deferASM(\"reinterpret\", compiler, Type.i64, operands, Type.f64, reportNode);\r\n case \"f32.reinterpret_i32\": return deferASM(\"reinterpret\", compiler, Type.f32, operands, Type.i32, reportNode);\r\n case \"f64.reinterpret_i64\": return deferASM(\"reinterpret\", compiler, Type.f64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.sqrt\": return deferASM(\"sqrt\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.sqrt\": return deferASM(\"sqrt\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.trunc\": return deferASM(\"trunc\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.trunc\": return deferASM(\"trunc\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u32, reportNode);\r\n case \"i32.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u32, reportNode);\r\n case \"i32.load\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u64, reportNode);\r\n case \"i64.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u64, reportNode);\r\n case \"i64.load32_s\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.load32_u\": return deferASM(\"load\", compiler, Type.u32, operands, Type.u64, reportNode);\r\n case \"i64.load\": return deferASM(\"load\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.load\": return deferASM(\"load\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.load\": return deferASM(\"load\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.store\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.store32\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.store\": return deferASM(\"store\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.store\": return deferASM(\"store\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.store\": return deferASM(\"store\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n }\r\n return 0;\r\n}\r\n\r\n/** A helper for deferring inline-assembler-like calls to built-in functions. */\r\nfunction deferASM(\r\n name: string,\r\n compiler: Compiler,\r\n typeArgument: Type,\r\n operands: Expression[],\r\n valueType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var prototype = assert(compiler.program.elementsLookup.get(name));\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return compileCall(compiler, prototype, [ typeArgument ], operands, valueType, reportNode);\r\n}\r\n\r\n/** Evaluates the constant type of a type argument *or* expression. */\r\nfunction evaluateConstantType(\r\n compiler: Compiler,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n reportNode: Node\r\n): Type | null {\r\n if (operands.length == 0) { // requires type argument\r\n if (!typeArguments || typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return null;\r\n }\r\n return typeArguments[0];\r\n }\r\n if (operands.length == 1) { // optional type argument\r\n if (typeArguments) {\r\n if (typeArguments.length == 1) {\r\n compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n if (typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return null;\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n } else {\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n return compiler.currentType;\r\n }\r\n if (typeArguments && typeArguments.length > 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return null;\r\n}\r\n\r\n/** Evaluates a `constantOffset` argument.*/\r\nfunction evaluateConstantOffset(compiler: Compiler, expression: Expression): i32 {\r\n var expr: ExpressionRef;\r\n var value: i32;\r\n if (compiler.options.isWasm64) {\r\n expr = compiler.precomputeExpression(expression, Type.usize64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I64 ||\r\n getConstValueI64High(expr) != 0 ||\r\n (value = getConstValueI64Low(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n } else {\r\n expr = compiler.precomputeExpression(expression, Type.usize32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I32 ||\r\n (value = getConstValueI32(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n }\r\n return value;\r\n}\r\n\r\nconst allocateInternalName = \"allocate_memory\";\r\n\r\n/** Compiles a memory allocation for an instance of the specified class. */\r\nexport function compileAllocate(\r\n compiler: Compiler,\r\n classInstance: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n assert(classInstance.program == program);\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n\r\n var allocatePrototype = program.elementsLookup.get(allocateInternalName);\r\n if (!allocatePrototype) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, allocateInternalName\r\n );\r\n program.info(\r\n DiagnosticCode.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (allocatePrototype.kind != ElementKind.FUNCTION_PROTOTYPE) {\r\n program.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n reportNode.range, allocatePrototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n var allocateInstance = compiler.resolver.resolveFunction(allocatePrototype, null);\r\n if (!(allocateInstance && compiler.compileFunction(allocateInstance))) return module.createUnreachable();\r\n\r\n compiler.currentType = classInstance.type;\r\n return module.createCall(\r\n allocateInstance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(classInstance.currentMemoryOffset)\r\n : module.createI32(classInstance.currentMemoryOffset)\r\n ],\r\n options.nativeSizeType\r\n );\r\n}\r\n\r\nconst abortInternalName = \"abort\";\r\n\r\n/** Compiles an abort wired to the conditionally imported 'abort' function. */\r\nexport function compileAbort(\r\n compiler: Compiler,\r\n message: Expression | null,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n var module = compiler.module;\r\n\r\n var stringType = program.typesLookup.get(\"string\"); // might be intended\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortPrototype = program.elementsLookup.get(abortInternalName); // might be intended\r\n if (!abortPrototype || abortPrototype.kind != ElementKind.FUNCTION_PROTOTYPE) return module.createUnreachable();\r\n\r\n var abortInstance = compiler.resolver.resolveFunction(abortPrototype, null);\r\n if (!(abortInstance && compiler.compileFunction(abortInstance))) return module.createUnreachable();\r\n\r\n var messageArg = message != null\r\n ? compiler.compileExpression(message, stringType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : stringType.toNativeZero(module);\r\n\r\n var filenameArg = compiler.compileStaticString(reportNode.range.source.normalizedPath);\r\n\r\n compiler.currentType = Type.void;\r\n return module.createBlock(null, [\r\n module.createCallImport(\r\n abortInstance.internalName, [\r\n messageArg,\r\n filenameArg,\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ],\r\n NativeType.None\r\n ),\r\n module.createUnreachable()\r\n ]);\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__24__;","// Copy Binaryen exports to global scope\r\n\r\nconst binaryen = global.Binaryen || require(\"binaryen\");\r\n\r\nfor (var key in binaryen)\r\n if (key.startsWith(\"_Binaryen\") || key.startsWith(\"_Relooper\"))\r\n global[key] = binaryen[key];\r\n\r\n// Utilize Binaryen's heap\r\n\r\nglobal.allocate_memory = function(size) {\r\n if (!size) return 0; // should be safe in our case\r\n return binaryen._malloc(size);\r\n};\r\n\r\nglobal.free_memory = function(ptr) {\r\n if (ptr) binaryen._free(ptr);\r\n};\r\n\r\nglobal.move_memory = function(dest, src, n) {\r\n return binaryen._memmove(dest, src, n);\r\n};\r\n\r\nglobal.store = function(ptr, val) {\r\n binaryen.HEAPU8[ptr] = val;\r\n};\r\n\r\nglobal.load = function(ptr) {\r\n return binaryen.HEAPU8[ptr];\r\n};\r\n\r\n// Implement module stubs\r\n\r\nconst Module = require(\"../../module\").Module;\r\n\r\nModule.prototype.toText = function() {\r\n return new binaryen.Module(this.ref).emitText();\r\n};\r\n\r\nModule.prototype.toAsmjs = function() {\r\n return new binaryen.Module(this.ref).emitAsmjs();\r\n};\r\n","module.exports = globalScope => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n\r\n globalScope[\"allocate_memory\"] = function allocate_memory(size) {\r\n if (!(size >>>= 0)) return 0;\r\n\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7)\r\n HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n\r\n return ptr;\r\n };\r\n\r\n globalScope[\"free_memory\"] = function free_memory(ptr) {\r\n // TODO\r\n };\r\n\r\n globalScope[\"move_memory\"] = function move_memory(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n };\r\n\r\n globalScope[\"store\"] = function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n };\r\n\r\n globalScope[\"load\"] = function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n };\r\n};\r\n","/** @module 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\nrequire(\"./memory\")(globalScope);\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 \"../../../std/portable/index\";\r\nimport \"./binaryen\";\r\nimport \"./float\";\r\nimport \"./i64\";\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/src/ast.ts b/src/ast.ts index 4d75554e..53bc8f85 100644 --- a/src/ast.ts +++ b/src/ast.ts @@ -432,6 +432,18 @@ export abstract class Node { return expr; } + static createObjectLiteralExpression( + names: IdentifierExpression[], + values: Expression[], + range: Range + ): ObjectLiteralExpression { + var expr = new ObjectLiteralExpression(); + expr.range = range; + expr.names = names; + expr.values = values; + return expr; + } + static createParenthesizedExpression( expression: Expression, range: Range @@ -1363,6 +1375,16 @@ export class NullExpression extends IdentifierExpression { text = "null"; } +/** Represents an object literal expression. */ +export class ObjectLiteralExpression extends LiteralExpression { + literalKind = LiteralKind.OBJECT; + + /** Field names. */ + names: IdentifierExpression[]; + /** Field values. */ + values: Expression[]; +} + /** Represents a parenthesized expression. */ export class ParenthesizedExpression extends Expression { kind = NodeKind.PARENTHESIZED; diff --git a/src/common.ts b/src/common.ts index 48fc2b4e..783cdbb8 100644 --- a/src/common.ts +++ b/src/common.ts @@ -71,7 +71,11 @@ export enum CommonFlags { /** Is a virtual method. */ VIRTUAL = 1 << 26, /** Is the main function. */ - MAIN = 1 << 27 + MAIN = 1 << 27, + + // Other + + QUOTED = 1 << 28 } /** Path delimiter inserted between file system levels. */ diff --git a/src/compiler.ts b/src/compiler.ts index 1db84ee8..4c899eb5 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -130,6 +130,7 @@ import { LiteralExpression, LiteralKind, NewExpression, + ObjectLiteralExpression, ParenthesizedExpression, PropertyAccessExpression, TernaryExpression, @@ -6144,7 +6145,10 @@ export class Compiler extends DiagnosticEmitter { assert(!implicitNegate); return this.compileStaticString((expression).value); } - // case LiteralKind.OBJECT: + case LiteralKind.OBJECT: { + assert(!implicitNegate); + return this.compileObjectLiteral(expression, contextualType); + } // case LiteralKind.REGEXP: } this.error( @@ -6392,6 +6396,88 @@ export class Compiler extends DiagnosticEmitter { } } + compileObjectLiteral(expression: ObjectLiteralExpression, contextualType: Type): ExpressionRef { + var module = this.module; + + // contextual type must be a class + var classReference = contextualType.classReference; + if (!classReference || classReference.is(CommonFlags.ABSTRACT)) { + this.error( + DiagnosticCode.Type_0_is_not_assignable_to_type_1, + expression.range, "", contextualType.toString() + ); + return module.createUnreachable(); + } + + // if present, check that the constructor is compatible with object literals + var ctor = classReference.constructorInstance; + if (ctor) { + if (ctor.signature.requiredParameters) { + this.error( + DiagnosticCode.Constructor_of_class_0_must_not_require_any_arguments, + expression.range, classReference.toString() + ); + return module.createUnreachable(); + } + if (ctor.is(CommonFlags.PRIVATE)) { + this.error( + DiagnosticCode.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration, + expression.range, classReference.toString() + ); + return module.createUnreachable(); + } + if (ctor.is(CommonFlags.PROTECTED)) { + this.error( + DiagnosticCode.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration, + expression.range, classReference.toString() + ); + return module.createUnreachable(); + } + } + + // check and compile field values + var names = expression.names; + var numNames = names.length; + var values = expression.values; + var members = classReference.members; + var hasErrors = false; + var exprs = new Array(numNames + 2); + var tempLocal = this.currentFunction.getTempLocal(this.options.usizeType); + assert(numNames == values.length); + for (let i = 0, k = numNames; i < k; ++i) { + let member = members ? members.get(names[i].text) : null; + if (!member || member.kind != ElementKind.FIELD) { + this.error( + DiagnosticCode.Property_0_does_not_exist_on_type_1, + names[i].range, names[i].text, classReference.toString() + ); + hasErrors = true; + continue; + } + let type = (member).type; + exprs[i + 1] = this.module.createStore( // TODO: handle setters as well + type.byteSize, + this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType), + this.compileExpression(values[i], (member).type, ConversionKind.IMPLICIT, WrapMode.NONE), + type.toNativeType(), + (member).memoryOffset + ); + } + this.currentType = classReference.type.nonNullableType; + if (hasErrors) return module.createUnreachable(); + + // allocate a new instance first and assign 'this' to the temp. local + exprs[0] = module.createSetLocal( + tempLocal.index, + compileBuiltinAllocate(this, classReference, expression) + ); + + // once all field values have been set, return 'this' + exprs[exprs.length - 1] = module.createGetLocal(tempLocal.index, this.options.nativeSizeType); + + return module.createBlock(null, exprs, this.options.nativeSizeType); + } + compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef { var module = this.module; var options = this.options; diff --git a/src/diagnosticMessages.generated.ts b/src/diagnosticMessages.generated.ts index d95e2974..a8c46fd6 100644 --- a/src/diagnosticMessages.generated.ts +++ b/src/diagnosticMessages.generated.ts @@ -25,6 +25,7 @@ export enum DiagnosticCode { Duplicate_decorator = 213, An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf = 214, Optional_parameter_must_have_an_initializer = 215, + Constructor_of_class_0_must_not_require_any_arguments = 216, Unterminated_string_literal = 1002, Identifier_expected = 1003, _0_expected = 1005, @@ -111,6 +112,8 @@ export enum DiagnosticCode { Expected_at_least_0_arguments_but_got_1 = 2555, Expected_0_type_arguments_but_got_1 = 2558, A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651, + Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration = 2673, + Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration = 2674, Namespace_0_has_no_exported_member_1 = 2694, File_0_not_found = 6054, Numeric_separators_are_not_allowed_here = 6188, @@ -138,6 +141,7 @@ export function diagnosticCodeToString(code: DiagnosticCode): string { 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 1002: return "Unterminated string literal."; case 1003: return "Identifier expected."; case 1005: return "'{0}' expected."; @@ -224,6 +228,8 @@ export function diagnosticCodeToString(code: DiagnosticCode): string { 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."; diff --git a/src/diagnosticMessages.json b/src/diagnosticMessages.json index bf27b344..827b7ecb 100644 --- a/src/diagnosticMessages.json +++ b/src/diagnosticMessages.json @@ -17,6 +17,7 @@ "Duplicate decorator.": 213, "An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.": 214, "Optional parameter must have an initializer.": 215, + "Constructor of class '{0}' must not require any arguments.": 216, "Unterminated string literal.": 1002, "Identifier expected.": 1003, @@ -105,6 +106,8 @@ "Expected at least {0} arguments, but got {1}.": 2555, "Expected {0} type arguments, but got {1}.": 2558, "A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.": 2651, + "Constructor of class '{0}' is private and only accessible within the class declaration.": 2673, + "Constructor of class '{0}' is protected and only accessible within the class declaration.": 2674, "Namespace '{0}' has no exported member '{1}'.": 2694, "File '{0}' not found.": 6054, diff --git a/src/extra/ast.ts b/src/extra/ast.ts index af8ae6c8..ae6122f3 100644 --- a/src/extra/ast.ts +++ b/src/extra/ast.ts @@ -39,6 +39,8 @@ import { UnaryPostfixExpression, UnaryExpression, UnaryPrefixExpression, + ClassExpression, + ObjectLiteralExpression, Statement, BlockStatement, @@ -76,8 +78,7 @@ import { ParameterNode, ParameterKind, ExportMember, - SwitchCase, - ClassExpression + SwitchCase } from "../ast"; import { @@ -411,7 +412,8 @@ export class ASTBuilder { // expressions visitIdentifierExpression(node: IdentifierExpression): void { - this.sb.push(node.text); + if (node.is(CommonFlags.QUOTED)) this.visitStringLiteral(node.text); + else this.sb.push(node.text); } visitArrayLiteralExpression(node: ArrayLiteralExpression): void { @@ -429,6 +431,33 @@ export class ASTBuilder { sb.push("]"); } + visitObjectLiteralExpression(node: ObjectLiteralExpression): void { + var sb = this.sb; + var names = node.names; + var values = node.values; + var numElements = names.length; + assert(numElements == values.length); + if (numElements) { + sb.push("{\n"); + indent(sb, ++this.indentLevel); + this.visitNode(names[0]); + sb.push(": "); + this.visitNode(values[0]); + for (let i = 1; i < numElements; ++i) { + sb.push(",\n"); + indent(sb, this.indentLevel); + this.visitNode(names[i]); + sb.push(": "); + this.visitNode(values[i]); + } + sb.push("\n"); + indent(sb, --this.indentLevel); + sb.push("}"); + } else { + sb.push("{}"); + } + } + visitAssertionExpression(node: AssertionExpression): void { var sb = this.sb; if (node.assertionKind == AssertionKind.PREFIX) { @@ -542,10 +571,10 @@ export class ASTBuilder { this.visitArrayLiteralExpression(node); break; } - // case LiteralKind.OBJECT: { - // this.serializeObjectLiteralExpression(node); - // break; - // } + case LiteralKind.OBJECT: { + this.visitObjectLiteralExpression(node); + break; + } default: { assert(false); break; diff --git a/src/parser.ts b/src/parser.ts index d485d69f..f9d7bb0a 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -3073,6 +3073,51 @@ export class Parser extends DiagnosticEmitter { } return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos)); } + // ObjectLiteralExpression + case Token.OPENBRACE: { + let startPos = tn.tokenPos; + let names = new Array(); + let values = new Array(); + let name: IdentifierExpression; + while (!tn.skip(Token.CLOSEBRACE)) { + if (!tn.skipIdentifier()) { + if (!tn.skip(Token.STRINGLITERAL)) { + this.error( + DiagnosticCode.Identifier_expected, + tn.range(), + ); + return null; + } + name = Node.createIdentifierExpression(tn.readString(), tn.range()); + name.set(CommonFlags.QUOTED); + } else { + name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range()); + } + if (!tn.skip(Token.COLON)) { + this.error( + DiagnosticCode._0_expected, + tn.range(), ":" + ); + return null; + } + let value = this.parseExpression(tn, Precedence.COMMA + 1); + if (!value) return null; + names.push(name); + values.push(value); + if (!tn.skip(Token.COMMA)) { + if (tn.skip(Token.CLOSEBRACE)) { + break; + } else { + this.error( + DiagnosticCode._0_expected, + tn.range(), "}" + ); + return null; + } + } + } + return Node.createObjectLiteralExpression(names, values, tn.range(startPos, tn.pos)); + } // AssertionExpression (unary prefix) case Token.LESSTHAN: { let toType = this.parseType(tn); diff --git a/tests/compiler/object-literal.optimized.wat b/tests/compiler/object-literal.optimized.wat new file mode 100644 index 00000000..e969ac1e --- /dev/null +++ b/tests/compiler/object-literal.optimized.wat @@ -0,0 +1,326 @@ +(module + (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 $iiii (func (param i32 i32 i32) (result i32))) + (type $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)) + (global $HEAP_BASE i32 (i32.const 76)) + (memory $0 1) + (data (i32.const 8) "\0b\00\00\00h\00e\00l\00l\00o\00 \00w\00o\00r\00l\00d") + (data (i32.const 36) "\11\00\00\00o\00b\00j\00e\00c\00t\00-\00l\00i\00t\00e\00r\00a\00l\00.\00t\00s") + (export "memory" (memory $0)) + (start $start) + (func $~lib/allocator/arena/allocate_memory (; 1 ;) (type $ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (if + (get_local $0) + (block + (if + (i32.gt_u + (get_local $0) + (i32.const 1073741824) + ) + (unreachable) + ) + (if + (i32.gt_u + (tee_local $0 + (i32.and + (i32.add + (i32.add + (tee_local $1 + (get_global $~lib/allocator/arena/offset) + ) + (get_local $0) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + (i32.shl + (tee_local $2 + (current_memory) + ) + (i32.const 16) + ) + ) + (if + (i32.lt_s + (grow_memory + (select + (get_local $2) + (tee_local $3 + (i32.shr_u + (i32.and + (i32.add + (i32.sub + (get_local $0) + (get_local $1) + ) + (i32.const 65535) + ) + (i32.const -65536) + ) + (i32.const 16) + ) + ) + (i32.gt_s + (get_local $2) + (get_local $3) + ) + ) + ) + (i32.const 0) + ) + (if + (i32.lt_s + (grow_memory + (get_local $3) + ) + (i32.const 0) + ) + (unreachable) + ) + ) + ) + (set_global $~lib/allocator/arena/offset + (get_local $0) + ) + (return + (get_local $1) + ) + ) + ) + (i32.const 0) + ) + (func $~lib/memory/compare_memory (; 2 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if + (i32.eq + (get_local $0) + (get_local $1) + ) + (return + (i32.const 0) + ) + ) + (loop $continue|0 + (if + (if (result i32) + (get_local $2) + (i32.eq + (i32.load8_u + (get_local $0) + ) + (i32.load8_u + (get_local $1) + ) + ) + (get_local $2) + ) + (block + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $continue|0) + ) + ) + ) + (tee_local $0 + (if (result i32) + (get_local $2) + (i32.sub + (i32.load8_u + (get_local $0) + ) + (i32.load8_u + (get_local $1) + ) + ) + (i32.const 0) + ) + ) + ) + (func $~lib/string/String.__eq (; 3 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (if + (i32.eq + (get_local $0) + (get_local $1) + ) + (return + (i32.const 1) + ) + ) + (if + (i32.eqz + (tee_local $2 + (i32.eqz + (get_local $0) + ) + ) + ) + (set_local $2 + (i32.eqz + (get_local $1) + ) + ) + ) + (if + (get_local $2) + (return + (i32.const 0) + ) + ) + (if + (i32.ne + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.load + (get_local $1) + ) + ) + (return + (i32.const 0) + ) + ) + (i32.eqz + (call $~lib/memory/compare_memory + (i32.add + (get_local $0) + (i32.const 4) + ) + (i32.add + (get_local $1) + (i32.const 4) + ) + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + ) + ) + (func $object-literal/bar (; 4 ;) (type $iv) (param $0 i32) + (if + (i32.ne + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 36) + (i32.const 9) + (i32.const 2) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (i32.load offset=4 + (get_local $0) + ) + (i32.const 8) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 36) + (i32.const 10) + (i32.const 2) + ) + (unreachable) + ) + ) + ) + (func $object-literal/bar2 (; 5 ;) (type $iv) (param $0 i32) + (if + (i32.ne + (i32.load + (get_local $0) + ) + (i32.const 2) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 36) + (i32.const 23) + (i32.const 2) + ) + (unreachable) + ) + ) + ) + (func $start (; 6 ;) (type $v) + (local $0 i32) + (set_global $~lib/allocator/arena/startOffset + (i32.and + (i32.add + (get_global $HEAP_BASE) + (i32.const 7) + ) + (i32.const -8) + ) + ) + (set_global $~lib/allocator/arena/offset + (get_global $~lib/allocator/arena/startOffset) + ) + (i32.store + (tee_local $0 + (call $~lib/allocator/arena/allocate_memory + (i32.const 8) + ) + ) + (i32.const 1) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 8) + ) + (call $object-literal/bar + (get_local $0) + ) + (i32.store + (tee_local $0 + (call $~lib/allocator/arena/allocate_memory + (i32.const 4) + ) + ) + (i32.const 2) + ) + (call $object-literal/bar2 + (get_local $0) + ) + ) +) diff --git a/tests/compiler/object-literal.ts b/tests/compiler/object-literal.ts new file mode 100644 index 00000000..6940d57f --- /dev/null +++ b/tests/compiler/object-literal.ts @@ -0,0 +1,26 @@ +import "allocator/arena"; + +class Foo { + bar: i32; + baz: string; +} + +function bar(foo: Foo): void { + assert(foo.bar == 1); + assert(foo.baz == "hello world"); +} + +bar({ bar: 1, baz: "hello world" }); + +class Foo2 { + bar: i32; + constructor() { + this.bar = 1; + } +} + +function bar2(foo: Foo2): void { + assert(foo.bar == 2); +} + +bar2({ bar: 2 }); diff --git a/tests/compiler/object-literal.untouched.wat b/tests/compiler/object-literal.untouched.wat new file mode 100644 index 00000000..e7e87d02 --- /dev/null +++ b/tests/compiler/object-literal.untouched.wat @@ -0,0 +1,369 @@ +(module + (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 $iiii (func (param i32 i32 i32) (result i32))) + (type $v (func)) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) + (global $~lib/internal/allocator/AL_BITS i32 (i32.const 3)) + (global $~lib/internal/allocator/AL_SIZE i32 (i32.const 8)) + (global $~lib/internal/allocator/AL_MASK i32 (i32.const 7)) + (global $~lib/internal/allocator/MAX_SIZE_32 i32 (i32.const 1073741824)) + (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) + (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) + (global $~lib/internal/string/HEADER_SIZE i32 (i32.const 4)) + (global $HEAP_BASE i32 (i32.const 76)) + (memory $0 1) + (data (i32.const 8) "\0b\00\00\00h\00e\00l\00l\00o\00 \00w\00o\00r\00l\00d\00") + (data (i32.const 36) "\11\00\00\00o\00b\00j\00e\00c\00t\00-\00l\00i\00t\00e\00r\00a\00l\00.\00t\00s\00") + (export "memory" (memory $0)) + (start $start) + (func $~lib/allocator/arena/allocate_memory (; 1 ;) (type $ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (if + (get_local $0) + (block + (if + (i32.gt_u + (get_local $0) + (i32.const 1073741824) + ) + (unreachable) + ) + (set_local $1 + (get_global $~lib/allocator/arena/offset) + ) + (set_local $2 + (i32.and + (i32.add + (i32.add + (get_local $1) + (get_local $0) + ) + (i32.const 7) + ) + (i32.xor + (i32.const 7) + (i32.const -1) + ) + ) + ) + (set_local $3 + (current_memory) + ) + (if + (i32.gt_u + (get_local $2) + (i32.shl + (get_local $3) + (i32.const 16) + ) + ) + (block + (set_local $4 + (i32.shr_u + (i32.and + (i32.add + (i32.sub + (get_local $2) + (get_local $1) + ) + (i32.const 65535) + ) + (i32.xor + (i32.const 65535) + (i32.const -1) + ) + ) + (i32.const 16) + ) + ) + (set_local $5 + (select + (tee_local $5 + (get_local $3) + ) + (tee_local $6 + (get_local $4) + ) + (i32.gt_s + (get_local $5) + (get_local $6) + ) + ) + ) + (if + (i32.lt_s + (grow_memory + (get_local $5) + ) + (i32.const 0) + ) + (if + (i32.lt_s + (grow_memory + (get_local $4) + ) + (i32.const 0) + ) + (unreachable) + ) + ) + ) + ) + (set_global $~lib/allocator/arena/offset + (get_local $2) + ) + (return + (get_local $1) + ) + ) + ) + (i32.const 0) + ) + (func $~lib/memory/compare_memory (; 2 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if + (i32.eq + (get_local $0) + (get_local $1) + ) + (return + (i32.const 0) + ) + ) + (block $break|0 + (loop $continue|0 + (if + (if (result i32) + (get_local $2) + (i32.eq + (i32.load8_u + (get_local $0) + ) + (i32.load8_u + (get_local $1) + ) + ) + (get_local $2) + ) + (block + (block + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + (br $continue|0) + ) + ) + ) + ) + (if (result i32) + (get_local $2) + (i32.sub + (i32.load8_u + (get_local $0) + ) + (i32.load8_u + (get_local $1) + ) + ) + (i32.const 0) + ) + ) + (func $~lib/string/String.__eq (; 3 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (if + (i32.eq + (get_local $0) + (get_local $1) + ) + (return + (i32.const 1) + ) + ) + (if + (if (result i32) + (tee_local $2 + (i32.eq + (get_local $0) + (i32.const 0) + ) + ) + (get_local $2) + (i32.eq + (get_local $1) + (i32.const 0) + ) + ) + (return + (i32.const 0) + ) + ) + (set_local $3 + (i32.load + (get_local $0) + ) + ) + (if + (i32.ne + (get_local $3) + (i32.load + (get_local $1) + ) + ) + (return + (i32.const 0) + ) + ) + (i32.eqz + (call $~lib/memory/compare_memory + (i32.add + (get_local $0) + (i32.const 4) + ) + (i32.add + (get_local $1) + (i32.const 4) + ) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) + ) + (func $object-literal/bar (; 4 ;) (type $iv) (param $0 i32) + (if + (i32.eqz + (i32.eq + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 36) + (i32.const 9) + (i32.const 2) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (i32.load offset=4 + (get_local $0) + ) + (i32.const 8) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 36) + (i32.const 10) + (i32.const 2) + ) + (unreachable) + ) + ) + ) + (func $object-literal/bar2 (; 5 ;) (type $iv) (param $0 i32) + (if + (i32.eqz + (i32.eq + (i32.load + (get_local $0) + ) + (i32.const 2) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 36) + (i32.const 23) + (i32.const 2) + ) + (unreachable) + ) + ) + ) + (func $start (; 6 ;) (type $v) + (local $0 i32) + (local $1 i32) + (set_global $~lib/allocator/arena/startOffset + (i32.and + (i32.add + (get_global $HEAP_BASE) + (i32.const 7) + ) + (i32.xor + (i32.const 7) + (i32.const -1) + ) + ) + ) + (set_global $~lib/allocator/arena/offset + (get_global $~lib/allocator/arena/startOffset) + ) + (call $object-literal/bar + (block (result i32) + (set_local $0 + (call $~lib/allocator/arena/allocate_memory + (i32.const 8) + ) + ) + (i32.store + (get_local $0) + (i32.const 1) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 8) + ) + (get_local $0) + ) + ) + (call $object-literal/bar2 + (block (result i32) + (set_local $1 + (call $~lib/allocator/arena/allocate_memory + (i32.const 4) + ) + ) + (i32.store + (get_local $1) + (i32.const 2) + ) + (get_local $1) + ) + ) + ) +) diff --git a/tests/parser/object-literal.ts b/tests/parser/object-literal.ts new file mode 100644 index 00000000..1249ef45 --- /dev/null +++ b/tests/parser/object-literal.ts @@ -0,0 +1,9 @@ +var obj = { + a: 123, + b: "234", + "c": false, + d: { + a: 123, + "b": {} + } +}; diff --git a/tests/parser/object-literal.ts.fixture.ts b/tests/parser/object-literal.ts.fixture.ts new file mode 100644 index 00000000..1249ef45 --- /dev/null +++ b/tests/parser/object-literal.ts.fixture.ts @@ -0,0 +1,9 @@ +var obj = { + a: 123, + b: "234", + "c": false, + d: { + a: 123, + "b": {} + } +};