From 00fb45fcad45c75d5a682361d85bc12b7756c6a8 Mon Sep 17 00:00:00 2001 From: dcodeIO Date: Sat, 21 Jul 2018 03:11:33 +0200 Subject: [PATCH] Check for EOF on parse error in blocks, fixes #180 --- dist/assemblyscript.js | 2 +- dist/assemblyscript.js.map | 2 +- src/parser.ts | 16 ++++++++++++---- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/dist/assemblyscript.js b/dist/assemblyscript.js index 9ada2af7..75e97ef2 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=28)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NONE=0]="NONE",e[e.IMPORT=1]="IMPORT",e[e.EXPORT=2]="EXPORT",e[e.DECLARE=4]="DECLARE",e[e.CONST=8]="CONST",e[e.LET=16]="LET",e[e.STATIC=32]="STATIC",e[e.READONLY=64]="READONLY",e[e.ABSTRACT=128]="ABSTRACT",e[e.PUBLIC=256]="PUBLIC",e[e.PRIVATE=512]="PRIVATE",e[e.PROTECTED=1024]="PROTECTED",e[e.GET=2048]="GET",e[e.SET=4096]="SET",e[e.AMBIENT=8192]="AMBIENT",e[e.GENERIC=16384]="GENERIC",e[e.GENERIC_CONTEXT=32768]="GENERIC_CONTEXT",e[e.INSTANCE=65536]="INSTANCE",e[e.CONSTRUCTOR=131072]="CONSTRUCTOR",e[e.ARROW=262144]="ARROW",e[e.MODULE_EXPORT=524288]="MODULE_EXPORT",e[e.MODULE_IMPORT=1048576]="MODULE_IMPORT",e[e.COMPILED=2097152]="COMPILED",e[e.INLINED=4194304]="INLINED",e[e.SCOPED=8388608]="SCOPED",e[e.TRAMPOLINE=16777216]="TRAMPOLINE",e[e.VIRTUAL=33554432]="VIRTUAL",e[e.MAIN=67108864]="MAIN",e[e.QUOTED=134217728]="QUOTED"}(t.CommonFlags||(t.CommonFlags={})),t.PATH_DELIMITER="/",t.PARENT_SUBST="..",t.GETTER_PREFIX="get:",t.SETTER_PREFIX="set:",t.INSTANCE_DELIMITER="#",t.STATIC_DELIMITER=".",t.INNER_DELIMITER="~",t.LIBRARY_SUBST="~lib",t.LIBRARY_PREFIX=t.LIBRARY_SUBST+t.PATH_DELIMITER,t.FILESPACE_PREFIX="file:"},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(10),a=r(3),s=r(10);function o(e){switch(e){case n.INFO:return"INFO";case n.WARNING:return"WARNING";case n.ERROR:return"ERROR";default:return assert(!1),""}}function c(e){switch(e){case n.INFO:return t.COLOR_BLUE;case n.WARNING:return t.COLOR_YELLOW;case n.ERROR:return t.COLOR_RED;default:return assert(!1),""}}t.DiagnosticCode=s.DiagnosticCode,t.diagnosticCodeToString=s.diagnosticCodeToString,function(e){e[e.INFO=0]="INFO",e[e.WARNING=1]="WARNING",e[e.ERROR=2]="ERROR"}(n=t.DiagnosticCategory||(t.DiagnosticCategory={})),t.diagnosticCategoryToString=o,t.COLOR_BLUE="",t.COLOR_YELLOW="",t.COLOR_RED="",t.COLOR_RESET="",t.diagnosticCategoryToColor=c;var l=function(){function e(e,t,r){this.range=null,this.code=e,this.category=t,this.message=r}return e.create=function(t,r,n,a,s){void 0===n&&(n=null),void 0===a&&(a=null),void 0===s&&(s=null);var o=i.diagnosticCodeToString(t);return null!=n&&(o=o.replace("{0}",n)),null!=a&&(o=o.replace("{1}",a)),null!=s&&(o=o.replace("{2}",s)),new e(t,r,o)},e.createInfo=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.INFO,r,i)},e.createWarning=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.WARNING,r,i)},e.createError=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.ERROR,r,i)},e.prototype.withRange=function(e){return this.range=e,this},e.prototype.toString=function(){return this.range?o(this.category)+" "+this.code.toString(10)+': "'+this.message+'" in '+this.range.source.normalizedPath+":"+this.range.line.toString(10)+":"+this.range.column.toString(10):o(this.category)+" "+this.code.toString(10)+": "+this.message},e}();function p(e,r){void 0===r&&(r=!1);for(var n=e.source.text,i=n.length,s=e.start,o=e.end;s>0&&!a.isLineBreak(n.charCodeAt(s-1));)s--;for(;o=0?c.substring(l+1):c,o.statements=new Array,o.range=new a.Range(o,0,r.length),o.text=r,o}return n(t,e),Object.defineProperty(t.prototype,"isEntry",{get:function(){return this.sourceKind==q.ENTRY},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLibrary",{get:function(){return this.sourceKind==q.LIBRARY},enumerable:!0,configurable:!0}),t}(c);t.Source=Z;var J=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.decorators=null,t.cachedProgramLevelInternalName=null,t.cachedFileLevelInternalName=null,t}return n(t,e),Object.defineProperty(t.prototype,"programLevelInternalName",{get:function(){return this.cachedProgramLevelInternalName||(this.cachedProgramLevelInternalName=Re(this,!0)),this.cachedProgramLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"fileLevelInternalName",{get:function(){return this.cachedFileLevelInternalName||(this.cachedFileLevelInternalName=Re(this,!1)),this.cachedFileLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevel",{get:function(){var e=this.parent;return!!e&&(!(e.kind==s.VARIABLE&&!(e=e.parent))&&e.kind==s.SOURCE)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevelExport",{get:function(){var e=this.parent;return!(!e||e.kind==s.VARIABLE&&!(e=e.parent))&&(e.kind==s.NAMESPACEDECLARATION?this.is(i.CommonFlags.EXPORT)&&e.isTopLevelExport:e.kind==s.CLASSDECLARATION?this.is(i.CommonFlags.STATIC)&&e.isTopLevelExport:e.kind==s.SOURCE&&this.is(i.CommonFlags.EXPORT))},enumerable:!0,configurable:!0}),t.prototype.needsExplicitExport=function(e){return e.name.text!=e.externalName.text||this.range.source!=e.range.source||!this.isTopLevelExport},t}(j);t.DeclarationStatement=J;var $=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t}(J);t.VariableLikeDeclarationStatement=$;var ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BLOCK,t}return n(t,e),t}(j);t.BlockStatement=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BREAK,t}return n(t,e),t}(j);t.BreakStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CLASSDECLARATION,t}return n(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(J);t.ClassDeclaration=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CONTINUE,t}return n(t,e),t}(j);t.ContinueStatement=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.DO,t}return n(t,e),t}(j);t.DoStatement=ie;var ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EMPTY,t}return n(t,e),t}(j);t.EmptyStatement=ae;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMDECLARATION,t}return n(t,e),t}(J);t.EnumDeclaration=se;var oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMVALUEDECLARATION,t}return n(t,e),t}(J);t.EnumValueDeclaration=oe;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTIMPORT,t}return n(t,e),t}(c);t.ExportImportStatement=ce;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTMEMBER,t}return n(t,e),t}(c);t.ExportMember=le;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORT,t}return n(t,e),t}(j);t.ExportStatement=pe;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPRESSION,t}return n(t,e),t}(j);t.ExpressionStatement=ue;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FIELDDECLARATION,t.parameterIndex=-1,t}return n(t,e),t}($);t.FieldDeclaration=he;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FOR,t}return n(t,e),t}(j);t.ForStatement=de;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FUNCTIONDECLARATION,t}return n(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(J);t.FunctionDeclaration=_e;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return n(t,e),t}(j);t.IfStatement=me;var 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)memory.free(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{memory.free(i),memory.free(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{memory.free(i),memory.free(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{memory.free(i),memory.free(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{memory.free(i)}},e.prototype.addFunction=function(e,t,r,n){var i=h(e),a=p(r);try{return _BinaryenAddFunction(this.ref,i,t,a,r?r.length:0,n)}finally{memory.free(a),memory.free(i)}},e.prototype.removeFunction=function(e){var t=h(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{memory.free(t)}},e.prototype.addTemporaryFunction=function(e,t,r){this.hasTemporaryFunction=assert(!this.hasTemporaryFunction);var n=this.cachedTemporaryName;n||(this.cachedTemporaryName=n=h(""));var i=p(t);try{var a=_BinaryenAddFunctionType(this.ref,n,e,i,t?t.length:0);return _BinaryenAddFunction(this.ref,n,a,0,0,r)}finally{memory.free(i)}},e.prototype.removeTemporaryFunction=function(){this.hasTemporaryFunction=!assert(this.hasTemporaryFunction);var e=assert(this.cachedTemporaryName);_BinaryenRemoveFunction(this.ref,e),_BinaryenRemoveFunctionType(this.ref,e)},e.prototype.addFunctionExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addTableExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addMemoryExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addGlobalExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.removeExport=function(e){var t=h(e);try{_BinaryenRemoveExport(this.ref,t)}finally{memory.free(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{memory.free(s),memory.free(a),memory.free(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{memory.free(a),memory.free(i),memory.free(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{memory.free(a),memory.free(i),memory.free(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{memory.free(s),memory.free(a),memory.free(i)}},e.prototype.removeImport=function(e){var t=h(e);try{_BinaryenRemoveImport(this.ref,t)}finally{memory.free(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;--_)memory.free(c[_]);memory.free(s)}},e.prototype.setFunctionTable=function(e){var t=u(e);try{_BinaryenSetFunctionTable(this.ref,t,e.length)}finally{memory.free(t)}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.getOptimizeLevel=function(){return _BinaryenGetOptimizeLevel()},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.getShrinkLevel=function(){return _BinaryenGetShrinkLevel()},e.prototype.setShrinkLevel=function(e){void 0===e&&(e=1),_BinaryenSetShrinkLevel(e)},e.prototype.setDebugInfo=function(e){void 0===e&&(e=!1),_BinaryenSetDebugInfo(e)},e.prototype.optimize=function(e){void 0===e&&(e=0),e?_BinaryenFunctionOptimize(e,this.ref):_BinaryenModuleOptimize(this.ref)},e.prototype.runPasses=function(e,t){void 0===t&&(t=0);for(var r=e.length,n=new Array(r),i=0;i=0;--i)memory.free(n[i])}},e.prototype.precomputeExpression=function(e){var t=_BinaryenGetOptimizeLevel(),r=_BinaryenGetShrinkLevel(),n=_BinaryenGetDebugInfo();_BinaryenSetOptimizeLevel(4),_BinaryenSetShrinkLevel(0),_BinaryenSetDebugInfo(!1);var i=_BinaryenExpressionGetType(e),a=this.addTemporaryFunction(i,null,e),s=this.cachedPrecomputeNames;if(!s){var o=h("precompute");this.cachedPrecomputeName=o,this.cachedPrecomputeNames=s=p([o])}return _BinaryenFunctionRunPasses(a,this.ref,s,1),e=_BinaryenFunctionGetBody(a),this.removeTemporaryFunction(),_BinaryenSetOptimizeLevel(t),_BinaryenSetShrinkLevel(r),_BinaryenSetDebugInfo(n),e},e.prototype.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.cachedByValue,r=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 p(e)}function h(e){if(null==e)return 0;for(var t=memory.allocate(function(e){for(var t=0,r=0,n=e.length;r=55296&&i<=57343&&r+1=55296&&a<=57343&&n+1>>6),store(r++,128|63&a)):a<=65535?(store(r++,224|a>>>12),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=2097151?(store(r++,240|a>>>18),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=67108863?(store(r++,248|a>>>24),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):(store(r++,252|a>>>30),store(r++,128|a>>>24&63),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a))}return store(r,0),t}function 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),l=r(6),p=r(2),u=r(4),h=r(9),d=function(){return function(){}}(),_=function(){return function(){}}(),m=function(){return function(){}}();function y(e,t){switch(assert(t.length),e){case p.DecoratorKind.OPERATOR:case p.DecoratorKind.OPERATOR_BINARY:switch(t.charCodeAt(0)){case 91:if("[]"==t)return s.INDEXED_GET;if("[]="==t)return s.INDEXED_SET;break;case 123:if("{}"==t)return s.UNCHECKED_INDEXED_GET;if("{}="==t)return s.UNCHECKED_INDEXED_SET;break;case 43:if("+"==t)return s.ADD;break;case 45:if("-"==t)return s.SUB;break;case 42:if("*"==t)return s.MUL;if("**"==t)return s.POW;break;case 47:if("/"==t)return s.DIV;break;case 37:if("%"==t)return s.REM;break;case 38:if("&"==t)return s.BITWISE_AND;break;case 124:if("|"==t)return s.BITWISE_OR;break;case 94:if("^"==t)return s.BITWISE_XOR;break;case 61:if("=="==t)return s.EQ;break;case 33:if("!="==t)return s.NE;break;case 62:if(">"==t)return s.GT;if(">="==t)return s.GE;if(">>"==t)return s.BITWISE_SHR;if(">>>"==t)return s.BITWISE_SHR_U;break;case 60:if("<"==t)return s.LT;if("<="==t)return s.LE;if("<<"==t)return s.BITWISE_SHL}break;case p.DecoratorKind.OPERATOR_PREFIX:switch(t.charCodeAt(0)){case 43:if("+"==t)return s.PLUS;if("++"==t)return s.PREFIX_INC;break;case 45:if("-"==t)return s.MINUS;if("--"==t)return s.PREFIX_DEC;break;case 33:if("!"==t)return s.NOT;break;case 126:if("~"==t)return s.BITWISE_NOT}break;case p.DecoratorKind.OPERATOR_POSTFIX:switch(t.charCodeAt(0)){case 43:if("++"==t)return s.POSTFIX_INC;break;case 45:if("--"==t)return s.POSTFIX_DEC}}return s.INVALID}!function(e){e[e.INVALID=0]="INVALID",e[e.INDEXED_GET=1]="INDEXED_GET",e[e.INDEXED_SET=2]="INDEXED_SET",e[e.UNCHECKED_INDEXED_GET=3]="UNCHECKED_INDEXED_GET",e[e.UNCHECKED_INDEXED_SET=4]="UNCHECKED_INDEXED_SET",e[e.ADD=5]="ADD",e[e.SUB=6]="SUB",e[e.MUL=7]="MUL",e[e.DIV=8]="DIV",e[e.REM=9]="REM",e[e.POW=10]="POW",e[e.BITWISE_AND=11]="BITWISE_AND",e[e.BITWISE_OR=12]="BITWISE_OR",e[e.BITWISE_XOR=13]="BITWISE_XOR",e[e.BITWISE_SHL=14]="BITWISE_SHL",e[e.BITWISE_SHR=15]="BITWISE_SHR",e[e.BITWISE_SHR_U=16]="BITWISE_SHR_U",e[e.EQ=17]="EQ",e[e.NE=18]="NE",e[e.GT=19]="GT",e[e.GE=20]="GE",e[e.LT=21]="LT",e[e.LE=22]="LE",e[e.PLUS=23]="PLUS",e[e.MINUS=24]="MINUS",e[e.NOT=25]="NOT",e[e.BITWISE_NOT=26]="BITWISE_NOT",e[e.PREFIX_INC=27]="PREFIX_INC",e[e.PREFIX_DEC=28]="PREFIX_DEC",e[e.POSTFIX_INC=29]="POSTFIX_INC",e[e.POSTFIX_DEC=30]="POSTFIX_DEC"}(s=t.OperatorKind||(t.OperatorKind={}));var 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.abortInstance=null,r.memoryAllocateInstance=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)?l.Type.i8:l.Type.u8;break;case 2:o=u.isLoadSigned(e)?l.Type.i16:l.Type.u16;break;default:o=u.isLoadSigned(e)?l.Type.i32:l.Type.u32}return z(o,t);case u.ExpressionId.Block:if(!u.getBlockName(e)){var c=assert(u.getBlockChildCount(e)),p=u.getBlockChild(e,c-1);return this.canOverflow(p,t)}break;case u.ExpressionId.If:return this.canOverflow(u.getIfTrue(e),t)||this.canOverflow(assert(u.getIfFalse(e)),t);case u.ExpressionId.Select:return this.canOverflow(u.getSelectThen(e),t)||this.canOverflow(u.getSelectElse(e),t);case u.ExpressionId.Call:var h=this.currentFunction.program,d=assert(h.instancesLookup.get(assert(u.getCallTarget(e))));assert(d.kind==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=l&&u!=p?t.push("?: "):t.push(": "),t.push(i[u].toString());return t.push(") => "),t.push(this.returnType.toString()),t.join("")},e}();t.Signature=a;var s=null;function o(e){s||(s=[]);for(var t=s.length;t<=e;++t)s.push("arg$"+t.toString(10));return s[e-1]}t.getDefaultParameterName=o},function(e,t){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 l(e){switch(assert(e.length),e.charCodeAt(0)){case 97:switch(e){case"abstract":return i.ABSTRACT;case"as":return i.AS;case"async":return i.ASYNC;case"await":return i.AWAIT}break;case 98:switch(e){case"break":return i.BREAK}break;case 99:switch(e){case"case":return i.CASE;case"catch":return i.CATCH;case"class":return i.CLASS;case"continue":return i.CONTINUE;case"const":return i.CONST;case"constructor":return i.CONSTRUCTOR}break;case 100:switch(e){case"debugger":return i.DEBUGGER;case"declare":return i.DECLARE;case"default":return i.DEFAULT;case"delete":return i.DELETE;case"do":return i.DO}break;case 101:switch(e){case"else":return i.ELSE;case"enum":return i.ENUM;case"export":return i.EXPORT;case"extends":return i.EXTENDS}break;case 102:switch(e){case"false":return i.FALSE;case"finally":return i.FINALLY;case"for":return i.FOR;case"from":return i.FROM;case"function":return i.FUNCTION}break;case 103:switch(e){case"get":return i.GET}break;case 105:switch(e){case"if":return i.IF;case"implements":return i.IMPLEMENTS;case"import":return i.IMPORT;case"in":return i.IN;case"instanceof":return i.INSTANCEOF;case"interface":return i.INTERFACE;case"is":return i.IS}break;case 107:switch(e){case"keyof":return i.KEYOF}break;case 108:switch(e){case"let":return i.LET}break;case 109:switch(e){case"module":return i.MODULE}break;case 110:switch(e){case"namespace":return i.NAMESPACE;case"new":return i.NEW;case"null":return i.NULL}break;case 111:switch(e){case"of":return i.OF}break;case 112:switch(e){case"package":return i.PACKAGE;case"private":return i.PRIVATE;case"protected":return i.PROTECTED;case"public":return i.PUBLIC}break;case 114:switch(e){case"readonly":return i.READONLY;case"return":return i.RETURN}break;case 115:switch(e){case"set":return i.SET;case"static":return i.STATIC;case"super":return i.SUPER;case"switch":return i.SWITCH}break;case 116:switch(e){case"this":return i.THIS;case"throw":return i.THROW;case"true":return i.TRUE;case"try":return i.TRY;case"type":return i.TYPE;case"typeof":return i.TYPEOF}break;case 118:switch(e){case"var":return i.VAR;case"void":return i.VOID}break;case 119:switch(e){case"while":return i.WHILE;case"with":return i.WITH}break;case 121:switch(e){case"yield":return i.YIELD}}return i.INVALID}function p(e){switch(e){case i.ABSTRACT:case i.AS:case i.CONSTRUCTOR:case i.DECLARE:case i.DELETE:case i.FROM:case i.FOR:case i.GET:case i.IS:case i.KEYOF:case i.MODULE:case i.NAMESPACE:case i.READONLY:case i.SET:case i.TYPE:return!0;default:return!1}}!function(e){e[e.ABSTRACT=0]="ABSTRACT",e[e.AS=1]="AS",e[e.ASYNC=2]="ASYNC",e[e.AWAIT=3]="AWAIT",e[e.BREAK=4]="BREAK",e[e.CASE=5]="CASE",e[e.CATCH=6]="CATCH",e[e.CLASS=7]="CLASS",e[e.CONST=8]="CONST",e[e.CONTINUE=9]="CONTINUE",e[e.CONSTRUCTOR=10]="CONSTRUCTOR",e[e.DEBUGGER=11]="DEBUGGER",e[e.DECLARE=12]="DECLARE",e[e.DEFAULT=13]="DEFAULT",e[e.DELETE=14]="DELETE",e[e.DO=15]="DO",e[e.ELSE=16]="ELSE",e[e.ENUM=17]="ENUM",e[e.EXPORT=18]="EXPORT",e[e.EXTENDS=19]="EXTENDS",e[e.FALSE=20]="FALSE",e[e.FINALLY=21]="FINALLY",e[e.FOR=22]="FOR",e[e.FROM=23]="FROM",e[e.FUNCTION=24]="FUNCTION",e[e.GET=25]="GET",e[e.IF=26]="IF",e[e.IMPLEMENTS=27]="IMPLEMENTS",e[e.IMPORT=28]="IMPORT",e[e.IN=29]="IN",e[e.INSTANCEOF=30]="INSTANCEOF",e[e.INTERFACE=31]="INTERFACE",e[e.IS=32]="IS",e[e.KEYOF=33]="KEYOF",e[e.LET=34]="LET",e[e.MODULE=35]="MODULE",e[e.NAMESPACE=36]="NAMESPACE",e[e.NEW=37]="NEW",e[e.NULL=38]="NULL",e[e.OF=39]="OF",e[e.PACKAGE=40]="PACKAGE",e[e.PRIVATE=41]="PRIVATE",e[e.PROTECTED=42]="PROTECTED",e[e.PUBLIC=43]="PUBLIC",e[e.READONLY=44]="READONLY",e[e.RETURN=45]="RETURN",e[e.SET=46]="SET",e[e.STATIC=47]="STATIC",e[e.SUPER=48]="SUPER",e[e.SWITCH=49]="SWITCH",e[e.THIS=50]="THIS",e[e.THROW=51]="THROW",e[e.TRUE=52]="TRUE",e[e.TRY=53]="TRY",e[e.TYPE=54]="TYPE",e[e.TYPEOF=55]="TYPEOF",e[e.VAR=56]="VAR",e[e.VOID=57]="VOID",e[e.WHILE=58]="WHILE",e[e.WITH=59]="WITH",e[e.YIELD=60]="YIELD",e[e.OPENBRACE=61]="OPENBRACE",e[e.CLOSEBRACE=62]="CLOSEBRACE",e[e.OPENPAREN=63]="OPENPAREN",e[e.CLOSEPAREN=64]="CLOSEPAREN",e[e.OPENBRACKET=65]="OPENBRACKET",e[e.CLOSEBRACKET=66]="CLOSEBRACKET",e[e.DOT=67]="DOT",e[e.DOT_DOT_DOT=68]="DOT_DOT_DOT",e[e.SEMICOLON=69]="SEMICOLON",e[e.COMMA=70]="COMMA",e[e.LESSTHAN=71]="LESSTHAN",e[e.GREATERTHAN=72]="GREATERTHAN",e[e.LESSTHAN_EQUALS=73]="LESSTHAN_EQUALS",e[e.GREATERTHAN_EQUALS=74]="GREATERTHAN_EQUALS",e[e.EQUALS_EQUALS=75]="EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS=76]="EXCLAMATION_EQUALS",e[e.EQUALS_EQUALS_EQUALS=77]="EQUALS_EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS_EQUALS=78]="EXCLAMATION_EQUALS_EQUALS",e[e.EQUALS_GREATERTHAN=79]="EQUALS_GREATERTHAN",e[e.PLUS=80]="PLUS",e[e.MINUS=81]="MINUS",e[e.ASTERISK_ASTERISK=82]="ASTERISK_ASTERISK",e[e.ASTERISK=83]="ASTERISK",e[e.SLASH=84]="SLASH",e[e.PERCENT=85]="PERCENT",e[e.PLUS_PLUS=86]="PLUS_PLUS",e[e.MINUS_MINUS=87]="MINUS_MINUS",e[e.LESSTHAN_LESSTHAN=88]="LESSTHAN_LESSTHAN",e[e.GREATERTHAN_GREATERTHAN=89]="GREATERTHAN_GREATERTHAN",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN=90]="GREATERTHAN_GREATERTHAN_GREATERTHAN",e[e.AMPERSAND=91]="AMPERSAND",e[e.BAR=92]="BAR",e[e.CARET=93]="CARET",e[e.EXCLAMATION=94]="EXCLAMATION",e[e.TILDE=95]="TILDE",e[e.AMPERSAND_AMPERSAND=96]="AMPERSAND_AMPERSAND",e[e.BAR_BAR=97]="BAR_BAR",e[e.QUESTION=98]="QUESTION",e[e.COLON=99]="COLON",e[e.EQUALS=100]="EQUALS",e[e.PLUS_EQUALS=101]="PLUS_EQUALS",e[e.MINUS_EQUALS=102]="MINUS_EQUALS",e[e.ASTERISK_EQUALS=103]="ASTERISK_EQUALS",e[e.ASTERISK_ASTERISK_EQUALS=104]="ASTERISK_ASTERISK_EQUALS",e[e.SLASH_EQUALS=105]="SLASH_EQUALS",e[e.PERCENT_EQUALS=106]="PERCENT_EQUALS",e[e.LESSTHAN_LESSTHAN_EQUALS=107]="LESSTHAN_LESSTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_EQUALS=108]="GREATERTHAN_GREATERTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS=109]="GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS",e[e.AMPERSAND_EQUALS=110]="AMPERSAND_EQUALS",e[e.BAR_EQUALS=111]="BAR_EQUALS",e[e.CARET_EQUALS=112]="CARET_EQUALS",e[e.AT=113]="AT",e[e.IDENTIFIER=114]="IDENTIFIER",e[e.STRINGLITERAL=115]="STRINGLITERAL",e[e.INTEGERLITERAL=116]="INTEGERLITERAL",e[e.FLOATLITERAL=117]="FLOATLITERAL",e[e.INVALID=118]="INVALID",e[e.ENDOFFILE=119]="ENDOFFILE"}(i=t.Token||(t.Token={})),function(e){e[e.DEFAULT=0]="DEFAULT",e[e.PREFER=1]="PREFER",e[e.ALWAYS=2]="ALWAYS"}(a=t.IdentifierHandling||(t.IdentifierHandling={})),t.tokenFromKeyword=l,t.tokenIsAlsoIdentifier=p,t.operatorTokenToString=function(e){switch(e){case i.DELETE:return"delete";case i.IN:return"in";case i.INSTANCEOF:return"instanceof";case i.NEW:return"new";case i.TYPEOF:return"typeof";case i.VOID:return"void";case i.YIELD:return"yield";case i.DOT_DOT_DOT:return"...";case i.COMMA:return",";case i.LESSTHAN:return"<";case i.GREATERTHAN:return">";case i.LESSTHAN_EQUALS:return"<=";case i.GREATERTHAN_EQUALS:return">=";case i.EQUALS_EQUALS:return"==";case i.EXCLAMATION_EQUALS:return"!=";case i.EQUALS_EQUALS_EQUALS:return"===";case i.EXCLAMATION_EQUALS_EQUALS:return"!==";case i.PLUS:return"+";case i.MINUS:return"-";case i.ASTERISK_ASTERISK:return"**";case i.ASTERISK:return"*";case i.SLASH:return"/";case i.PERCENT:return"%";case i.PLUS_PLUS:return"++";case i.MINUS_MINUS:return"--";case i.LESSTHAN_LESSTHAN:return"<<";case i.GREATERTHAN_GREATERTHAN:return">>";case i.GREATERTHAN_GREATERTHAN_GREATERTHAN:return">>>";case i.AMPERSAND:return"&";case i.BAR:return"|";case i.CARET:return"^";case i.EXCLAMATION:return"!";case i.TILDE:return"~";case i.AMPERSAND_AMPERSAND:return"&&";case i.BAR_BAR:return"||";case i.EQUALS:return"=";case i.PLUS_EQUALS:return"+=";case i.MINUS_EQUALS:return"-=";case i.ASTERISK_EQUALS:return"*=";case i.ASTERISK_ASTERISK_EQUALS:return"**=";case i.SLASH_EQUALS:return"/=";case i.PERCENT_EQUALS:return"%=";case i.LESSTHAN_LESSTHAN_EQUALS:return"<<=";case i.GREATERTHAN_GREATERTHAN_EQUALS:return">>=";case i.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:return">>>=";case i.AMPERSAND_EQUALS:return"&=";case i.BAR_EQUALS:return"|=";case i.CARET_EQUALS:return"^=";default:return assert(!1),""}};var u=function(){function e(e,t,r){this.debugInfoRef=0,this.source=e,this.start=t,this.end=r}return e.join=function(t,r){if(t.source!=r.source)throw new Error("source mismatch");return new e(t.source,t.startr.end?t.end:r.end)},Object.defineProperty(e.prototype,"atStart",{get:function(){return new e(this.source,this.start,this.start)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"atEnd",{get:function(){return new e(this.source,this.end,this.end)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"line",{get:function(){for(var e=this.source.text,t=1,r=this.start;r>=0;--r)10==e.charCodeAt(r)&&t++;return t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"column",{get:function(){for(var e=this.source.text,t=0,r=this.start-1;r>=0&&10!=e.charCodeAt(r);--r)++t;return t},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.source.text.substring(this.start,this.end)},e}();t.Range=u;var h=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,r)||this;n.end=0,n.pos=0,n.token=-1,n.tokenPos=0,n.nextToken=-1,n.nextTokenPos=0,n.nextTokenOnNewLine=!1,n.onComment=null,n.source=t,n.pos=0,n.end=t.text.length,n.diagnostics=r||new Array;var i=t.text;if(n.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos+11&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos3&&this.pos1&&this.pos1&&this.pos=this.end){n+=e.substring(r,this.pos),this.error(s.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.end));break}var i=e.charCodeAt(this.pos);if(i==t){n+=e.substring(r,this.pos++);break}if(92!=i){if(c.isLineBreak(i)){n+=e.substring(r,this.pos),this.error(s.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.pos));break}++this.pos}else n+=e.substring(r,this.pos),n+=this.readEscapeSequence(),r=this.pos}return n},t.prototype.readEscapeSequence=function(){if(++this.pos>=this.end)return this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(this.end)),"";var e=this.source.text,t=e.charCodeAt(this.pos++);switch(t){case 48:return"\0";case 98:return"\b";case 116:return"\t";case 110:return"\n";case 118:return"\v";case 102:return"\f";case 114:return"\r";case 39:return"'";case 34:return'"';case 117:return this.pos=this.end){this.error(s.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.end));break}if(92!=e.charCodeAt(this.pos)){var n=e.charCodeAt(this.pos);if(47==n&&!r)break;if(c.isLineBreak(n)){this.error(s.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.pos));break}++this.pos,r=!1}else++this.pos,r=!0}return e.substring(t,this.pos)},t.prototype.readRegexpFlags=function(){for(var e=this.source.text,t=this.pos,r=0;this.pos57)&&95!=r)break;t++}return!0},t.prototype.readInteger=function(){var e=this.source.text;if(48==e.charCodeAt(this.pos)&&this.pos+2=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else if(o>=65&&o<=70)r=i64_add(i64_mul(r,n),i64_new(10+o-65,0));else if(o>=97&&o<=102)r=i64_add(i64_mul(r,n),i64_new(10+o-97,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readDecimalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(10,0),i=t;this.pos=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readOctalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(8,0),i=t;this.pos=48&&o<=55)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}++this.pos}return this.pos==t?this.error(s.DiagnosticCode.Octal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readBinaryInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(2,0),i=i64_new(1,0),a=t;this.pos=48&&n<=57)t=16*t+n-48;else if(n>=65&&n<=70)t=16*t+10+n-65;else{if(!(n>=97&&n<=102))return this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(this.pos-1,this.pos)),"";t=16*t+10+n-97}if(0==--e)break}return e?(this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(this.pos)),""):String.fromCharCode(t)},t.prototype.readExtendedUnicodeEscape=function(){var e=this.pos,t=this.readHexInteger(),r=i64_low(t),n=!1;assert(!i64_high(t)),r>1114111&&(this.error(s.DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,this.range(e,this.pos)),n=!0);var i=this.source.text;return this.pos>=this.end?(this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(e,this.end)),n=!0):125==i.charCodeAt(this.pos)?++this.pos:(this.error(s.DiagnosticCode.Unterminated_Unicode_escape_sequence,this.range(e,this.pos)),n=!0),n?"":r<65536?String.fromCharCode(r):String.fromCharCode(55296+((r-65536)/1024|0),(r-65536)%1024+56320)},t.prototype.finish=function(){},t}(s.DiagnosticEmitter);t.Tokenizer=h;var d=function(){return function(){}}();t.State=d;var _=null},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=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),l=r(2),p=r(6),u=r(0);!function(e){e[e.REPORT=0]="REPORT",e[e.SWALLOW=1]="SWALLOW"}(s=t.ReportMode||(t.ReportMode={}));var h=function(e){function t(t){var r=e.call(this,t.diagnostics)||this;return r.currentThisExpression=null,r.currentElementExpression=null,r.program=t,r}return n(t,e),t.prototype.resolveType=function(e,t,r){if(void 0===t&&(t=null),void 0===r&&(r=s.REPORT),e.kind==l.NodeKind.SIGNATURE){var n=this.resolveSignature(e,t,r);return n?e.isNullable?n.type.asNullable():n.type:null}assert(e.kind==l.NodeKind.TYPE);var i=e,a=i.name.text,h=a,d=i.range.source.internalPath+u.PATH_DELIMITER+a,_=this.program.elementsLookup,m=void 0;if((m=_.get(d))||(m=_.get(h)))switch(m.kind){case c.ElementKind.ENUM:return null!==i.typeArguments&&i.typeArguments.length?(r==s.REPORT&&this.error(o.DiagnosticCode.Type_0_is_not_generic,e.range,m.internalName),null):p.Type.i32;case c.ElementKind.CLASS_PROTOTYPE:var 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=p.typesToString(t),o=new c.FunctionPrototype(this.program,i,n.internalName+"<"+a+">"+u.INSTANCE_DELIMITER+i,e.declaration,n,e.decoratorFlags);return o.flags=e.flags,o.operatorKind=e.operatorKind,o.classTypeArguments=t,o},t.prototype.resolveFunctionInclTypeArguments=function(e,t,r,n,i){void 0===i&&(i=s.REPORT);var a=null;return!e.is(u.CommonFlags.GENERIC)||(assert(null!=t&&0!=t.length),a=this.resolveTypeArguments(assert(e.declaration.typeParameters),t,r,n,i))?this.resolveFunction(e,a,r,i):null},t.prototype.resolveClass=function(e,t,r,n){var h,d,_,m,y,g,E,T;void 0===r&&(r=null),void 0===n&&(n=s.REPORT);var f=t?p.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,l=c.length;assert(l>0);var p=null!==t?t.length:0;if(l!=p)return i==s.REPORT&&this.error(o.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,l.toString(10),p.toString(10)),null;if(!(a=this.resolveTypeArguments(c,t,r,n,i)))return null}else if(null!==t&&t.length)return i==s.REPORT&&this.error(o.DiagnosticCode.Type_0_is_not_generic,n.range,e.internalName),null;return this.resolveClass(e,a,r,i)},t}(o.DiagnosticEmitter);t.Resolver=h},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Operation_not_supported=100]="Operation_not_supported",e[e.Operation_is_unsafe=101]="Operation_is_unsafe",e[e.User_defined_0=102]="User_defined_0",e[e.Conversion_from_type_0_to_1_requires_an_explicit_cast=200]="Conversion_from_type_0_to_1_requires_an_explicit_cast",e[e.Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit=201]="Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit",e[e.Type_0_cannot_be_changed_to_type_1=202]="Type_0_cannot_be_changed_to_type_1",e[e.Type_0_cannot_be_reinterpreted_as_type_1=203]="Type_0_cannot_be_reinterpreted_as_type_1",e[e.Basic_type_0_cannot_be_nullable=204]="Basic_type_0_cannot_be_nullable",e[e.Cannot_export_a_mutable_global=205]="Cannot_export_a_mutable_global",e[e.Compiling_constant_with_non_constant_initializer_as_mutable=206]="Compiling_constant_with_non_constant_initializer_as_mutable",e[e.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa=207]="Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa",e[e.Unmanaged_classes_cannot_implement_interfaces=208]="Unmanaged_classes_cannot_implement_interfaces",e[e.Invalid_regular_expression_flags=209]="Invalid_regular_expression_flags",e[e.Implementation_0_must_match_the_signature_1=210]="Implementation_0_must_match_the_signature_1",e[e.Class_0_is_sealed_and_cannot_be_extended=211]="Class_0_is_sealed_and_cannot_be_extended",e[e.Decorator_0_is_not_valid_here=212]="Decorator_0_is_not_valid_here",e[e.Duplicate_decorator=213]="Duplicate_decorator",e[e.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf=214]="An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf",e[e.Optional_parameter_must_have_an_initializer=215]="Optional_parameter_must_have_an_initializer",e[e.Constructor_of_class_0_must_not_require_any_arguments=216]="Constructor_of_class_0_must_not_require_any_arguments",e[e.Function_0_cannot_be_inlined_into_itself=217]="Function_0_cannot_be_inlined_into_itself",e[e.Unterminated_string_literal=1002]="Unterminated_string_literal",e[e.Identifier_expected=1003]="Identifier_expected",e[e._0_expected=1005]="_0_expected",e[e.A_file_cannot_have_a_reference_to_itself=1006]="A_file_cannot_have_a_reference_to_itself",e[e.Trailing_comma_not_allowed=1009]="Trailing_comma_not_allowed",e[e.Unexpected_token=1012]="Unexpected_token",e[e.A_rest_parameter_must_be_last_in_a_parameter_list=1014]="A_rest_parameter_must_be_last_in_a_parameter_list",e[e.Parameter_cannot_have_question_mark_and_initializer=1015]="Parameter_cannot_have_question_mark_and_initializer",e[e.A_required_parameter_cannot_follow_an_optional_parameter=1016]="A_required_parameter_cannot_follow_an_optional_parameter",e[e.Statements_are_not_allowed_in_ambient_contexts=1036]="Statements_are_not_allowed_in_ambient_contexts",e[e.Initializers_are_not_allowed_in_ambient_contexts=1039]="Initializers_are_not_allowed_in_ambient_contexts",e[e._0_modifier_cannot_be_used_here=1042]="_0_modifier_cannot_be_used_here",e[e.A_rest_parameter_cannot_be_optional=1047]="A_rest_parameter_cannot_be_optional",e[e.A_rest_parameter_cannot_have_an_initializer=1048]="A_rest_parameter_cannot_have_an_initializer",e[e.A_set_accessor_must_have_exactly_one_parameter=1049]="A_set_accessor_must_have_exactly_one_parameter",e[e.A_set_accessor_parameter_cannot_have_an_initializer=1052]="A_set_accessor_parameter_cannot_have_an_initializer",e[e.A_get_accessor_cannot_have_parameters=1054]="A_get_accessor_cannot_have_parameters",e[e.Enum_member_must_have_initializer=1061]="Enum_member_must_have_initializer",e[e.Type_parameters_cannot_appear_on_a_constructor_declaration=1092]="Type_parameters_cannot_appear_on_a_constructor_declaration",e[e.Type_annotation_cannot_appear_on_a_constructor_declaration=1093]="Type_annotation_cannot_appear_on_a_constructor_declaration",e[e.An_accessor_cannot_have_type_parameters=1094]="An_accessor_cannot_have_type_parameters",e[e.A_set_accessor_cannot_have_a_return_type_annotation=1095]="A_set_accessor_cannot_have_a_return_type_annotation",e[e.Type_parameter_list_cannot_be_empty=1098]="Type_parameter_list_cannot_be_empty",e[e.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement=1104]="A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement",e[e.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement=1105]="A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement",e[e.A_return_statement_can_only_be_used_within_a_function_body=1108]="A_return_statement_can_only_be_used_within_a_function_body",e[e.Expression_expected=1109]="Expression_expected",e[e.Type_expected=1110]="Type_expected",e[e.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement=1113]="A_default_clause_cannot_appear_more_than_once_in_a_switch_statement",e[e.Duplicate_label_0=1114]="Duplicate_label_0",e[e.Octal_literals_are_not_allowed_in_strict_mode=1121]="Octal_literals_are_not_allowed_in_strict_mode",e[e.Digit_expected=1124]="Digit_expected",e[e.Hexadecimal_digit_expected=1125]="Hexadecimal_digit_expected",e[e.Unexpected_end_of_text=1126]="Unexpected_end_of_text",e[e.Invalid_character=1127]="Invalid_character",e[e._case_or_default_expected=1130]="_case_or_default_expected",e[e.A_declare_modifier_cannot_be_used_in_an_already_ambient_context=1038]="A_declare_modifier_cannot_be_used_in_an_already_ambient_context",e[e.Type_argument_expected=1140]="Type_argument_expected",e[e.String_literal_expected=1141]="String_literal_expected",e[e.Line_break_not_permitted_here=1142]="Line_break_not_permitted_here",e[e.Declaration_expected=1146]="Declaration_expected",e[e._const_declarations_must_be_initialized=1155]="_const_declarations_must_be_initialized",e[e.Unterminated_regular_expression_literal=1161]="Unterminated_regular_expression_literal",e[e.Interface_declaration_cannot_have_implements_clause=1176]="Interface_declaration_cannot_have_implements_clause",e[e.Binary_digit_expected=1177]="Binary_digit_expected",e[e.Octal_digit_expected=1178]="Octal_digit_expected",e[e.An_implementation_cannot_be_declared_in_ambient_contexts=1183]="An_implementation_cannot_be_declared_in_ambient_contexts",e[e.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive=1198]="An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive",e[e.Unterminated_Unicode_escape_sequence=1199]="Unterminated_Unicode_escape_sequence",e[e.Decorators_are_not_valid_here=1206]="Decorators_are_not_valid_here",e[e._abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration=1242]="_abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration",e[e.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract=1245]="Method_0_cannot_have_an_implementation_because_it_is_marked_abstract",e[e.A_class_may_only_extend_another_class=1311]="A_class_may_only_extend_another_class",e[e.A_parameter_property_cannot_be_declared_using_a_rest_parameter=1317]="A_parameter_property_cannot_be_declared_using_a_rest_parameter",e[e.Duplicate_identifier_0=2300]="Duplicate_identifier_0",e[e.Cannot_find_name_0=2304]="Cannot_find_name_0",e[e.Module_0_has_no_exported_member_1=2305]="Module_0_has_no_exported_member_1",e[e.Generic_type_0_requires_1_type_argument_s=2314]="Generic_type_0_requires_1_type_argument_s",e[e.Type_0_is_not_generic=2315]="Type_0_is_not_generic",e[e.Type_0_is_not_assignable_to_type_1=2322]="Type_0_is_not_assignable_to_type_1",e[e.Index_signature_is_missing_in_type_0=2329]="Index_signature_is_missing_in_type_0",e[e._this_cannot_be_referenced_in_current_location=2332]="_this_cannot_be_referenced_in_current_location",e[e._super_can_only_be_referenced_in_a_derived_class=2335]="_super_can_only_be_referenced_in_a_derived_class",e[e.Property_0_does_not_exist_on_type_1=2339]="Property_0_does_not_exist_on_type_1",e[e.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures=2349]="Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures",e[e.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature=2351]="Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature",e[e.A_function_whose_declared_type_is_not_void_must_return_a_value=2355]="A_function_whose_declared_type_is_not_void_must_return_a_value",e[e.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access=2357]="The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access",e[e.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access=2364]="The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access",e[e.Operator_0_cannot_be_applied_to_types_1_and_2=2365]="Operator_0_cannot_be_applied_to_types_1_and_2",e[e._get_and_set_accessor_must_have_the_same_type=2380]="_get_and_set_accessor_must_have_the_same_type",e[e.Constructor_implementation_is_missing=2390]="Constructor_implementation_is_missing",e[e.Function_implementation_is_missing_or_not_immediately_following_the_declaration=2391]="Function_implementation_is_missing_or_not_immediately_following_the_declaration",e[e.Multiple_constructor_implementations_are_not_allowed=2392]="Multiple_constructor_implementations_are_not_allowed",e[e.Duplicate_function_implementation=2393]="Duplicate_function_implementation",e[e.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local=2395]="Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local",e[e.Type_0_has_no_property_1=2460]="Type_0_has_no_property_1",e[e.The_0_operator_cannot_be_applied_to_type_1=2469]="The_0_operator_cannot_be_applied_to_type_1",e[e.In_const_enum_declarations_member_initializer_must_be_constant_expression=2474]="In_const_enum_declarations_member_initializer_must_be_constant_expression",e[e.Export_declaration_conflicts_with_exported_declaration_of_0=2484]="Export_declaration_conflicts_with_exported_declaration_of_0",e[e.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property=2540]="Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property",e[e.The_target_of_an_assignment_must_be_a_variable_or_a_property_access=2541]="The_target_of_an_assignment_must_be_a_variable_or_a_property_access",e[e.Index_signature_in_type_0_only_permits_reading=2542]="Index_signature_in_type_0_only_permits_reading",e[e.Expected_0_arguments_but_got_1=2554]="Expected_0_arguments_but_got_1",e[e.Expected_at_least_0_arguments_but_got_1=2555]="Expected_at_least_0_arguments_but_got_1",e[e.Expected_0_type_arguments_but_got_1=2558]="Expected_0_type_arguments_but_got_1",e[e.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums=2651]="A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums",e[e.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration=2673]="Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration",e[e.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration=2674]="Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration",e[e.Namespace_0_has_no_exported_member_1=2694]="Namespace_0_has_no_exported_member_1",e[e.File_0_not_found=6054]="File_0_not_found",e[e.Numeric_separators_are_not_allowed_here=6188]="Numeric_separators_are_not_allowed_here",e[e.Multiple_consecutive_numeric_separators_are_not_permitted=6189]="Multiple_consecutive_numeric_separators_are_not_permitted"}(t.DiagnosticCode||(t.DiagnosticCode={})),t.diagnosticCodeToString=function(e){switch(e){case 100:return"Operation not supported.";case 101:return"Operation is unsafe.";case 102:return"User-defined: {0}";case 200:return"Conversion from type '{0}' to '{1}' requires an explicit cast.";case 201:return"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.";case 202:return"Type '{0}' cannot be changed to type '{1}'.";case 203:return"Type '{0}' cannot be reinterpreted as type '{1}'.";case 204:return"Basic type '{0}' cannot be nullable.";case 205:return"Cannot export a mutable global.";case 206:return"Compiling constant with non-constant initializer as mutable.";case 207:return"Unmanaged classes cannot extend managed classes and vice-versa.";case 208:return"Unmanaged classes cannot implement interfaces.";case 209:return"Invalid regular expression flags.";case 210:return"Implementation '{0}' must match the signature '{1}'.";case 211:return"Class '{0}' is sealed and cannot be extended.";case 212:return"Decorator '{0}' is not valid here.";case 213:return"Duplicate decorator.";case 214:return"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.";case 215:return"Optional parameter must have an initializer.";case 216:return"Constructor of class '{0}' must not require any arguments.";case 217:return"Function '{0}' cannot be inlined into itself.";case 1002:return"Unterminated string literal.";case 1003:return"Identifier expected.";case 1005:return"'{0}' expected.";case 1006:return"A file cannot have a reference to itself.";case 1009:return"Trailing comma not allowed.";case 1012:return"Unexpected token.";case 1014:return"A rest parameter must be last in a parameter list.";case 1015:return"Parameter cannot have question mark and initializer.";case 1016:return"A required parameter cannot follow an optional parameter.";case 1036:return"Statements are not allowed in ambient contexts.";case 1039:return"Initializers are not allowed in ambient contexts.";case 1042:return"'{0}' modifier cannot be used here.";case 1047:return"A rest parameter cannot be optional.";case 1048:return"A rest parameter cannot have an initializer.";case 1049:return"A 'set' accessor must have exactly one parameter.";case 1052:return"A 'set' accessor parameter cannot have an initializer.";case 1054:return"A 'get' accessor cannot have parameters.";case 1061:return"Enum member must have initializer.";case 1092:return"Type parameters cannot appear on a constructor declaration.";case 1093:return"Type annotation cannot appear on a constructor declaration.";case 1094:return"An accessor cannot have type parameters.";case 1095:return"A 'set' accessor cannot have a return type annotation.";case 1098:return"Type parameter list cannot be empty.";case 1104:return"A 'continue' statement can only be used within an enclosing iteration statement.";case 1105:return"A 'break' statement can only be used within an enclosing iteration or switch statement.";case 1108:return"A 'return' statement can only be used within a function body.";case 1109:return"Expression expected.";case 1110:return"Type expected.";case 1113:return"A 'default' clause cannot appear more than once in a 'switch' statement.";case 1114:return"Duplicate label '{0}'.";case 1121:return"Octal literals are not allowed in strict mode.";case 1124:return"Digit expected.";case 1125:return"Hexadecimal digit expected.";case 1126:return"Unexpected end of text.";case 1127:return"Invalid character.";case 1130:return"'case' or 'default' expected.";case 1038:return"A 'declare' modifier cannot be used in an already ambient context.";case 1140:return"Type argument expected.";case 1141:return"String literal expected.";case 1142:return"Line break not permitted here.";case 1146:return"Declaration expected.";case 1155:return"'const' declarations must be initialized.";case 1161:return"Unterminated regular expression literal.";case 1176:return"Interface declaration cannot have 'implements' clause.";case 1177:return"Binary digit expected.";case 1178:return"Octal digit expected.";case 1183:return"An implementation cannot be declared in ambient contexts.";case 1198:return"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.";case 1199:return"Unterminated Unicode escape sequence.";case 1206:return"Decorators are not valid here.";case 1242:return"'abstract' modifier can only appear on a class, method, or property declaration.";case 1245:return"Method '{0}' cannot have an implementation because it is marked abstract.";case 1311:return"A class may only extend another class.";case 1317:return"A parameter property cannot be declared using a rest parameter.";case 2300:return"Duplicate identifier '{0}'.";case 2304:return"Cannot find name '{0}'.";case 2305:return"Module '{0}' has no exported member '{1}'.";case 2314:return"Generic type '{0}' requires {1} type argument(s).";case 2315:return"Type '{0}' is not generic.";case 2322:return"Type '{0}' is not assignable to type '{1}'.";case 2329:return"Index signature is missing in type '{0}'.";case 2332:return"'this' cannot be referenced in current location.";case 2335:return"'super' can only be referenced in a derived class.";case 2339:return"Property '{0}' does not exist on type '{1}'.";case 2349:return"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.";case 2351:return"Cannot use 'new' with an expression whose type lacks a construct signature.";case 2355:return"A function whose declared type is not 'void' must return a value.";case 2357:return"The operand of an increment or decrement operator must be a variable or a property access.";case 2364:return"The left-hand side of an assignment expression must be a variable or a property access.";case 2365:return"Operator '{0}' cannot be applied to types '{1}' and '{2}'.";case 2380:return"'get' and 'set' accessor must have the same type.";case 2390:return"Constructor implementation is missing.";case 2391:return"Function implementation is missing or not immediately following the declaration.";case 2392:return"Multiple constructor implementations are not allowed.";case 2393:return"Duplicate function implementation.";case 2395:return"Individual declarations in merged declaration '{0}' must be all exported or all local.";case 2460:return"Type '{0}' has no property '{1}'.";case 2469:return"The '{0}' operator cannot be applied to type '{1}'.";case 2474:return"In 'const' enum declarations member initializer must be constant expression.";case 2484:return"Export declaration conflicts with exported declaration of '{0}'.";case 2540:return"Cannot assign to '{0}' because it is a constant or a read-only property.";case 2541:return"The target of an assignment must be a variable or a property access.";case 2542:return"Index signature in type '{0}' only permits reading.";case 2554:return"Expected {0} arguments, but got {1}.";case 2555:return"Expected at least {0} arguments, but got {1}.";case 2558:return"Expected {0} type arguments, but got {1}.";case 2651:return"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.";case 2673:return"Constructor of class '{0}' is private and only accessible within the class declaration.";case 2674:return"Constructor of class '{0}' is protected and only accessible within the class declaration.";case 2694:return"Namespace '{0}' has no exported member '{1}'.";case 6054:return"File '{0}' not found.";case 6188:return"Numeric separators are not allowed here.";case 6189:return"Multiple consecutive numeric separators are not permitted.";default:return""}}},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=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(20),c=r(1),l=r(4),p=r(0),u=r(5),h=r(8),d=r(2),_=r(6),m=r(3);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(s=t.Target||(t.Target={}));var y=function(){function e(){this.target=s.WASM32,this.noTreeShaking=!1,this.noAssert=!1,this.importMemory=!1,this.importTable=!1,this.sourceMap=!1,this.memoryBase=0,this.globalAliases=null,this.features=0,this.optimizeLevelHint=0,this.shrinkLevelHint=0}return Object.defineProperty(e.prototype,"isWasm64",{get:function(){return this.target==s.WASM64},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"usizeType",{get:function(){return this.target==s.WASM64?_.Type.usize64:_.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==s.WASM64?_.Type.isize64:_.Type.isize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nativeSizeType",{get:function(){return this.target==s.WASM64?l.NativeType.I64:l.NativeType.I32},enumerable:!0,configurable:!0}),e.prototype.hasFeature=function(e){return 0!=(this.features&e)},e}();t.Options=y,function(e){e[e.NONE=0]="NONE",e[e.SIGN_EXTENSION=1]="SIGN_EXTENSION",e[e.MUTABLE_GLOBAL=2]="MUTABLE_GLOBAL"}(t.Feature||(t.Feature={})),function(e){e[e.NONE=0]="NONE",e[e.IMPLICIT=1]="IMPLICIT",e[e.EXPLICIT=2]="EXPLICIT"}(t.ConversionKind||(t.ConversionKind={})),function(e){e[e.NONE=0]="NONE",e[e.WRAP=1]="WRAP"}(t.WrapMode||(t.WrapMode={}));var g,E,T=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.currentOuterFunction=null,n.currentInlineFunctions=[],n.currentEnum=null,n.currentType=_.Type.void,n.memorySegments=[],n.stringSegments=new Map,n.functionTable=[],n.argcVar=0,n.argcSet=0,n.needsIterateRoots=!1,n.f32ModInstance=null,n.f64ModInstance=null,n.f32PowInstance=null,n.f64PowInstance=null,n.program=t,n.resolver=t.resolver,r||(r=new y),n.options=r,n.memoryOffset=i64_new(max(r.memoryBase,8)),n.module=l.Module.create(),n}return n(t,e),t.compile=function(e,r){return void 0===r&&(r=null),new t(e,r).compile()},t.prototype.compile=function(){var e,t,r=this.options,n=this.module,s=this.program;s.initialize(r);var c=new u.Function(s.startFunction,"start",new _.Signature([],_.Type.void));this.startFunctionInstance=c;var p=new Array;this.startFunctionBody=p,this.currentFunction=c;for(var h=s.sources,d=0,m=h.length;d"),!1;e.type=this.currentType}else assert(!1);if(e.is(p.CommonFlags.AMBIENT)&&e.hasDecorator(u.DecoratorFlags.BUILTIN))return!0;var a=e.type.toNativeType(),s=e.is(p.CommonFlags.CONST)||e.is(p.CommonFlags.STATIC|p.CommonFlags.READONLY);if(e.is(p.CommonFlags.AMBIENT))return s||this.options.hasFeature(2)?(e.set(p.CommonFlags.MODULE_IMPORT),r?f(e,r,e.parent):(g="env",E=e.simpleName),t.addGlobalImport(e.internalName,g,E,a),e.set(p.CommonFlags.COMPILED),!0):(this.error(c.DiagnosticCode.Operation_not_supported,assert(r).range),!1);var o=!1;if(null!==r&&null!==r.initializer){if(n||(n=this.compileExpression(r.initializer,e.type,1,1)),l.getExpressionId(n)!=l.ExpressionId.Const&&(s?(n=t.precomputeExpression(n),l.getExpressionId(n)!=l.ExpressionId.Const&&(this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,r.range),o=!0)):o=!0),e.hasDecorator(u.DecoratorFlags.INLINE)&&!o){switch(assert(l.getExpressionId(n)==l.ExpressionId.Const),l.getExpressionType(n)){case l.NativeType.I32:e.constantValueKind=1,e.constantIntegerValue=i64_new(l.getConstValueI32(n),0);break;case l.NativeType.I64:e.constantValueKind=1,e.constantIntegerValue=i64_new(l.getConstValueI64Low(n),l.getConstValueI64High(n));break;case l.NativeType.F32:e.constantValueKind=2,e.constantFloatValue=l.getConstValueF32(n);break;case l.NativeType.F64:e.constantValueKind=2,e.constantFloatValue=l.getConstValueF64(n);break;default:return assert(!1),!1}e.set(p.CommonFlags.INLINED)}}else n=e.type.toNativeZero(t);var h=e.internalName;return o?(t.addGlobal(h,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(h,n))):t.addGlobal(h,a,!s,n),!0},t.prototype.compileEnumDeclaration=function(e){var t=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(t.kind==u.ElementKind.ENUM),this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){var t,r;if(e.is(p.CommonFlags.COMPILED))return!0;e.set(p.CommonFlags.COMPILED);var n=this.module;this.currentEnum=e;var a=null,s=!1;if(e.members)try{for(var o=i(e.members.values()),h=o.next();!h.done;h=o.next()){var d=h.value;if(d.kind==u.ElementKind.ENUMVALUE){var m=!1,y=d,g=y.declaration;y.set(p.CommonFlags.COMPILED);var E=void 0;g.value?(E=this.compileExpression(g.value,_.Type.i32,1,0),l.getExpressionId(E)!=l.ExpressionId.Const&&(e.is(p.CommonFlags.CONST)?(E=n.precomputeExpression(E),l.getExpressionId(E)!=l.ExpressionId.Const&&(this.error(c.DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,g.value.range),m=!0)):m=!0)):null==a?E=n.createI32(0):(s&&this.error(c.DiagnosticCode.Enum_member_must_have_initializer,g.range),E=n.createBinary(l.BinaryOp.AddI32,n.createGetGlobal(a.internalName,l.NativeType.I32),n.createI32(1)),E=n.precomputeExpression(E),l.getExpressionId(E)!=l.ExpressionId.Const&&(e.is(p.CommonFlags.CONST)&&this.error(c.DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,g.range),m=!0)),m?(n.addGlobal(y.internalName,l.NativeType.I32,!0,n.createI32(0)),this.startFunctionBody.push(n.createSetGlobal(y.internalName,E)),s=!0):(n.addGlobal(y.internalName,l.NativeType.I32,!e.is(p.CommonFlags.CONST),E),s=!1),a=y}}}catch(e){t={error:e}}finally{try{h&&!h.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return this.currentEnum=null,!0},t.prototype.compileFunctionDeclaration=function(e,t,r){void 0===r&&(r=null);var n=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(n.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.compileFunctionUsingTypeArguments(n,t,r,null,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n,i){var a=this.resolver.resolveFunctionInclTypeArguments(e,t,r,i);return a?(a.outerScope=n,this.compileFunction(a)?a:null):null},t.prototype.ensureFunctionType=function(e,t,r){void 0===r&&(r=null);var n,i=e?e.length:0,a=0;if(r?((n=new Array(1+i))[0]=r.toNativeType(),a=1):n=new Array(i),e)for(var s=0;s=0)return e.functionTableIndex;var t=this.functionTable,r=t.length;return!e.is(p.CommonFlags.TRAMPOLINE)&&e.signature.requiredParameters=0?"case"+h.toString(10):"break")+"|"+a);var y=t.createBlock("case0|"+a,p,l.NativeType.None),g=!0,E=!0,T=!0,f=!0;for(d=0;d=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),o.compileAbort(this,null,e)},t.prototype.compileTryStatement=function(e){return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileVariableStatement=function(e,t){void 0===t&&(t=!1);var r=this.program,n=this.currentFunction,i=e.declarations,a=i.length;if(t||n==this.startFunctionInstance&&e.parent&&e.parent.kind==d.NodeKind.SOURCE){for(var s=0;s");continue}E=this.currentType}var f=!1;if(y.is(p.CommonFlags.CONST))if(T)if(T=this.module.precomputeExpression(T),l.getExpressionId(T)==l.ExpressionId.Const){var I=new u.Local(r,g,-1,E);switch(l.getExpressionType(T)){case l.NativeType.I32:I=I.withConstantIntegerValue(i64_new(l.getConstValueI32(T),0));break;case l.NativeType.I64:I=I.withConstantIntegerValue(i64_new(l.getConstValueI64Low(T),l.getConstValueI64High(T)));break;case l.NativeType.F32:I=I.withConstantFloatValue(l.getConstValueF32(T));break;case l.NativeType.F64:I=I.withConstantFloatValue(l.getConstValueF64(T));break;default:return assert(!1),this.module.createUnreachable()}var v=n.flow.scopedLocals;if(v){if(v.has(g))return this.error(c.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(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range);else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,y.range);if(!f){I=void 0;I=y.isAny(p.CommonFlags.LET|p.CommonFlags.CONST)||h.is(2048)?h.addScopedLocal(E,g,!1,y):n.addLocal(E,g,y),T?(o.push(this.compileAssignmentWithValue(y.name,T)),I.type.is(36)&&h.setLocalWrapped(I.index,!h.canOverflow(T,E))):I.type.is(36)&&h.setLocalWrapped(I.index,!0)}}return o.length?1==o.length?o[0]:this.module.createBlock(null,o,l.NativeType.None):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,_.Type.void,2,0)},t.prototype.compileWhileStatement=function(e){var t=this.module,r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var n=t.precomputeExpression(r);if(l.getExpressionId(n)==l.ExpressionId.Const&&l.getExpressionType(n)==l.NativeType.I32){if(!l.getConstValueI32(n))return t.createNop()}else r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType)}var i=this.currentFunction,a=i.enterBreakContext(),s=i.flow,o=s.fork();i.flow=o;var c="break|"+a;o.breakLabel=c;var u="continue|"+a;o.continueLabel=u;var h=this.compileStatement(e.statement),d=o.isAny(29);return i.flow=o.free(),i.leaveBreakContext(),o.unset(792),s.inheritConditional(o),t.createBlock(c,[t.createLoop(u,t.createIf(r,d?h:t.createBlock(null,[h,t.createBreak(u)],l.NativeType.None)))],l.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(_.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&a:0);case 2:case 7:return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 4:case 9:if(!e.program.options.isWasm64)return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 3:case 8:return 1==e.constantValueKind?this.module.createI64(i64_low(e.constantIntegerValue),i64_high(e.constantIntegerValue)):this.module.createI64(0);case 12:if(!e.hasDecorator(u.DecoratorFlags.BUILTIN)||t!=_.Type.f32)return this.module.createF64(e.constantFloatValue);this.currentType=_.Type.f32;case 11:return this.module.createF32(e.constantFloatValue);default:return assert(!1),this.module.createUnreachable()}},t.prototype.compileExpression=function(e,t,r,n){var i;switch(this.currentType=t,e.kind){case d.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case d.NodeKind.BINARY:i=this.compileBinaryExpression(e,t);break;case d.NodeKind.CALL:i=this.compileCallExpression(e,t);break;case d.NodeKind.COMMA:i=this.compileCommaExpression(e,t);break;case d.NodeKind.ELEMENTACCESS:i=this.compileElementAccessExpression(e,t);break;case d.NodeKind.FUNCTION:i=this.compileFunctionExpression(e,t);break;case d.NodeKind.IDENTIFIER:case d.NodeKind.FALSE:case d.NodeKind.NULL:case d.NodeKind.THIS:case d.NodeKind.SUPER:case d.NodeKind.TRUE:i=this.compileIdentifierExpression(e,t,0==r);break;case d.NodeKind.INSTANCEOF:i=this.compileInstanceOfExpression(e,t);break;case d.NodeKind.LITERAL:i=this.compileLiteralExpression(e,t);break;case d.NodeKind.NEW:i=this.compileNewExpression(e,t);break;case d.NodeKind.PARENTHESIZED:i=this.compileParenthesizedExpression(e,t);break;case d.NodeKind.PROPERTYACCESS:i=this.compilePropertyAccessExpression(e,t,0==r);break;case d.NodeKind.TERNARY:i=this.compileTernaryExpression(e,t);break;case d.NodeKind.UNARYPOSTFIX:i=this.compileUnaryPostfixExpression(e,t);break;case d.NodeKind.UNARYPREFIX:i=this.compileUnaryPrefixExpression(e,t);break;default:this.error(c.DiagnosticCode.Operation_not_supported,e.range),i=this.module.createUnreachable()}var a=this.currentType;return 0!=r&&a!=t?(i=this.convertExpression(i,a,t,r,n,e),this.currentType=t):1==n&&(i=this.ensureSmallIntegerWrap(i,a)),this.options.sourceMap&&this.addDebugLocation(i,e.range),i},t.prototype.compileExpressionRetainType=function(e,t,r){return this.compileExpression(e,t==_.Type.void?_.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r,n){return this.module.precomputeExpression(this.compileExpression(e,t,r,n))},t.prototype.convertExpression=function(e,t,r,n,i,a){assert(0!=n);var s=this.module;return 13==t.kind?(assert(13!=r.kind),this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,a.range,t.toString(),r.toString()),s.createUnreachable()):13==r.kind?s.createDrop(e):(t.isAssignableTo(r)||1==n&&this.error(c.DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,a.range,t.toString(),r.toString()),t.is(8)?r.is(8)?11==t.kind?12==r.kind&&(e=s.createUnary(l.UnaryOp.PromoteF32,e)):11==r.kind&&(e=s.createUnary(l.UnaryOp.DemoteF64,e)):r.is(4)?e=11==t.kind?r.is(1)?r.is(64)?s.createUnary(l.UnaryOp.TruncF32ToI64,e):s.createUnary(l.UnaryOp.TruncF32ToI32,e):r.is(64)?s.createUnary(l.UnaryOp.TruncF32ToU64,e):s.createUnary(l.UnaryOp.TruncF32ToU32,e):r.is(1)?r.is(64)?s.createUnary(l.UnaryOp.TruncF64ToI64,e):s.createUnary(l.UnaryOp.TruncF64ToI32,e):r.is(64)?s.createUnary(l.UnaryOp.TruncF64ToU64,e):s.createUnary(l.UnaryOp.TruncF64ToU32,e):(assert(0==r.flags,"void type expected"),e=s.createDrop(e)):t.is(4)&&r.is(8)?e=11==r.kind?t.is(64)?s.createUnary(t.is(1)?l.UnaryOp.ConvertI64ToF32:l.UnaryOp.ConvertU64ToF32,e):s.createUnary(t.is(1)?l.UnaryOp.ConvertI32ToF32:l.UnaryOp.ConvertU32ToF32,e):t.is(64)?s.createUnary(t.is(1)?l.UnaryOp.ConvertI64ToF64:l.UnaryOp.ConvertU64ToF64,e):s.createUnary(t.is(1)?l.UnaryOp.ConvertI32ToF64:l.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=s.createUnary(l.UnaryOp.WrapI64,e)):r.is(64)?(e=s.createUnary(r.is(1)?l.UnaryOp.ExtendI32:l.UnaryOp.ExtendU32,this.ensureSmallIntegerWrap(e,t)),i=0):t.is(32)&&t.size",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.GtI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GtI64:l.BinaryOp.GtI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.GtI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.GtU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GtU64:l.BinaryOp.GtU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.GtU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.GtF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.GtF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.LESSTHAN_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.LE)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"<=",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.LeI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.LeI64:l.BinaryOp.LeI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.LeI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.LeU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.LeU64:l.BinaryOp.LeU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.LeU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.LeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.LeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.GREATERTHAN_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.GE)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,">=",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.GeI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GeI64:l.BinaryOp.GeI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.GeI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.GeU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GeU64:l.BinaryOp.GeU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.GeU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.GeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.GeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EQUALS_EQUALS_EQUALS:case h.Token.EQUALS_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,g==h.Token.EQUALS_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.EQ)){o=this.compileBinaryOverload(v,d,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,h.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.EqI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.EqI64:l.BinaryOp.EqI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.EqI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.EqF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.EqF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EXCLAMATION_EQUALS_EQUALS:case h.Token.EXCLAMATION_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,g==h.Token.EXCLAMATION_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.NE)){o=this.compileBinaryOverload(v,d,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,h.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.NeI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.NeI64:l.BinaryOp.NeI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.NeI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.NeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.NeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EQUALS:return this.compileAssignment(d,m,t);case h.Token.PLUS_EQUALS:y=!0;case h.Token.PLUS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.ADD)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"+",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.AddI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.AddI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.AddF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.AddF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.MINUS_EQUALS:y=!0;case h.Token.MINUS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.SUB)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"-",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.SubI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.SubI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.SubF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.SubF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.ASTERISK_EQUALS:y=!0;case h.Token.ASTERISK:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.MUL)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(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=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"*",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.MulI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.MulI64:l.BinaryOp.MulI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.MulI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.MulF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.MulF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.ASTERISK_ASTERISK_EQUALS:y=!0;case h.Token.ASTERISK_ASTERISK:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.POW)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var E=void 0;if(11==this.currentType.kind){if(i=this.compileExpression(m,_.Type.f32,1,0),a=this.currentType,!(E=this.f32PowInstance)){if(!(T=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=p.createUnreachable();break}if(!(f=T.members?T.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),o=p.createUnreachable();break}assert(f.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=E=this.resolver.resolveFunction(f,null)}}else if(r=this.convertExpression(r,this.currentType,_.Type.f64,1,0,d),n=this.currentType,i=this.compileExpression(m,_.Type.f64,1,0),a=this.currentType,!(E=this.f64PowInstance)){if(!(T=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=p.createUnreachable();break}if(!(f=T.members?T.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),o=p.createUnreachable();break}assert(f.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=E=this.resolver.resolveFunction(f,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;case h.Token.SLASH_EQUALS:y=!0;case h.Token.SLASH:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.DIV)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(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=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"/",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.DivI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.DivI64:l.BinaryOp.DivI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.DivI64,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.DivU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.DivU64:l.BinaryOp.DivU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.DivU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.DivF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.DivF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.PERCENT_EQUALS:y=!0;case h.Token.PERCENT:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.REM)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(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=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"%",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.RemI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.RemI64:l.BinaryOp.RemI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.RemI64,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.RemU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.RemU64:l.BinaryOp.RemU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.RemU64,r,i);break;case 11:if(!(E=this.f32ModInstance)){if(!(T=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=p.createUnreachable();break}if(!(f=T.members?T.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),o=p.createUnreachable();break}assert(f.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=E=this.resolver.resolveFunction(f,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;case 12:if(!(E=this.f64ModInstance)){var T,f;if(!(T=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=p.createUnreachable();break}if(!(f=T.members?T.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),o=p.createUnreachable();break}assert(f.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=E=this.resolver.resolveFunction(f,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.LESSTHAN_LESSTHAN_EQUALS:y=!0;case h.Token.LESSTHAN_LESSTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHL)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.ShlI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.ShlI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShlI64:l.BinaryOp.ShlI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.GREATERTHAN_GREATERTHAN_EQUALS:y=!0;case h.Token.GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType,this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.ShrI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.ShrI64,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrI64:l.BinaryOp.ShrI32,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.ShrU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.ShrU64,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrU64:l.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:y=!0;case h.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHR_U)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.ShrU32,r,i);case 0:case 1:case 2:case 7:o=p.createBinary(l.BinaryOp.ShrU32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.ShrU64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrU64:l.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.AMPERSAND_EQUALS:y=!0;case h.Token.AMPERSAND:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_AND)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"&",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.AndI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.AndI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.AndI64:l.BinaryOp.AndI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.BAR_EQUALS:y=!0;case h.Token.BAR:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_OR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"|",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.OrI32,r,i);break;case 2:case 7:o=p.createBinary(l.BinaryOp.OrI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.OrI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.OrI64:l.BinaryOp.OrI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.CARET_EQUALS:y=!0;case h.Token.CARET:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){var I,v;if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_XOR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"^",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.XorI32,r,i);break;case 2:case 7:o=p.createBinary(l.BinaryOp.XorI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.XorI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.XorI64:l.BinaryOp.XorI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.AMPERSAND_AMPERSAND:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,o=p.cloneExpression(r,!0,0))this.makeIsTrueish(r,this.currentType),o=p.createIf(this.makeIsTrueish(r,this.currentType),i,o);else{var A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=p.createIf(this.makeIsTrueish(p.createTeeLocal(C.index,r),this.currentType),i,p.createGetLocal(assert(C).index,this.currentType.toNativeType()))}break;case h.Token.BAR_BAR:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,o=this.module.cloneExpression(r,!0,0))o=this.module.createIf(this.makeIsTrueish(r,this.currentType),o,i);else{A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=p.createIf(this.makeIsTrueish(p.createTeeLocal(C.index,r),this.currentType),p.createGetLocal(assert(C).index,this.currentType.toNativeType()),i)}break;default:assert(!1),o=this.module.createUnreachable()}return y?this.compileAssignmentWithValue(d,o,t!=_.Type.void):o},t.prototype.compileUnaryOverload=function(e,t,r,n){var i,a=0;return e.is(p.CommonFlags.INSTANCE)?(a=r,i=[]):i=[t],this.compileCallDirect(e,i,n,a,e.hasDecorator(u.DecoratorFlags.INLINE))},t.prototype.compileBinaryOverload=function(e,t,r,n,i){var a,s=0;if(e.is(p.CommonFlags.INSTANCE)){var o=assert(e.parent);assert(o.kind==u.ElementKind.CLASS),s=r,a=[n]}else a=[t,n];return this.compileCallDirect(e,a,i,s,e.hasDecorator(u.DecoratorFlags.INLINE))},t.prototype.compileAssignment=function(e,t,r){var n,i=this.program.resolver,a=this.currentFunction,s=i.resolveExpression(e,a);if(!s)return this.module.createUnreachable();switch(s.kind){case u.ElementKind.GLOBAL:if(!this.compileGlobal(s))return this.module.createUnreachable();assert(s.type!=_.Type.void);case u.ElementKind.LOCAL:case u.ElementKind.FIELD:n=s.type;break;case u.ElementKind.PROPERTY:var o=s.setterPrototype;if(o){var l=this.resolver.resolveFunction(o,null);if(!l)return this.module.createUnreachable();assert(1==l.signature.parameterTypes.length),n=l.signature.parameterTypes[0];break}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,s.internalName),this.module.createUnreachable();case u.ElementKind.CLASS:if(i.currentElementExpression){var p=a.flow.is(4096),h=s.lookupOverload(u.OperatorKind.INDEXED_SET,p);if(!h)return s.lookupOverload(u.OperatorKind.INDEXED_GET,p)?this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,s.internalName):this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,s.internalName),this.module.createUnreachable();assert(2==h.signature.parameterTypes.length),n=h.signature.parameterTypes[1];break}default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}assert(n!=_.Type.void);var d=this.compileExpression(t,n,1,0);return this.compileAssignmentWithValue(e,d,r!=_.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.resolver.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();switch(i.kind){case u.ElementKind.LOCAL:var a=i.type;if(assert(a!=_.Type.void),this.currentType=r?a:_.Type.void,i.is(p.CommonFlags.CONST))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var s=this.currentFunction.flow;return a.is(36)&&s.setLocalWrapped(i.index,!s.canOverflow(t,a)),r?n.createTeeLocal(i.index,t):n.createSetLocal(i.index,t);case u.ElementKind.GLOBAL:if(!this.compileGlobal(i))return n.createUnreachable();a=i.type;if(assert(a!=_.Type.void),this.currentType=r?a:_.Type.void,i.is(p.CommonFlags.CONST))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();if(t=this.ensureSmallIntegerWrap(t,a),r){var o=a.toNativeType(),l=i.internalName;return n.createBlock(null,[n.createSetGlobal(l,t),n.createGetGlobal(l,o)],o)}return n.createSetGlobal(i.internalName,t);case u.ElementKind.FIELD:var h=i.declaration;if(i.is(p.CommonFlags.READONLY)&&!this.currentFunction.is(p.CommonFlags.CONSTRUCTOR)&&null!=h&&null==h.initializer)return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0);a=i.type;this.currentType=r?a:_.Type.void;o=a.toNativeType();if(10==a.kind&&(t=this.ensureSmallIntegerWrap(t,a)),r){s=(L=this.currentFunction).flow;var 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,o),o,i.memoryOffset),n.createGetLocal(y,o)],o)}return n.createStore(a.byteSize,m,t,o,i.memoryOffset);case u.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)){d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0);return this.makeCallDirect(E,[m,t])}return this.makeCallDirect(E,[t])}var 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)){d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,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(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();case u.ElementKind.CLASS:var v=this.resolver.currentElementExpression;if(v){var A=this.currentFunction.flow.is(4096),C=i.lookupOverload(u.OperatorKind.INDEXED_GET,A);if(!C)return this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.internalName),n.createUnreachable();var N=i.lookupOverload(u.OperatorKind.INDEXED_SET,A);if(!N)return this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.internalName),this.currentType=r?C.signature.returnType:_.Type.void,n.createUnreachable();var O=i.type,S=(d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0),this.compileExpression(v,_.Type.i32,1,0));if(r){var L,b=(L=this.currentFunction).getTempLocal(O,!1),k=L.getAndFreeTempLocal(this.currentType,!1),R=C.signature.returnType;return this.currentFunction.freeTempLocal(b),n.createBlock(null,[this.makeCallDirect(N,[n.createTeeLocal(b.index,m),n.createTeeLocal(k.index,S),t]),this.makeCallDirect(C,[n.createGetLocal(b.index,b.type.toNativeType()),n.createGetLocal(k.index,k.type.toNativeType())])],R.toNativeType())}return this.makeCallDirect(N,[m,S,t])}}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()},t.prototype.compileCallExpression=function(e,t){var r,n,i=this.module,a=this.currentFunction,s=this.resolver.resolveExpression(e.expression,a);if(!s)return i.createUnreachable();switch(s.kind){case u.ElementKind.FUNCTION_PROTOTYPE:var o=s,h=e.typeArguments;if(o.hasDecorator(u.DecoratorFlags.BUILTIN))return this.compileCallExpressionBuiltin(o,e,t);var m=null;if(h){if(!o.is(p.CommonFlags.GENERIC))return this.error(c.DiagnosticCode.Type_0_is_not_generic,e.expression.range,o.internalName),i.createUnreachable();m=this.resolver.resolveFunctionInclTypeArguments(o,h,this.currentFunction.flow.contextualTypeArguments,e)}else{if(o.is(p.CommonFlags.GENERIC)){for(var y=new Map,g=assert(o.declaration.typeParameters),E=g.length,T=0;Ts&&!i)||(this.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,s.toString(),t.toString()),!1)},t.prototype.compileCallDirect=function(e,t,r,n,i){void 0===n&&(n=0),void 0===i&&(i=!1);var a=t.length,s=e.signature;if(!this.checkCallSignature(s,a,0!=n,r))return this.module.createUnreachable();if(i){if(assert(!e.is(p.CommonFlags.TRAMPOLINE)),!this.currentInlineFunctions.includes(e)){this.currentInlineFunctions.push(e);var o=this.compileCallInlineUnchecked(e,t,r,n);return this.currentInlineFunctions.pop(),o}this.warning(c.DiagnosticCode.Function_0_cannot_be_inlined_into_itself,r.range,e.internalName)}var l=n?a+1:a,u=new Array(l),h=0;n&&(u[0]=n,h=1);for(var d=s.parameterTypes,_=0;_=i);var o=this.module;if(!this.compileFunction(e))return o.createUnreachable();var c=e.signature.returnType,l=e.is(p.CommonFlags.MODULE_IMPORT);if(r=a),this.ensureFunctionType(e.parameterTypes,e.returnType,e.thisType);var c=this.module;if(n=0),this.currentType=T,this.module.createGetLocal(f,T.toNativeType());case u.ElementKind.GLOBAL:if(!this.compileGlobal(E))return this.module.createUnreachable();var I=E.type;return assert(I!=_.Type.void),E.is(p.CommonFlags.INLINED)?this.compileInlineConstant(E,t,r):(this.currentType=I,this.module.createGetGlobal(E.internalName,I.toNativeType()));case u.ElementKind.ENUMVALUE:return E.is(p.CommonFlags.COMPILED)?(this.currentType=_.Type.i32,E.is(p.CommonFlags.INLINED)?this.module.createI32(E.constantValue):this.module.createGetGlobal(E.internalName,l.NativeType.I32)):(this.error(c.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,e.range),this.currentType=_.Type.i32,this.module.createUnreachable());case u.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(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileInstanceOfExpression=function(e,t){var r=this.module,n=this.compileExpressionRetainType(e.expression,this.options.usizeType,0),i=this.currentType,a=this.resolver.resolveType(e.isType);return this.currentType=_.Type.bool,a?i.is(512)&&!a.is(512)?i.nonNullableType.isAssignableTo(a)?r.createBinary(i.is(64)?l.BinaryOp.NeI64:l.BinaryOp.NeI32,n,i.toNativeZero(r)):r.createI32(0):r.createI32(i.isAssignableTo(a,!0)?1:0):r.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){void 0===r&&(r=!1);var n=this.module;switch(e.literalKind){case d.LiteralKind.ARRAY:assert(!r);var i=t.classReference;return i&&i.prototype==this.program.arrayPrototype?this.compileArrayLiteral(assert(i.typeArguments)[0],e.elementExpressions,e):(this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable());case d.LiteralKind.FLOAT:var a=e.value;return r&&(a=-a),t==_.Type.f32?n.createF32(a):(this.currentType=_.Type.f64,n.createF64(a));case d.LiteralKind.INTEGER:var s=e.value;switch(r&&(s=i64_sub(i64_new(0),s)),t.kind){case 0:if(i64_is_i8(s))return n.createI32(i64_low(s));break;case 5:if(i64_is_u8(s))return n.createI32(i64_low(s));break;case 1:if(i64_is_i16(s))return n.createI32(i64_low(s));break;case 6:if(i64_is_u16(s))return n.createI32(i64_low(s));break;case 2:if(i64_is_i32(s))return n.createI32(i64_low(s));break;case 7:if(i64_is_u32(s))return n.createI32(i64_low(s));break;case 10:if(i64_is_bool(s))return n.createI32(i64_low(s));break;case 4:if(!this.options.isWasm64){if(i64_is_i32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 9:if(!this.options.isWasm64){if(i64_is_u32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 3:case 8:return n.createI64(i64_low(s),i64_high(s));case 11:if(i64_is_f32(s))return n.createF32(i64_to_f32(s));break;case 12:if(i64_is_f64(s))return n.createF64(i64_to_f64(s));break;case 13:break;default:return assert(!1),n.createUnreachable()}return i64_is_i32(s)?(this.currentType=_.Type.i32,n.createI32(i64_low(s))):i64_is_u32(s)?(this.currentType=_.Type.u32,n.createI32(i64_low(s))):(this.currentType=_.Type.i64,n.createI64(i64_low(s),i64_high(s)));case d.LiteralKind.STRING:return assert(!r),this.compileStaticString(e.value);case d.LiteralKind.OBJECT:return assert(!r),this.compileObjectLiteral(e,t)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,n.createUnreachable()},t.prototype.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,l=this.program.typesLookup.get("string");return this.currentType=l||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!=u.ElementKind.CLASS_PROTOTYPE)return i.createUnreachable();var s=this.resolver.resolveClass(a,[e]);if(!s)return i.createUnreachable();var o=s.type,p=t.length;if(p){var h=e.toNativeType(),d=void 0,_=void 0;switch(h){case l.NativeType.I32:d=changetype(new Int32Array(p)),_=4*p;break;case l.NativeType.I64:d=changetype(new Array(p)),_=8*p;break;case l.NativeType.F32:d=changetype(new Float32Array(p)),_=4*p;break;case l.NativeType.F64:d=changetype(new Float64Array(p)),_=8*p;break;default:return assert(!1),i.createUnreachable()}for(var y=new Array(p),g=void 0,E=0;E",t.toString()),r.createUnreachable();var i=n.constructorInstance;if(i){if(i.signature.requiredParameters)return this.error(c.DiagnosticCode.Constructor_of_class_0_must_not_require_any_arguments,e.range,n.toString()),r.createUnreachable();if(i.is(p.CommonFlags.PRIVATE))return this.error(c.DiagnosticCode.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,e.range,n.toString()),r.createUnreachable();if(i.is(p.CommonFlags.PROTECTED))return this.error(c.DiagnosticCode.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,e.range,n.toString()),r.createUnreachable()}var a=e.names,s=a.length,l=e.values,h=n.members,d=!1,_=new Array(s+2),m=this.currentFunction.getTempLocal(this.options.usizeType);assert(s==l.length);for(var y=0,g=s;y=0);var h=this.compileExpressionRetainType(o,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 u.ElementKind.PROPERTY:var d=i.getterPrototype;if(d){var m=this.resolver.resolveFunction(d,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&u.DecoratorFlags.INLINE);if(m.is(p.CommonFlags.INSTANCE)){s=assert(m.parent);assert(s.kind==u.ElementKind.CLASS);o=assert(this.resolver.currentThisExpression),h=this.compileExpressionRetainType(o,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(c.DiagnosticCode.Property_0_does_not_exist_on_type_1,e.range,i.simpleName,i.parent.toString()),n.createUnreachable()}return this.error(c.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,_.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var o=this.module.precomputeExpression(s);if(l.getExpressionId(o)==l.ExpressionId.Const&&l.getExpressionType(o)==l.NativeType.I32)return l.getConstValueI32(o)?this.compileExpressionRetainType(r,t,0):this.compileExpressionRetainType(n,t,0);s=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType)}var u=a.fork();i.flow=u;var h=this.compileExpressionRetainType(r,t,0),d=this.currentType;u.free();var m=a.fork();i.flow=m;var y=this.compileExpressionRetainType(n,t,0),g=this.currentType;i.flow=m.free(),a.inheritMutual(u,m);var E=_.Type.commonCompatible(d,g,!1);return E?(h=this.convertExpression(h,d,E,1,0,r),y=this.convertExpression(y,g,E,1,0,n),this.currentType=E,this.module.createIf(s,h,y)):(this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,e.range,d.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==_.Type.void?_.Type.i32:t,0,0);if(l.getExpressionId(i)==l.ExpressionId.Unreachable)return i;var a,s,o,p=this.currentType;switch(e.operator){case h.Token.PLUS_PLUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(p.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=l.BinaryOp.AddI32,s=l.NativeType.I32,o=r.createI32(1);break;case 9:case 4:a=(u=this.options).isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,s=u.nativeSizeType,o=p.toNativeOne(r);break;case 3:case 8:a=l.BinaryOp.AddI64,s=l.NativeType.I64,o=r.createI64(1);break;case 11:a=l.BinaryOp.AddF32,s=l.NativeType.F32,o=r.createF32(1);break;case 12:a=l.BinaryOp.AddF64,s=l.NativeType.F64,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;case h.Token.MINUS_MINUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(p.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=l.BinaryOp.SubI32,s=l.NativeType.I32,o=r.createI32(1);break;case 9:case 4:var u;a=(u=this.options).isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,s=u.nativeSizeType,o=p.toNativeOne(r);break;case 3:case 8:a=l.BinaryOp.SubI64,s=l.NativeType.I64,o=r.createI64(1);break;case 11:a=l.BinaryOp.SubF32,s=l.NativeType.F32,o=r.createF32(1);break;case 12:a=l.BinaryOp.SubF64,s=l.NativeType.F64,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;default:return assert(!1),r.createUnreachable()}if(t==_.Type.void)return this.compileAssignmentWithValue(e.operand,r.createBinary(a,i,o),!1);var d=n.getTempLocal(p,!1),m=this.compileAssignmentWithValue(e.operand,r.createBinary(a,this.module.createGetLocal(d.index,s),o),!1);this.currentType=assert(d).type,n.freeTempLocal(d);var y=d.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 h.Token.PLUS:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PLUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}break;case h.Token.MINUS:if(e.operand.kind==d.NodeKind.LITERAL&&(e.operand.literalKind==d.LiteralKind.INTEGER||e.operand.literalKind==d.LiteralKind.FLOAT)){r=this.compileLiteralExpression(e.operand,t,!0),this.options.sourceMap&&this.addDebugLocation(r,e.range);break}if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.MINUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.SubI32,n.createI32(0),r);break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,this.currentType.toNativeZero(n),r);break;case 3:case 8:r=n.createBinary(l.BinaryOp.SubI64,n.createI64(0),r);break;case 11:r=n.createUnary(l.UnaryOp.NegF32,r);break;case 12:r=n.createUnary(l.UnaryOp.NegF64,r);break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.PLUS_PLUS:if(i=!0,r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PREFIX_INC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.AddI32,r,this.module.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.AddI64,r,n.createI64(1));break;case 11:r=n.createBinary(l.BinaryOp.AddF32,r,n.createF32(1));break;case 12:r=n.createBinary(l.BinaryOp.AddF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.MINUS_MINUS:if(i=!0,r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PREFIX_DEC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.SubI32,r,n.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.SubI64,r,n.createI64(1));break;case 11:r=n.createBinary(l.BinaryOp.SubF32,r,n.createF32(1));break;case 12:r=n.createBinary(l.BinaryOp.SubF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.EXCLAMATION:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256))if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}r=this.makeIsFalseish(r,this.currentType),this.currentType=_.Type.bool;break;case h.Token.TILDE:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t.is(8)?_.Type.i64:t,0,0),this.currentType.is(256)){var a,s;if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.BITWISE_NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(r=this.convertExpression(r,this.currentType,this.currentType.intType,1,0,e.operand),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.XorI32,r,n.createI32(-1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.XorI64:l.BinaryOp.XorI32,r,this.currentType.toNativeNegOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.XorI64,r,n.createI64(-1,-1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.TYPEOF:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();default:return assert(!1),n.createUnreachable()}return i?this.compileAssignmentWithValue(e.operand,r,t!=_.Type.void):r},t.prototype.ensureSmallIntegerWrap=function(e,t){var r=this.module,n=this.currentFunction.flow;switch(t.kind){case 0:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(l.UnaryOp.ExtendI8ToI32,e):r.createBinary(l.BinaryOp.ShrI32,r.createBinary(l.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24)));break;case 1:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(l.UnaryOp.ExtendI16ToI32,e):r.createBinary(l.BinaryOp.ShrI32,r.createBinary(l.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16)));break;case 5:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(255)));break;case 6:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(65535)));break;case 10:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(1)))}return e},t.prototype.makeIsFalseish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return r.createUnary(l.UnaryOp.EqzI32,e);case 3:case 8:return r.createUnary(l.UnaryOp.EqzI64,e);case 9:case 4:return r.createUnary(64==t.size?l.UnaryOp.EqzI64:l.UnaryOp.EqzI32,e);case 11:return r.createBinary(l.BinaryOp.EqF32,e,r.createF32(0));case 12:return r.createBinary(l.BinaryOp.EqF64,e,r.createF64(0));default:return assert(!1),r.createI32(1)}},t.prototype.makeIsTrueish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return e;case 3:case 8:return r.createBinary(l.BinaryOp.NeI64,e,r.createI64(0));case 9:case 4:return 64==t.size?r.createBinary(l.BinaryOp.NeI64,e,r.createI64(0)):e;case 11:return r.createBinary(l.BinaryOp.NeF32,e,r.createF32(0));case 12:return r.createBinary(l.BinaryOp.NeF64,e,r.createF64(0));default:return assert(!1),r.createI32(0)}},t.prototype.makeAllocate=function(e,t){var r,n,a=this.module,s=this.currentFunction,c=this.options.nativeSizeType,l=s.getTempLocal(e.type,!1),h=new Array;if(h.push(a.createSetLocal(l.index,o.compileAllocate(this,e,t))),e.members)try{for(var d=i(e.members.values()),_=d.next();!_.done;_=d.next()){var m=_.value;if(m.kind==u.ElementKind.FIELD){var 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(l.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(l.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(l.index,c)),s.freeTempLocal(l),this.currentType=e.type,a.createBlock(null,h,c)},t.prototype.makeConditionalAllocate=function(e,t){var r=this.module,n=this.options.nativeSizeType;return this.currentType=e.type,r.createIf(n==l.NativeType.I64?r.createBinary(l.BinaryOp.NeI64,r.createGetLocal(0,l.NativeType.I64),r.createI64(0)):r.createGetLocal(0,l.NativeType.I32),r.createGetLocal(0,n),r.createTeeLocal(0,this.makeAllocate(e,t)))},t.prototype.addDebugLocation=function(e,t){var r=this.currentFunction,n=t.source;n.debugInfoIndex<0&&(n.debugInfoIndex=this.module.addDebugInfoFile(n.normalizedPath)),t.debugInfoRef=e,r.debugLocations.push(t)},t}(c.DiagnosticEmitter);function f(e,t,r){if(void 0===r&&(r=null),g=r?r.simpleName:t.range.source.simplePath,E=e.simpleName,e.hasDecorator(u.DecoratorFlags.EXTERNAL)){var n=e.program,i=assert(d.findDecorator(d.DecoratorKind.EXTERNAL,t.decorators)),a=i.arguments;if(a&&a.length){var s=a[0];s.kind==d.NodeKind.LITERAL&&s.literalKind==d.LiteralKind.STRING?(E=s.value,a.length>=2&&((s=a[1]).kind==d.NodeKind.LITERAL&&s.literalKind==d.LiteralKind.STRING?(g=E,E=s.value,a.length>2&&n.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"2",a.length.toString())):n.error(c.DiagnosticCode.String_literal_expected,s.range))):n.error(c.DiagnosticCode.String_literal_expected,s.range)}else n.error(c.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,i.range,"1","0")}}t.Compiler=T},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),l=r(2),p=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=l.mangleInternalPath(n);if(!this.donelog.has(a)){this.donelog.add(a),this.seenlog.add(a);var o=new l.Source(n,e,r?l.SourceKind.ENTRY:t.startsWith(i.LIBRARY_PREFIX)&&t.indexOf(i.PATH_DELIMITER,i.LIBRARY_PREFIX.length)<0?l.SourceKind.LIBRARY:l.SourceKind.DEFAULT),p=this.program;p.sources.push(o);var u=new s.Tokenizer(o,p.diagnostics);u.onComment=this.onComment,o.tokenizer=u;for(var h=o.statements;!u.skip(s.Token.ENDOFFILE);){var d=this.parseTopLevelStatement(u);d&&(d.parent=o,h.push(d))}u.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)}var l=0,p=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,l=e.tokenPos,p=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):(p&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(l,p),"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=l.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=l.Node.createType(l.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 p=l.ParameterKind.DEFAULT;if(e.skip(s.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),p=l.ParameterKind.REST),e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return e.reset(r),this.tryParseSignatureIsSignature=!1,null;c=!0,e.discard(r);var u=this.parseType(e,!1);if(!u)return null;if(u.kind!=l.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,u.range),this.tryParseSignatureIsSignature=!0,null;a=u}else{if(!e.skipIdentifier())return c?this.error(o.DiagnosticCode.Identifier_expected,e.range()):e.reset(r),this.tryParseSignatureIsSignature=c,null;var h=l.Node.createIdentifierExpression(e.readIdentifier(),e.range(e.tokenPos,e.pos));if(e.skip(s.Token.QUESTION)&&(c=!0,e.discard(r),p==l.ParameterKind.REST?this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):p=l.ParameterKind.OPTIONAL),e.skip(s.Token.COLON)){c=!0,e.discard(r);var d=this.parseType(e);if(!d)return this.tryParseSignatureIsSignature=c,null;var _=new l.ParameterNode;_.parameterKind=p,_.name=h,_.type=d,i?i.push(_):i=[_]}else c&&this.error(o.DiagnosticCode.Type_expected,e.range())}}while(e.skip(s.Token.COMMA));if(!e.skip(s.Token.CLOSEPAREN))return c?this.error(o.DiagnosticCode._0_expected,e.range(),")"):e.reset(r),this.tryParseSignatureIsSignature=c,null}return e.skip(s.Token.EQUALS_GREATERTHAN)?(c=!0,e.discard(r),(t=this.parseType(e))?(this.tryParseSignatureIsSignature=!0,l.Node.createSignature(i||[],t,a,!1,e.range(n,e.pos))):(this.tryParseSignatureIsSignature=c,null)):(c?this.error(o.DiagnosticCode._0_expected,e.range(),"=>"):e.reset(r),this.tryParseSignatureIsSignature=c,null)},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skipIdentifier()){for(var r=e.readIdentifier(),n=l.Node.createIdentifierExpression(r,e.range(t,e.pos));e.skip(s.Token.DOT);){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;r=e.readIdentifier(),n=l.Node.createPropertyAccessExpression(n,l.Node.createIdentifierExpression(r,e.range()),e.range(t,e.pos))}var i=void 0;if(!e.skip(s.Token.OPENPAREN))return l.Node.createDecorator(n,null,e.range(t,e.pos));if(i=this.parseArguments(e))return l.Node.createDecorator(n,i,e.range(t,e.pos))}else this.error(o.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r,n){var i=new Array;do{var a=this.parseVariableDeclaration(e,t,r);if(!a)return null;i.push(a)}while(e.skip(s.Token.COMMA));var o=l.Node.createVariableStatement(i,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),o},t.prototype.parseVariableDeclaration=function(e,t,r){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var n=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=t,c=null;e.skip(s.Token.COLON)&&(c=this.parseType(e));var p=null;if(e.skip(s.Token.EQUALS)){if(a&i.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,e.range()),!(p=this.parseExpression(e,2)))return null}else a&i.CommonFlags.CONST?a&i.CommonFlags.AMBIENT||this.error(o.DiagnosticCode._const_declarations_must_be_initialized,n.range):c||this.error(o.DiagnosticCode.Type_expected,e.range(e.pos));return l.Node.createVariableDeclaration(n,c,p,r,a,s.Range.join(n.range,e.range()))},t.prototype.parseEnum=function(e,t,r,n){if(e.next()!=s.Token.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var a=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.next()!=s.Token.OPENBRACE)return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;for(var c=new Array;!e.skip(s.Token.CLOSEBRACE);){var p=this.parseEnumValue(e,i.CommonFlags.NONE);if(!p)return null;if(c.push(p),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEBRACE))break;return this.error(o.DiagnosticCode._0_expected,e.range(),"}"),null}}var u=l.Node.createEnumDeclaration(a,c,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),u},t.prototype.parseEnumValue=function(e,t){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var r=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),n=null;return e.skip(s.Token.EQUALS)&&!(n=this.parseExpression(e,2))?null:l.Node.createEnumValueDeclaration(r,n,t,s.Range.join(r.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=s.Token.SEMICOLON&&e.nextToken!=s.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=l.Node.createReturnStatement(t,e.range());return e.skip(s.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){for(var t=new Array;!e.skip(s.Token.GREATERTHAN);){var r=this.parseTypeParameter(e);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.GREATERTHAN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),">"),null}}return 0===t.length&&this.error(o.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range()),t},t.prototype.parseTypeParameter=function(e){if(e.next()==s.Token.IDENTIFIER){var t=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(s.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=l.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return l.Node.createTypeParameter(t,r,s.Range.join(t.range,e.range()))}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e,t){void 0===t&&(t=!1);var r=new Array,n=null,i=!1,a=!1,c=null;if(this.parseParametersThis=null,e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;if(!(c=this.parseType(e)))return null;if(c.kind==l.NodeKind.TYPE?this.parseParametersThis=c:this.error(o.DiagnosticCode.Operation_not_supported,c.range),!e.skip(s.Token.COMMA))return e.skip(s.Token.CLOSEPAREN)?r:(this.error(o.DiagnosticCode._0_expected,e.range(),")"),null)}for(;!e.skip(s.Token.CLOSEPAREN);){var p=this.parseParameter(e,t);if(!p)return null;switch(n&&!a&&(this.error(o.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,n.name.range),a=!0),p.parameterKind){default:i&&this.error(o.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,p.name.range);break;case l.ParameterKind.OPTIONAL:i=!0;break;case l.ParameterKind.REST:n=p}if(r.push(p),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return r},t.prototype.parseParameter=function(e,t){void 0===t&&(t=!1);var r=!1,n=!1,a=null,c=i.CommonFlags.NONE;if(t&&(e.skip(s.Token.PUBLIC)?(a=e.range(),c|=i.CommonFlags.PUBLIC):e.skip(s.Token.PROTECTED)?(a=e.range(),c|=i.CommonFlags.PROTECTED):e.skip(s.Token.PRIVATE)&&(a=e.range(),c|=i.CommonFlags.PRIVATE),e.peek()==s.Token.READONLY)){var p=e.mark();e.next(),e.peek()!=s.Token.COLON?(e.discard(p),a||(a=e.range()),c|=i.CommonFlags.READONLY):e.reset(p)}if(e.skip(s.Token.DOT_DOT_DOT)&&(c?this.error(o.DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,e.range()):a=e.range(),r=!0),e.skipIdentifier()){r||(a=e.range());var u=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),h=null;if((n=e.skip(s.Token.QUESTION))&&r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,u.range),e.skip(s.Token.COLON)){if(!(h=this.parseType(e)))return null}else h=l.Node.createOmittedType(e.range(e.pos));var d=null;if(e.skip(s.Token.EQUALS)&&(r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,u.range),n?this.error(o.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,u.range):n=!0,!(d=this.parseExpression(e,2))))return null;var _=l.Node.createParameter(u,h,d,r?l.ParameterKind.REST:n?l.ParameterKind.OPTIONAL:l.ParameterKind.DEFAULT,s.Range.join(a,e.range()));return _.flags|=c,_}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseFunction=function(e,t,r,n){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range(e.pos)),null;var a=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=-1,p=null;if(e.skip(s.Token.LESSTHAN)){if(c=e.tokenPos,!(p=this.parseTypeParameters(e)))return null;t|=i.CommonFlags.GENERIC}if(!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null;c<0&&(c=e.tokenPos);var u=this.parseParameters(e);if(!u)return null;var h=this.parseParametersThis,d=0!=(t&i.CommonFlags.SET);d&&(1!=u.length&&this.error(o.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,a.range),u.length&&u[0].initializer&&this.error(o.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,a.range)),t&i.CommonFlags.GET&&u.length&&this.error(o.DiagnosticCode.A_get_accessor_cannot_have_parameters,a.range);var _=null;if(e.skip(s.Token.COLON)&&!(_=this.parseType(e,!0,d)))return null;_||(_=l.Node.createOmittedType(e.range(e.pos)),d||this.error(o.DiagnosticCode.Type_expected,_.range));var m=l.Node.createSignature(u,_,h,!1,e.range(c,e.pos)),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=l.Node.createFunctionDeclaration(a,p,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()?l.Node.createIdentifierExpression(e.readIdentifier(),e.range()):l.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==s.Token.OPENPAREN),t=l.Node.createEmptyIdentifierExpression(e.range(e.tokenPos));var i=e.pos,a=this.parseParameters(e);return a?this.parseFunctionExpressionCommon(e,t,a,n,r,i):null},t.prototype.parseFunctionExpressionCommon=function(e,t,r,n,a,c){void 0===a&&(a=-1),void 0===c&&(c=-1),a<0&&(a=t.range.start),c<0&&(c=a);var p=null;if(e.skip(s.Token.COLON)){if(!(p=this.parseType(e)))return null}else p=l.Node.createOmittedType(e.range(e.pos)),this.error(o.DiagnosticCode.Type_expected,p.range);if(n&&!e.skip(s.Token.EQUALS_GREATERTHAN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var u,h=l.Node.createSignature(r,p,null,!1,e.range(c,e.pos));if(n)u=this.parseStatement(e,!1);else{if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;u=this.parseBlockStatement(e,!1)}if(!u)return null;var d=l.Node.createFunctionDeclaration(t,null,h,u,null,n?i.CommonFlags.ARROW:i.CommonFlags.NONE,e.range(a,e.pos));return l.Node.createFunctionExpression(d)},t.prototype.parseClassOrInterface=function(e,t,r,n){var a=e.token==s.Token.INTERFACE;if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var c,p=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(s.Token.LESSTHAN)){if(!(c=this.parseTypeParameters(e)))return null;t|=i.CommonFlags.GENERIC}else c=[];var u=null;if(e.skip(s.Token.EXTENDS)){var h=this.parseType(e);if(!h)return null;if(h.kind!=l.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,h.range),null;u=h}var d=null;if(e.skip(s.Token.IMPLEMENTS)){a&&this.error(o.DiagnosticCode.Interface_declaration_cannot_have_implements_clause,e.range());do{var _=this.parseType(e);if(!_)return null;a||(d||(d=[]),d.push(_))}while(e.skip(s.Token.COMMA))}if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;var m,y=new Array;if(a?(assert(!d),m=l.Node.createInterfaceDeclaration(p,c,u,y,r,t,e.range(n,e.pos))):m=l.Node.createClassDeclaration(p,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()?l.Node.createIdentifierExpression(e.readIdentifier(),e.range()):l.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;var n=new Array,a=l.Node.createClassDeclaration(t,[],null,null,n,null,i.CommonFlags.NONE,e.range(r,e.pos));if(!e.skip(s.Token.CLOSEBRACE))do{var c=this.parseClassMember(e,a);if(!c)return null;c.parent=a,n.push(c)}while(!e.skip(s.Token.CLOSEBRACE));return l.Node.createClassExpression(a)},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=t.kind==l.NodeKind.INTERFACEDECLARATION,a=new Array;e.skip(s.Token.AT);){var c=this.parseDecorator(e);if(!c)break;n&&this.error(o.DiagnosticCode.Decorators_are_not_valid_here,c.range),a.push(c)}var p=t.flags&i.CommonFlags.AMBIENT;n&&(p|=i.CommonFlags.VIRTUAL),e.skip(s.Token.PUBLIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"public"),p|=i.CommonFlags.PUBLIC):e.skip(s.Token.PRIVATE)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"private"),p|=i.CommonFlags.PRIVATE):e.skip(s.Token.PROTECTED)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"protected"),p|=i.CommonFlags.PROTECTED);var u=0,h=0,d=0,_=0;e.skip(s.Token.STATIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"static"),p|=i.CommonFlags.STATIC,u=e.tokenPos,h=e.pos):(p|=i.CommonFlags.INSTANCE,e.skip(s.Token.ABSTRACT)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"abstract"),p|=i.CommonFlags.ABSTRACT,d=e.tokenPos,_=e.pos),t.flags&i.CommonFlags.GENERIC&&(p|=i.CommonFlags.GENERIC_CONTEXT));var m=0,y=0;e.skip(s.Token.READONLY)&&(p|=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):(p|=i.CommonFlags.GET,T=!0,I=e.tokenPos,v=e.pos,p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly")):e.skip(s.Token.SET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(g):(p|=i.CommonFlags.SET|i.CommonFlags.SET,f=!0,I=e.tokenPos,v=e.pos,p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly")):e.skip(s.Token.CONSTRUCTOR)&&(E=!0,(p|=i.CommonFlags.CONSTRUCTOR)&i.CommonFlags.STATIC&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(u,h),"static"),p&i.CommonFlags.ABSTRACT&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(d,_),"abstract"),p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly"))),!E&&!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var A=E?l.Node.createConstructorExpression(e.range()):l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),C=null;if(e.skip(s.Token.LESSTHAN)){var N=e.tokenPos;if(!(C=this.parseTypeParameters(e)))return null;E?this.error(o.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range(N,e.pos)):T||f?this.error(o.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(N,e.pos)):p|=i.CommonFlags.GENERIC}if(e.skip(s.Token.OPENPAREN)){var O=e.tokenPos,S=this.parseParameters(e,E);if(!S)return null;var L=this.parseParametersThis;if(E)for(var b=0,k=S.length;b"),null):null;case s.Token.IDENTIFIER:return l.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case s.Token.THIS:return l.Node.createThisExpression(e.range(r,e.pos));case s.Token.CONSTRUCTOR:return l.Node.createConstructorExpression(e.range(r,e.pos));case s.Token.SUPER:return l.Node.createSuperExpression(e.range(r,e.pos));case s.Token.STRINGLITERAL:return l.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case s.Token.INTEGERLITERAL:return l.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case s.Token.FLOATLITERAL:return l.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case s.Token.SLASH:var T=e.readRegexpPattern();return e.skip(s.Token.SLASH)?l.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(l.nodeIsCallable(r.kind))for(var a=null;e.skip(s.Token.OPENPAREN)||l.nodeIsGenericCallable(r.kind)&&null!==(a=this.tryParseTypeArgumentsBeforeArguments(e));){var c=this.parseArguments(e);if(!c)return null;r=l.Node.createCallExpression(r,a,c,e.range(i,e.pos))}for(var p,d=null;(p=u(n=e.peek()))>=t;)switch(e.next(),n){case s.Token.AS:var _=this.parseType(e);if(!_)return null;r=l.Node.createAssertionExpression(l.AssertionKind.AS,r,_,e.range(i,e.pos));break;case s.Token.INSTANCEOF:var m=this.parseType(e);if(!m)return null;r=l.Node.createInstanceOfExpression(r,m,e.range(i,e.pos));break;case s.Token.OPENBRACKET:if(!(d=this.parseExpression(e)))return null;if(!e.skip(s.Token.CLOSEBRACKET))return this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;r=l.Node.createElementAccessExpression(r,d,e.range(i,e.pos));break;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:r.kind!=l.NodeKind.IDENTIFIER&&r.kind!=l.NodeKind.ELEMENTACCESS&&r.kind!=l.NodeKind.PROPERTYACCESS&&this.error(o.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,r.range),r=l.Node.createUnaryPostfixExpression(n,r,e.range(i,e.pos));break;case s.Token.QUESTION:var 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=l.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=l.Node.createCommaExpression(E,e.range(i,e.pos));break;default:if(!(d=this.parseExpression(e,h(n)?p:p+1)))return null;if(n==s.Token.DOT)if(d.kind==l.NodeKind.IDENTIFIER)r=l.Node.createPropertyAccessExpression(r,d,e.range(i,e.pos));else{if(d.kind!=l.NodeKind.CALL)return this.error(o.DiagnosticCode.Identifier_expected,d.range),null;var T=d;if(T.expression.kind!=l.NodeKind.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,T.expression.range),null;T.expression=l.Node.createPropertyAccessExpression(r,T.expression,e.range(i,e.pos)),r=T}else r=l.Node.createBinaryExpression(n,r,d,e.range(i,e.pos))}return r},t.prototype.skipStatement=function(e){for(e.peek(!0),e.nextTokenOnNewLine&&e.next();;){var t=e.peek(!0);if(t==s.Token.ENDOFFILE||t==s.Token.SEMICOLON){e.next();break}if(e.nextTokenOnNewLine)break;switch(e.next()){case s.Token.IDENTIFIER:e.readIdentifier();break;case s.Token.STRINGLITERAL:e.readString();break;case s.Token.INTEGERLITERAL:e.readInteger();break;case s.Token.FLOATLITERAL:e.readFloat()}}},t.prototype.skipBlock=function(e){var t=1,r=!0;do{switch(e.next()){case s.Token.ENDOFFILE:this.error(o.DiagnosticCode._0_expected,e.range(),"}"),r=!1;break;case s.Token.OPENBRACE:++t;break;case s.Token.CLOSEBRACE:--t||(r=!1);break;case s.Token.IDENTIFIER:e.readIdentifier();break;case s.Token.STRINGLITERAL:e.readString();break;case s.Token.INTEGERLITERAL:e.readInteger();break;case s.Token.FLOATLITERAL:e.readFloat()}}while(r)},t}(o.DiagnosticEmitter);function u(e){switch(e){case s.Token.COMMA:return 1;case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:return 4;case s.Token.QUESTION:return 5;case s.Token.BAR_BAR:return 6;case s.Token.AMPERSAND_AMPERSAND:return 7;case s.Token.BAR:return 8;case s.Token.CARET:return 9;case s.Token.AMPERSAND:return 10;case s.Token.EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS:case s.Token.EQUALS_EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS_EQUALS:return 11;case s.Token.AS:case s.Token.IN:case s.Token.INSTANCEOF:case s.Token.LESSTHAN:case s.Token.GREATERTHAN:case s.Token.LESSTHAN_EQUALS:case s.Token.GREATERTHAN_EQUALS:return 12;case s.Token.LESSTHAN_LESSTHAN:case s.Token.GREATERTHAN_GREATERTHAN:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 13;case s.Token.PLUS:case s.Token.MINUS:return 14;case s.Token.ASTERISK:case s.Token.SLASH:case s.Token.PERCENT:return 15;case s.Token.ASTERISK_ASTERISK:return 16;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:return 18;case s.Token.DOT:case s.Token.NEW:case s.Token.OPENBRACKET:return 20}return 0}function h(e){switch(e){case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:case s.Token.QUESTION:case s.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=p,function(e){e[e.NONE=0]="NONE",e[e.COMMA=1]="COMMA",e[e.SPREAD=2]="SPREAD",e[e.YIELD=3]="YIELD",e[e.ASSIGNMENT=4]="ASSIGNMENT",e[e.CONDITIONAL=5]="CONDITIONAL",e[e.LOGICAL_OR=6]="LOGICAL_OR",e[e.LOGICAL_AND=7]="LOGICAL_AND",e[e.BITWISE_OR=8]="BITWISE_OR",e[e.BITWISE_XOR=9]="BITWISE_XOR",e[e.BITWISE_AND=10]="BITWISE_AND",e[e.EQUALITY=11]="EQUALITY",e[e.RELATIONAL=12]="RELATIONAL",e[e.SHIFT=13]="SHIFT",e[e.ADDITIVE=14]="ADDITIVE",e[e.MULTIPLICATIVE=15]="MULTIPLICATIVE",e[e.EXPONENTIATED=16]="EXPONENTIATED",e[e.UNARY_PREFIX=17]="UNARY_PREFIX",e[e.UNARY_POSTFIX=18]="UNARY_POSTFIX",e[e.CALL=19]="CALL",e[e.MEMBERACCESS=20]="MEMBERACCESS",e[e.GROUPING=21]="GROUPING"}(t.Precedence||(t.Precedence={}))},function(e,t,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),l=function(){function e(e,t){void 0===t&&(t=!1),this.todo=[],this.seen=new Set,this.program=e,this.includePrivate}return e.prototype.walk=function(){var e,t;try{for(var r=i(this.program.moduleLevelExports.values()),n=r.next();!n.done;n=r.next()){var a=n.value;this.visitElement(a.element)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}for(var s=this.todo;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("memory.size()");case n.HostOp.GrowMemory:return this.push("memory.grow("),this.decompileExpression(n.getHostOperand(e,0)),void this.push(")")}break;case n.ExpressionId.Nop:return void this.push(";\n");case n.ExpressionId.Unreachable:return void this.push("unreachable()");case n.ExpressionId.AtomicCmpxchg:case n.ExpressionId.AtomicRMW:case n.ExpressionId.AtomicWait:case n.ExpressionId.AtomicWake:}throw new Error("not implemented")},e.prototype.push=function(e){this.text.push(e)},e.prototype.finish=function(){var e=this.text.join("");return this.text=[],e},e}();function a(e){switch(e){case 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(11),i=r(14),a=r(13),s=r(1);t.formatDiagnostic=s.formatDiagnosticMessage;var o=r(12);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>>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(e=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(1),a=r(2),s=r(6),o=r(4),c=r(5),l=r(9),p=r(0);function u(e,t,r,n,p,u){var y,g,E,T,f=e.module;switch(t.internalName){case"isInteger":var I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(4)&&!I.is(256)?f.createI32(1):f.createI32(0):f.createUnreachable();case"isFloat":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(8)?f.createI32(1):f.createI32(0):f.createUnreachable();case"isSigned":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(1)?f.createI32(1):f.createI32(0):f.createUnreachable();case"isReference":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?(e.currentType=s.Type.bool,I.is(256)?f.createI32(1):f.createI32(0)):f.createUnreachable();case"isString":I=d(e,r,n,u);if(e.currentType=s.Type.bool,!I)return f.createUnreachable();if(R=I.classReference){var v=e.program.stringInstance;if(v&&R.isAssignableTo(v))return f.createI32(1)}return f.createI32(0);case"isArray":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?null!=(R=I.classReference)&&null!=R.lookupOverload(c.OperatorKind.INDEXED_GET)?f.createI32(1):f.createI32(0):f.createUnreachable();case"isDefined":if(e.currentType=s.Type.bool,r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();var A=e.resolver.resolveExpression(n[0],e.currentFunction,l.ReportMode.SWALLOW);return f.createI32(A?1:0);case"isConstant":if(e.currentType=s.Type.bool,r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();var C=e.compileExpressionRetainType(n[0],s.Type.i32,0);return e.currentType=s.Type.bool,f.createI32(o.getExpressionId(C)==o.ExpressionId.Const?1:0);case"clz":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,1)}else y=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:T=f.createUnary(o.UnaryOp.ClzI32,y);break;case 10:case 2:case 7:T=f.createUnary(o.UnaryOp.ClzI32,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}case 4:T=f.createUnary(e.options.isWasm64?o.UnaryOp.ClzI64:o.UnaryOp.ClzI32,y);break;case 3:case 8:T=f.createUnary(o.UnaryOp.ClzI64,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"ctz":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],0,1)}else y=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:T=f.createUnary(o.UnaryOp.CtzI32,y);break;case 10:case 2:case 7:T=f.createUnary(o.UnaryOp.CtzI32,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}case 4:T=f.createUnary(e.options.isWasm64?o.UnaryOp.CtzI64:o.UnaryOp.CtzI32,y);break;case 3:case 8:T=f.createUnary(o.UnaryOp.CtzI64,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"popcnt":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,1)}else y=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:T=f.createUnary(o.UnaryOp.PopcntI32,y);break;case 10:case 2:case 7:T=f.createUnary(o.UnaryOp.PopcntI32,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}case 4:T=f.createUnary(e.options.isWasm64?o.UnaryOp.PopcntI64:o.UnaryOp.PopcntI32,y);break;case 3:case 8:T=f.createUnary(o.UnaryOp.PopcntI64,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"rotl":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,1)}else y=e.compileExpression(n[0],s.Type.i32,0,1);switch(g=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=e.ensureSmallIntegerWrap(f.createBinary(o.BinaryOp.RotlI32,y,g),e.currentType);case 2:case 7:T=f.createBinary(o.BinaryOp.RotlI32,y,g);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}case 4:T=f.createBinary(e.options.isWasm64?o.BinaryOp.RotlI64:o.BinaryOp.RotlI32,y,g);break;case 3:case 8:T=f.createBinary(o.BinaryOp.RotlI64,y,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"rotr":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,1)}else y=e.compileExpression(n[0],s.Type.i32,0,1);switch(g=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=e.ensureSmallIntegerWrap(f.createBinary(o.BinaryOp.RotrI32,y,g),e.currentType);break;case 2:case 7:T=f.createBinary(o.BinaryOp.RotrI32,y,g);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}case 4:T=f.createBinary(e.options.isWasm64?o.BinaryOp.RotrI64:o.BinaryOp.RotrI32,y,g);break;case 3:case 8:T=f.createBinary(o.BinaryOp.RotrI64,y,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"abs":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,1)}else y=e.compileExpression(n[0],s.Type.f64,0,1);switch(e.currentType.kind){case 0:case 1:case 2:var N=e.currentFunction.getAndFreeTempLocal(s.Type.i32,!1);T=f.createSelect(f.createTeeLocal(N.index,y),f.createBinary(o.BinaryOp.SubI32,f.createI32(0),f.createGetLocal(N.index,o.NativeType.I32)),f.createBinary(o.BinaryOp.GtI32,f.createGetLocal(N.index,o.NativeType.I32),f.createI32(0)));break;case 4:N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);T=f.createSelect(f.createTeeLocal(N.index,y),f.createBinary(e.options.isWasm64?o.BinaryOp.SubI64:o.BinaryOp.SubI32,e.options.usizeType.toNativeZero(f),f.createGetLocal(N.index,e.options.nativeSizeType)),f.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,f.createGetLocal(N.index,e.options.nativeSizeType),e.options.usizeType.toNativeZero(f)));break;case 3:N=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);T=f.createSelect(f.createTeeLocal(N.index,y),f.createBinary(o.BinaryOp.SubI64,f.createI64(0,0),f.createGetLocal(N.index,o.NativeType.I64)),f.createBinary(o.BinaryOp.GtI64,f.createGetLocal(N.index,o.NativeType.I64),f.createI64(0,0)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}case 5:case 6:case 7:case 8:case 10:T=y;break;case 11:T=f.createUnary(o.UnaryOp.AbsF32,y);break;case 12:T=f.createUnary(o.UnaryOp.AbsF64,y);break;case 13:T=f.createUnreachable();break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"max":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,1)}else y=e.compileExpression(n[0],s.Type.f64,0,1);switch(g=e.compileExpression(n[1],e.currentType,1,1),e.currentType.kind){case 0:case 1:case 2:var O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(y,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(g,e.currentType));e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(o.BinaryOp.GtI32,f.createGetLocal(S.index,o.NativeType.I32),f.createGetLocal(L.index,o.NativeType.I32)));break;case 5:case 6:case 7:case 10:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(y,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(g,e.currentType));e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(o.BinaryOp.GtU32,f.createGetLocal(S.index,o.NativeType.I32),f.createGetLocal(L.index,o.NativeType.I32)));break;case 3:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(o.BinaryOp.GtI64,f.createGetLocal(S.index,o.NativeType.I64),f.createGetLocal(L.index,o.NativeType.I64)));break;case 8:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(o.BinaryOp.GtU64,f.createGetLocal(S.index,o.NativeType.I64),f.createGetLocal(L.index,o.NativeType.I64)));break;case 4:S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,f.createGetLocal(S.index,e.options.nativeSizeType),f.createGetLocal(L.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(e.options.isWasm64?o.BinaryOp.GtU64:o.BinaryOp.GtU32,f.createGetLocal(S.index,e.options.nativeSizeType),f.createGetLocal(L.index,e.options.nativeSizeType)));break;case 11:T=f.createBinary(o.BinaryOp.MaxF32,y,g);break;case 12:T=f.createBinary(o.BinaryOp.MaxF64,y,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"min":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,1)}else y=e.compileExpression(n[0],s.Type.f64,0,1);switch(g=e.compileExpression(n[1],e.currentType,1,1),e.currentType.kind){case 0:case 1:case 2:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(y,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(g,e.currentType));e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(o.BinaryOp.LtI32,f.createGetLocal(S.index,o.NativeType.I32),f.createGetLocal(L.index,o.NativeType.I32)));break;case 5:case 6:case 7:case 10:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(y,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(g,e.currentType));e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(o.BinaryOp.LtU32,f.createGetLocal(S.index,o.NativeType.I32),f.createGetLocal(L.index,o.NativeType.I32)));break;case 3:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(o.BinaryOp.LtI64,f.createGetLocal(S.index,o.NativeType.I64),f.createGetLocal(L.index,o.NativeType.I64)));break;case 8:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(o.BinaryOp.LtU64,f.createGetLocal(S.index,o.NativeType.I64),f.createGetLocal(L.index,o.NativeType.I64)));break;case 4:S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(e.options.isWasm64?o.BinaryOp.LtI64:o.BinaryOp.LtI32,f.createGetLocal(S.index,e.options.nativeSizeType),f.createGetLocal(L.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(e.options.isWasm64?o.BinaryOp.LtU64:o.BinaryOp.LtU32,f.createGetLocal(S.index,e.options.nativeSizeType),f.createGetLocal(L.index,e.options.nativeSizeType)));break;case 11:T=f.createBinary(o.BinaryOp.MinF32,y,g);break;case 12:T=f.createBinary(o.BinaryOp.MinF64,y,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"ceil":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,0)}else y=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}default:T=y;break;case 11:T=f.createUnary(o.UnaryOp.CeilF32,y);break;case 12:T=f.createUnary(o.UnaryOp.CeilF64,y);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"floor":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,0)}else y=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}default:T=y;break;case 11:T=f.createUnary(o.UnaryOp.FloorF32,y);break;case 12:T=f.createUnary(o.UnaryOp.FloorF64,y);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"copysign":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,0)}else y=e.compileExpression(n[0],s.Type.f64,0,0);switch(g=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 11:T=f.createBinary(o.BinaryOp.CopysignF32,y,g);break;case 12:T=f.createBinary(o.BinaryOp.CopysignF64,y,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"nearest":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,0)}else y=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}default:T=y;break;case 11:T=f.createUnary(o.UnaryOp.NearestF32,y);break;case 12:T=f.createUnary(o.UnaryOp.NearestF64,y);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"reinterpret":if(1!=n.length)return r&&1==r.length||(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0")),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(!r||1!=r.length)return r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),f.createUnreachable();switch(r[0].kind){case 2:case 7:y=e.compileExpression(n[0],s.Type.f32,1,0),T=f.createUnary(o.UnaryOp.ReinterpretF32,y);break;case 3:case 8:y=e.compileExpression(n[0],s.Type.f64,1,0),T=f.createUnary(o.UnaryOp.ReinterpretF64,y);break;case 9:if(r[0].is(256))return e.error(i.DiagnosticCode.Operation_not_supported,u.range),e.currentType=r[0],f.createUnreachable();case 4:y=e.compileExpression(n[0],e.options.isWasm64?s.Type.f64:s.Type.f32,1,0),T=f.createUnary(e.options.isWasm64?o.UnaryOp.ReinterpretF64:o.UnaryOp.ReinterpretF32,y);break;case 11:y=e.compileExpression(n[0],s.Type.i32,1,0),T=f.createUnary(o.UnaryOp.ReinterpretI32,y);break;case 12:y=e.compileExpression(n[0],s.Type.i64,1,0),T=f.createUnary(o.UnaryOp.ReinterpretI64,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return e.currentType=r[0],T;case"sqrt":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,0)}else y=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 11:T=f.createUnary(o.UnaryOp.SqrtF32,y);break;case 12:T=f.createUnary(o.UnaryOp.SqrtF64,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"trunc":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r&&r.length){if(e.currentType=r[0],1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,0)}else y=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}default:T=y;break;case 11:T=f.createUnary(o.UnaryOp.TruncF32,y);break;case 12:T=f.createUnary(o.UnaryOp.TruncF64,y);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"load":return n.length<1||n.length>2?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),n.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),f.createUnreachable()):r&&1==r.length?(y=e.compileExpression(n[0],e.options.usizeType,1,0),(x=2==n.length?_(e,n[1]):0)<0?f.createUnreachable():(e.currentType=r[0],f.createLoad(r[0].byteSize,r[0].is(5),y,r[0].is(4)&&p.is(4)&&p.size>r[0].size?(e.currentType=p).toNativeType():(e.currentType=r[0]).toNativeType(),x))):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),f.createUnreachable());case"store":if(e.currentType=s.Type.void,n.length<2||n.length>3)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),n.length<2?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"2",n.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),f.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),f.createUnreachable();y=e.compileExpression(n[0],e.options.usizeType,1,0),g=e.compileExpression(n[1],r[0],r[0].is(4)?0:1,0);I=void 0;return r[0].is(4)&&(!e.currentType.is(4)||e.currentType.size1)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),f.createUnreachable();var R;if(!(R=r[0].classReference))return e.error(i.DiagnosticCode.Operation_not_supported,u.range),f.createUnreachable();var x=void 0;if(n.length){if(n[0].kind!=a.NodeKind.LITERAL||n[0].literalKind!=a.LiteralKind.STRING)return e.error(i.DiagnosticCode.String_literal_expected,n[0].range),f.createUnreachable();var F=n[0].value,D=R.members?R.members.get(F):null;if(!D||D.kind!=c.ElementKind.FIELD)return e.error(i.DiagnosticCode.Type_0_has_no_property_1,n[0].range,R.internalName,F),f.createUnreachable();x=D.memoryOffset}else x=R.currentMemoryOffset;return e.options.isWasm64?p.is(4)&&p.size<=32?(e.currentType=s.Type.u32,f.createI32(x)):f.createI64(x):p.is(4)&&64==p.size?(e.currentType=s.Type.u64,f.createI64(x)):f.createI32(x);case"select":if(3!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,0)}else y=e.compileExpressionRetainType(n[0],s.Type.i32,0);I=e.currentType;switch(g=e.compileExpression(n[1],I,1,0),E=e.makeIsTrueish(e.compileExpressionRetainType(n[2],s.Type.bool,0),e.currentType),e.currentType=I,e.currentType.kind){case 0:case 1:case 5:case 6:case 10:default:T=f.createSelect(y,g,E);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"unreachable":return 0!=n.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),f.createUnreachable();case"memory.size":return e.currentType=s.Type.i32,0!=n.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),f.createHost(o.HostOp.CurrentMemory);case"memory.grow":return e.currentType=s.Type.i32,1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),y=f.createUnreachable()):y=e.compileExpression(n[0],s.Type.i32,1,0),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),f.createHost(o.HostOp.GrowMemory,null,[y]);case"memory.copy":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),3!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),e.currentType=s.Type.void,f.createUnreachable();throw y=e.compileExpression(n[0],e.options.usizeType,1,0),g=e.compileExpression(n[1],e.options.usizeType,1,0),E=e.compileExpression(n[2],e.options.usizeType,1,0),e.currentType=s.Type.void,new Error("not implemented");case"memory.fill":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),3!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),e.currentType=s.Type.void,f.createUnreachable();throw y=e.compileExpression(n[0],e.options.usizeType,1,0),g=e.compileExpression(n[1],s.Type.u32,1,0),E=e.compileExpression(n[2],e.options.usizeType,1,0),e.currentType=s.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),e.currentType=r[0],f.createUnreachable()):(y=e.compileExpressionRetainType(n[0],r[0],0),e.currentType=r[0],e.currentType.size!=r[0].size?(e.error(i.DiagnosticCode.Operation_not_supported,u.range),f.createUnreachable()):y):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),f.createUnreachable());case"assert":if(n.length<1||n.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),n.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)):n.length>2&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),f.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,1)}else y=e.compileExpressionRetainType(n[0],s.Type.bool,1);I=e.currentType;if(e.currentType=I.nonNullableType,e.options.noAssert)return p==s.Type.void?(e.currentType=s.Type.void,f.createNop()):y;var B=m(e,2==n.length?n[1]:null,u);if(e.currentType=I.nonNullableType,p==s.Type.void){switch(e.currentType.kind){default:T=f.createIf(f.createUnary(o.UnaryOp.EqzI32,y),B);break;case 3:case 8:T=f.createIf(f.createUnary(o.UnaryOp.EqzI64,y),B);break;case 4:case 9:T=f.createIf(f.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,y),B);break;case 11:T=f.createIf(f.createBinary(o.BinaryOp.EqF32,y,f.createF32(0)),B);break;case 12:T=f.createIf(f.createBinary(o.BinaryOp.EqF64,y,f.createF64(0)),B);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=B}e.currentType=s.Type.void}else switch(e.currentType.kind){case 0:case 1:case 5:case 6:case 10:O=e.currentFunction.flow,N=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));T=f.createIf(f.createTeeLocal(N.index,y),f.createGetLocal(N.index,o.NativeType.I32),B);break;case 2:case 7:default:N=e.currentFunction.getAndFreeTempLocal(s.Type.i32,!1);T=f.createIf(f.createTeeLocal(N.index,y),f.createGetLocal(N.index,o.NativeType.I32),B);break;case 3:case 8:N=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);T=f.createIf(f.createUnary(o.UnaryOp.EqzI64,f.createTeeLocal(N.index,y)),B,f.createGetLocal(N.index,o.NativeType.I64));break;case 4:case 9:N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);T=f.createIf(f.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,f.createTeeLocal(N.index,y)),B,f.createGetLocal(N.index,e.options.nativeSizeType));break;case 11:N=e.currentFunction.getAndFreeTempLocal(s.Type.f32,!1);T=f.createIf(f.createBinary(o.BinaryOp.EqF32,f.createTeeLocal(N.index,y),f.createF32(0)),B,f.createGetLocal(N.index,o.NativeType.F32));break;case 12:N=e.currentFunction.getAndFreeTempLocal(s.Type.f64,!1);T=f.createIf(f.createBinary(o.BinaryOp.EqF64,f.createTeeLocal(N.index,y),f.createF64(0)),B,f.createGetLocal(N.index,o.NativeType.F64));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=B}return T;case"unchecked":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable()):((O=e.currentFunction.flow).set(4096),T=e.compileExpressionRetainType(n[0],p,0),O.unset(4096),T);case"call_indirect":if(n.length<1)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();var U=void 0;if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();U=r[0]}else U=p;if(y=e.compileExpressionRetainType(n[0],s.Type.u32,0),7!=e.currentType.kind)return e.error(i.DiagnosticCode.Operation_not_supported,n[0].range),f.createUnreachable();for(var P=n.length-1,w=new Array(P),M=new Array(P+1),G=U.toNativeType(),K=new Array(P),z=0;z void"),f.createUnreachable())}var Q=function(e,t,r,n,i){switch(t.internalName){case"i32.clz":return h("clz",e,s.Type.i32,r,s.Type.i32,i);case"i64.clz":return h("clz",e,s.Type.i64,r,s.Type.i64,i);case"i32.ctz":return h("ctz",e,s.Type.i32,r,s.Type.i32,i);case"i64.ctz":return h("ctz",e,s.Type.i64,r,s.Type.i64,i);case"i32.popcnt":return h("popcnt",e,s.Type.i32,r,s.Type.i32,i);case"i64.popcnt":return h("popcnt",e,s.Type.i64,r,s.Type.i64,i);case"i32.rotl":return h("rotl",e,s.Type.i32,r,s.Type.i32,i);case"i64.rotl":return h("rotl",e,s.Type.i64,r,s.Type.i64,i);case"i32.rotr":return h("rotr",e,s.Type.i32,r,s.Type.i32,i);case"i64.rotr":return h("rotr",e,s.Type.i64,r,s.Type.i64,i);case"f32.abs":return h("abs",e,s.Type.f32,r,s.Type.f32,i);case"f64.abs":return h("abs",e,s.Type.f64,r,s.Type.f64,i);case"f32.max":return h("max",e,s.Type.f32,r,s.Type.f32,i);case"f64.max":return h("max",e,s.Type.f64,r,s.Type.f64,i);case"f32.min":return h("min",e,s.Type.f32,r,s.Type.f32,i);case"f64.min":return h("min",e,s.Type.f64,r,s.Type.f64,i);case"f32.ceil":return h("ceil",e,s.Type.f32,r,s.Type.f32,i);case"f64.ceil":return h("ceil",e,s.Type.f64,r,s.Type.f64,i);case"f32.floor":return h("floor",e,s.Type.f32,r,s.Type.f32,i);case"f64.floor":return h("floor",e,s.Type.f64,r,s.Type.f64,i);case"f32.copysign":return h("copysign",e,s.Type.f32,r,s.Type.f32,i);case"f64.copysign":return h("copysign",e,s.Type.f64,r,s.Type.f64,i);case"f32.nearest":return h("nearest",e,s.Type.f32,r,s.Type.f32,i);case"f64.nearest":return h("nearest",e,s.Type.f64,r,s.Type.f64,i);case"i32.reinterpret_f32":return h("reinterpret",e,s.Type.i32,r,s.Type.f32,i);case"i64.reinterpret_f64":return h("reinterpret",e,s.Type.i64,r,s.Type.f64,i);case"f32.reinterpret_i32":return h("reinterpret",e,s.Type.f32,r,s.Type.i32,i);case"f64.reinterpret_i64":return h("reinterpret",e,s.Type.f64,r,s.Type.i64,i);case"f32.sqrt":return h("sqrt",e,s.Type.f32,r,s.Type.f32,i);case"f64.sqrt":return h("sqrt",e,s.Type.f64,r,s.Type.f64,i);case"f32.trunc":return h("trunc",e,s.Type.f32,r,s.Type.f32,i);case"f64.trunc":return h("trunc",e,s.Type.f64,r,s.Type.f64,i);case"i32.load8_s":return h("load",e,s.Type.i8,r,s.Type.i32,i);case"i32.load8_u":return h("load",e,s.Type.u8,r,s.Type.u32,i);case"i32.load16_s":return h("load",e,s.Type.i16,r,s.Type.i32,i);case"i32.load16_u":return h("load",e,s.Type.u16,r,s.Type.u32,i);case"i32.load":return h("load",e,s.Type.i32,r,s.Type.i32,i);case"i64.load8_s":return h("load",e,s.Type.i8,r,s.Type.i64,i);case"i64.load8_u":return h("load",e,s.Type.u8,r,s.Type.u64,i);case"i64.load16_s":return h("load",e,s.Type.i16,r,s.Type.i64,i);case"i64.load16_u":return h("load",e,s.Type.u16,r,s.Type.u64,i);case"i64.load32_s":return h("load",e,s.Type.i32,r,s.Type.i64,i);case"i64.load32_u":return h("load",e,s.Type.u32,r,s.Type.u64,i);case"i64.load":return h("load",e,s.Type.i64,r,s.Type.i64,i);case"f32.load":return h("load",e,s.Type.f32,r,s.Type.f32,i);case"f64.load":return h("load",e,s.Type.f64,r,s.Type.f64,i);case"i32.store8":return h("store",e,s.Type.i8,r,s.Type.i32,i);case"i32.store16":return h("store",e,s.Type.i16,r,s.Type.i32,i);case"i32.store":return h("store",e,s.Type.i32,r,s.Type.i32,i);case"i64.store8":return h("store",e,s.Type.i8,r,s.Type.i64,i);case"i64.store16":return h("store",e,s.Type.i16,r,s.Type.i64,i);case"i64.store32":return h("store",e,s.Type.i32,r,s.Type.i64,i);case"i64.store":return h("store",e,s.Type.i64,r,s.Type.i64,i);case"f32.store":return h("store",e,s.Type.f32,r,s.Type.f32,i);case"f64.store":return h("store",e,s.Type.f64,r,s.Type.f64,i)}return 0}(e,t,n,0,u);return Q?(r&&r.length&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),Q):(e.error(i.DiagnosticCode.Operation_not_supported,u.range),f.createUnreachable())}function h(e,t,r,n,i,a){var s=assert(t.program.elementsLookup.get(e));return assert(s.kind==c.ElementKind.FUNCTION_PROTOTYPE),u(t,s,[r],n,i,a)}function d(e,t,r,n){if(0==r.length)return t&&1==t.length?t[0]:(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t?t.length.toString(10):"0"),null);if(1==r.length){if(t)if(1==t.length)e.compileExpression(r[0],t[0],1,0);else{if(t.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t.length.toString(10)),null;e.compileExpressionRetainType(r[0],s.Type.i32,0)}else e.compileExpressionRetainType(r[0],s.Type.i32,0);return e.currentType}return t&&t.length>1&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,"1",r.length.toString(10)),null}function _(e,t){var r,n;return e.options.isWasm64?(r=e.precomputeExpression(t,s.Type.usize64,1,0),(o.getExpressionId(r)!=o.ExpressionId.Const||o.getExpressionType(r)!=o.NativeType.I64||0!=o.getConstValueI64High(r)||(n=o.getConstValueI64Low(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)):(r=e.precomputeExpression(t,s.Type.usize32,1,0),(o.getExpressionId(r)!=o.ExpressionId.Const||o.getExpressionType(r)!=o.NativeType.I32||(n=o.getConstValueI32(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)),n}function m(e,t,r){var n=e.program,i=e.module,a=n.typesLookup.get("string");if(!a)return i.createUnreachable();var c=n.abortInstance;if(!c||!e.compileFunction(c))return i.createUnreachable();var l=null!=t?e.compileExpression(t,a,1,0):a.toNativeZero(i),p=e.compileStaticString(r.range.source.normalizedPath);return e.currentType=s.Type.void,i.createBlock(null,[i.createCallImport(c.internalName,[l,p,i.createI32(r.range.line),i.createI32(r.range.column)],o.NativeType.None),i.createUnreachable()])}t.compileCall=u,t.compileAllocate=function(e,t,r){var n=e.program;assert(t.program==n);var a=e.module,s=e.options,o=n.memoryAllocateInstance;return o?e.compileFunction(o)?(e.currentType=t.type,a.createCall(o.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],s.nativeSizeType)):a.createUnreachable():(n.error(i.DiagnosticCode.Cannot_find_name_0,r.range,"memory.allocate"),a.createUnreachable())},t.compileAbort=m,t.compileIterateRoots=function(e){var t,r,i=e.module,a=new Array;try{for(var l=n(e.program.elementsLookup.values()),u=l.next();!u.done;u=l.next()){var h=u.value;if(h.kind==c.ElementKind.GLOBAL){var d=h,_=d.type.classReference;if(d.is(p.CommonFlags.COMPILED)&&null!==_&&!_.hasDecorator(c.DecoratorFlags.UNMANAGED))if(d.is(p.CommonFlags.INLINED)){var m=d.constantIntegerValue;a.push(i.createCallIndirect(i.createGetLocal(0,o.NativeType.I32),[e.options.isWasm64?i.createI64(i64_low(m),i64_high(m)):i.createI32(i64_low(m))],"iv"))}else a.push(i.createCallIndirect(i.createGetLocal(0,o.NativeType.I32),[i.createGetGlobal(d.internalName,e.options.nativeSizeType)],"iv"))}}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=l.return)&&r.call(l)}finally{if(t)throw t.error}}var y=e.ensureFunctionType([s.Type.i32],s.Type.void);i.addFunction("~iterateRoots",y,[],a.length?i.createBlock(null,a):i.createNop())}},function(e,t){e.exports=n;var r=null;try{r=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(e){}function n(e,t,r){this.low=0|e,this.high=0|t,this.unsigned=!!r}function i(e){return!0===(e&&e.__isLong__)}n.prototype.__isLong__,Object.defineProperty(n.prototype,"__isLong__",{value:!0}),n.isLong=i;var a={},s={};function o(e,t){var r,n,i;return t?(i=0<=(e>>>=0)&&e<256)&&(n=s[e])?n:(r=l(e,(0|e)<0?-1:0,!0),i&&(s[e]=r),r):(i=-128<=(e|=0)&&e<128)&&(n=a[e])?n:(r=l(e,e<0?-1:0,!1),i&&(a[e]=r),r)}function c(e,t){if(isNaN(e))return t?E: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():l(e%d|0,e/d|0,t)}function l(e,t,r){return new n(e,t,r)}n.fromInt=o,n.fromNumber=c,n.fromBits=l;var p=Math.pow;function u(e,t,r){if(0===e.length)throw Error("empty string");if("NaN"===e||"Infinity"===e||"+Infinity"===e||"-Infinity"===e)return 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(p(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 l+s;for(;l.length<6;)l="0"+l;s=""+l+s}},N.getHighBits=function(){return this.high},N.getHighBitsUnsigned=function(){return this.high>>>0},N.getLowBits=function(){return this.low},N.getLowBitsUnsigned=function(){return this.low>>>0},N.getNumBitsAbs=function(){if(this.isNegative())return this.eq(C)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&0==(e&1<=0},N.isOdd=function(){return 1==(1&this.low)},N.isEven=function(){return 0==(1&this.low)},N.equals=function(e){return i(e)||(e=h(e)),(this.unsigned===e.unsigned||this.high>>>31!=1||e.high>>>31!=1)&&(this.high===e.high&&this.low===e.low)},N.eq=N.equals,N.notEquals=function(e){return!this.eq(e)},N.neq=N.notEquals,N.ne=N.notEquals,N.lessThan=function(e){return this.comp(e)<0},N.lt=N.lessThan,N.lessThanOrEqual=function(e){return this.comp(e)<=0},N.lte=N.lessThanOrEqual,N.le=N.lessThanOrEqual,N.greaterThan=function(e){return this.comp(e)>0},N.gt=N.greaterThan,N.greaterThanOrEqual=function(e){return this.comp(e)>=0},N.gte=N.greaterThanOrEqual,N.ge=N.greaterThanOrEqual,N.compare=function(e){if(i(e)||(e=h(e)),this.eq(e))return 0;var t=this.isNegative(),r=e.isNegative();return t&&!r?-1:!t&&r?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1},N.comp=N.compare,N.negate=function(){return!this.unsigned&&this.eq(C)?C:this.not().add(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,p=0,u=0,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,u+=(d+=n+c)>>>16,p+=(u+=r+o)>>>16,p+=t+s,l((d&=65535)<<16|(_&=65535),(p&=65535)<<16|(u&=65535),this.unsigned)},N.subtract=function(e){return i(e)||(e=h(e)),this.add(e.neg())},N.sub=N.subtract,N.multiply=function(e){if(this.isZero())return g;if(i(e)||(e=h(e)),r)return l(r.mul(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned);if(e.isZero())return 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,p=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*p)>>>16,_+=t*d+n*u+a*p+s*o,l((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?l((this.unsigned?r.div_u:r.div_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?E: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:p(2,s-48),u=c(t),d=u.mul(e);d.isNegative()||d.gt(n);)d=(u=c(t-=o,this.unsigned)).mul(e);u.isZero()&&(u=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?l((this.unsigned?r.rem_u:r.rem_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this.sub(this.div(e).mul(e))},N.mod=N.modulo,N.rem=N.modulo,N.not=function(){return l(~this.low,~this.high,this.unsigned)},N.and=function(e){return i(e)||(e=h(e)),l(this.low&e.low,this.high&e.high,this.unsigned)},N.or=function(e){return i(e)||(e=h(e)),l(this.low|e.low,this.high|e.high,this.unsigned)},N.xor=function(e){return i(e)||(e=h(e)),l(this.low^e.low,this.high^e.high,this.unsigned)},N.shiftLeft=function(e){return i(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?l(this.low<>>32-e,this.unsigned):l(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):l(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},N.shr=N.shiftRight,N.shiftRightUnsigned=function(e){if(i(e)&&(e=e.toInt()),0===(e&=63))return this;var t=this.high;return e<32?l(this.low>>>e|t<<32-e,t>>>e,this.unsigned):l(32===e?t:t>>>e-32,0,this.unsigned)},N.shru=N.shiftRightUnsigned,N.shr_u=N.shiftRightUnsigned,N.toSigned=function(){return this.unsigned?l(this.low,this.high,!1):this},N.toUnsigned=function(){return this.unsigned?this:l(this.low,this.high,!0)},N.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},N.toBytesLE=function(){var e=this.high,t=this.low;return[255&t,t>>>8&255,t>>>16&255,t>>>24,255&e,e>>>8&255,e>>>16&255,e>>>24]},N.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,255&e,t>>>24,t>>>16&255,t>>>8&255,255&t]},n.fromBytes=function(e,t,r){return r?n.fromBytesLE(e,t):n.fromBytesBE(e,t)},n.fromBytesLE=function(e,t){return new n(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)},n.fromBytesBE=function(e,t){return new n(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}},function(e,t,r){(function(e){const t=e.Long||r(21);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){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self;function r(){Error.captureStackTrace?Error.captureStackTrace(this,r):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function n(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,n):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}t.ASC_TARGET=0,Object.defineProperties(t.i8=function(e){return e<<24>>24},{MIN_VALUE:{value:-128,writable:!1},MAX_VALUE:{value:127,writable:!1}}),Object.defineProperties(t.i16=function(e){return e<<16>>16},{MIN_VALUE:{value:-32768,writable:!1},MAX_VALUE:{value:32767,writable:!1}}),Object.defineProperties(t.i32=t.isize=function(e){return 0|e},{MIN_VALUE:{value:-2147483648,writable:!1},MAX_VALUE:{value:2147483647,writable:!1}}),Object.defineProperties(t.u8=function(e){return 255&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:255,writable:!1}}),Object.defineProperties(t.u16=function(e){return 65535&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:65535,writable:!1}}),Object.defineProperties(t.u32=t.usize=function(e){return e>>>0},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:4294967295,writable:!1}}),Object.defineProperties(t.bool=function(e){return!!e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:1,writable:!1}}),Object.defineProperties(t.f32=function(e){return Math.fround(e)},{MIN_VALUE:{value:Math.fround(-3.40282347e38),writable:!1},MAX_VALUE:{value:Math.fround(3.40282347e38),writable:!1},MIN_POSITIVE_VALUE:{value:Math.fround(1.175494351e-38),writable:!1},MIN_SAFE_INTEGER:{value:-16777215,writable:!1},MAX_SAFE_INTEGER:{value:16777215,writable:!1},EPSILON:{value:Math.fround(1.1920929e-7),writable:!1}}),Object.defineProperties(t.f64=function(e){return+e},{MIN_VALUE:{value:-1.7976931348623157e308,writable:!1},MAX_VALUE:{value:1.7976931348623157e308,writable:!1},MIN_POSITIVE_VALUE:{value:2.2250738585072014e-308,writable:!1},MIN_SAFE_INTEGER:{value:-9007199254740991,writable:!1},MAX_SAFE_INTEGER:{value:9007199254740991,writable:!1},EPSILON:{value:2.220446049250313e-16,writable:!1}}),t.clz=Math.clz32,t.ctz=function(e){var t=Math.clz32(e&-e);return e?31-t:t},t.popcnt=function(e){return 16843009*((e=(858993459&(e-=e>>>1&1431655765))+(e>>>2&858993459))+(e>>>4)&252645135)>>>24},t.rotl=function(e,t){return e<<(t&=31)|e>>>32-t},t.rotr=function(e,t){return e>>>(t&=31)|e<<32-t},t.abs=Math.abs,t.max=Math.max,t.min=Math.min,t.ceil=Math.ceil,t.floor=Math.floor,t.nearest=function(e){return.5===Math.abs(e-Math.trunc(e))?2*Math.round(.5*e):Math.round(e)},t.select=function(e,t,r){return r?e:t},t.sqrt=Math.sqrt,t.trunc=Math.trunc,t.copysign=function(e,t){return Math.abs(e)*Math.sign(t)},t.bswap=function(e){var t=e>>8&16711935,r=(16711935&e)<<8;return(t=(e=t|r)>>16&65535)|(r=(65535&e)<<16)},t.bswap16=function(e){return e<<8&65280|e>>8&255|4294901760&e},r.prototype=Object.create(Error.prototype),r.prototype.name="UnreachableError",r.prototype.message="unreachable",t.unreachable=function(){throw new r},n.prototype=Object.create(Error.prototype),n.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new n(t)},t.changetype=function(e){return e},t.parseI32=function(e,t){return 0|parseInt(e,void 0)},String.fromCharCodes=function(e){return String.fromCharCode.apply(String,e)},String.fromCodePoints=function(e){return String.fromCodePoint.apply(String,e)},t.isInteger=Number.isInteger,t.isFloat=function(e){return"number"==typeof e},t.isReference=function(e){return"object"==typeof e||"string"==typeof e},t.isString=function(e){return"string"==typeof e||e instanceof String},t.isArray=Array.isArray,t.unchecked=function(e){return e},t.fmod=function(e,t){return e%t},t.fmodf=function(e,t){return Math.fround(e%t)},t.JSMath=Math,t.memory=(()=>{var e=new Uint8Array(0),r=0;return{allocate:t.__memory_allocate||function(t){if(!(t>>>=0))return 0;if(r+t>e.length){var n=e;(e=new Uint8Array(Math.max(65536,e.length+t,2*e.length))).set(n)}var i=r;return 7&(r+=t)&&(r=1+(7|r)),i},free:t.__memory_free||function(e){},copy:t.__memory_copy||function(t,r,n){e.copyWithin(t,r,r+n)}}})(),t.store=t.__store||function(e,t,r){HEAP[e+(0|r)]=t},t.load=t.__load||function(e,t){return HEAP[e+(0|t)]}}).call(this,r(7))},function(t,r){t.exports=e},function(e,t,r){(function(e){const t=e.Binaryen||r(25);for(var n in e.binaryen=t,t)(n.startsWith("_Binaryen")||n.startsWith("_Relooper"))&&(e[n]=t[n]);e.__memory_allocate=t._malloc,e.__memory_free=t._free,e.__memory_copy=t._memmove,e.__store=function(e,r){t.HEAPU8[e]=r},e.__load=function(e){return t.HEAPU8[e]}}).call(this,r(7))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(26),r(24),r(23),r(22);var n=r(4);n.Module.prototype.toText=function(){return new binaryen.Module(this.ref).emitText()},n.Module.prototype.toAsmjs=function(){return new binaryen.Module(this.ref).emitAsmjs()}},function(e,t,r){r(27),e.exports=r(15)}])}); +!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=28)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NONE=0]="NONE",e[e.IMPORT=1]="IMPORT",e[e.EXPORT=2]="EXPORT",e[e.DECLARE=4]="DECLARE",e[e.CONST=8]="CONST",e[e.LET=16]="LET",e[e.STATIC=32]="STATIC",e[e.READONLY=64]="READONLY",e[e.ABSTRACT=128]="ABSTRACT",e[e.PUBLIC=256]="PUBLIC",e[e.PRIVATE=512]="PRIVATE",e[e.PROTECTED=1024]="PROTECTED",e[e.GET=2048]="GET",e[e.SET=4096]="SET",e[e.AMBIENT=8192]="AMBIENT",e[e.GENERIC=16384]="GENERIC",e[e.GENERIC_CONTEXT=32768]="GENERIC_CONTEXT",e[e.INSTANCE=65536]="INSTANCE",e[e.CONSTRUCTOR=131072]="CONSTRUCTOR",e[e.ARROW=262144]="ARROW",e[e.MODULE_EXPORT=524288]="MODULE_EXPORT",e[e.MODULE_IMPORT=1048576]="MODULE_IMPORT",e[e.COMPILED=2097152]="COMPILED",e[e.INLINED=4194304]="INLINED",e[e.SCOPED=8388608]="SCOPED",e[e.TRAMPOLINE=16777216]="TRAMPOLINE",e[e.VIRTUAL=33554432]="VIRTUAL",e[e.MAIN=67108864]="MAIN",e[e.QUOTED=134217728]="QUOTED"}(t.CommonFlags||(t.CommonFlags={})),t.PATH_DELIMITER="/",t.PARENT_SUBST="..",t.GETTER_PREFIX="get:",t.SETTER_PREFIX="set:",t.INSTANCE_DELIMITER="#",t.STATIC_DELIMITER=".",t.INNER_DELIMITER="~",t.LIBRARY_SUBST="~lib",t.LIBRARY_PREFIX=t.LIBRARY_SUBST+t.PATH_DELIMITER,t.FILESPACE_PREFIX="file:"},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(10),a=r(3),s=r(10);function o(e){switch(e){case n.INFO:return"INFO";case n.WARNING:return"WARNING";case n.ERROR:return"ERROR";default:return assert(!1),""}}function c(e){switch(e){case n.INFO:return t.COLOR_BLUE;case n.WARNING:return t.COLOR_YELLOW;case n.ERROR:return t.COLOR_RED;default:return assert(!1),""}}t.DiagnosticCode=s.DiagnosticCode,t.diagnosticCodeToString=s.diagnosticCodeToString,function(e){e[e.INFO=0]="INFO",e[e.WARNING=1]="WARNING",e[e.ERROR=2]="ERROR"}(n=t.DiagnosticCategory||(t.DiagnosticCategory={})),t.diagnosticCategoryToString=o,t.COLOR_BLUE="",t.COLOR_YELLOW="",t.COLOR_RED="",t.COLOR_RESET="",t.diagnosticCategoryToColor=c;var l=function(){function e(e,t,r){this.range=null,this.code=e,this.category=t,this.message=r}return e.create=function(t,r,n,a,s){void 0===n&&(n=null),void 0===a&&(a=null),void 0===s&&(s=null);var o=i.diagnosticCodeToString(t);return null!=n&&(o=o.replace("{0}",n)),null!=a&&(o=o.replace("{1}",a)),null!=s&&(o=o.replace("{2}",s)),new e(t,r,o)},e.createInfo=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.INFO,r,i)},e.createWarning=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.WARNING,r,i)},e.createError=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.ERROR,r,i)},e.prototype.withRange=function(e){return this.range=e,this},e.prototype.toString=function(){return this.range?o(this.category)+" "+this.code.toString(10)+': "'+this.message+'" in '+this.range.source.normalizedPath+":"+this.range.line.toString(10)+":"+this.range.column.toString(10):o(this.category)+" "+this.code.toString(10)+": "+this.message},e}();function p(e,r){void 0===r&&(r=!1);for(var n=e.source.text,i=n.length,s=e.start,o=e.end;s>0&&!a.isLineBreak(n.charCodeAt(s-1));)s--;for(;o=0?c.substring(l+1):c,o.statements=new Array,o.range=new a.Range(o,0,r.length),o.text=r,o}return n(t,e),Object.defineProperty(t.prototype,"isEntry",{get:function(){return this.sourceKind==q.ENTRY},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLibrary",{get:function(){return this.sourceKind==q.LIBRARY},enumerable:!0,configurable:!0}),t}(c);t.Source=Z;var J=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.decorators=null,t.cachedProgramLevelInternalName=null,t.cachedFileLevelInternalName=null,t}return n(t,e),Object.defineProperty(t.prototype,"programLevelInternalName",{get:function(){return this.cachedProgramLevelInternalName||(this.cachedProgramLevelInternalName=Re(this,!0)),this.cachedProgramLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"fileLevelInternalName",{get:function(){return this.cachedFileLevelInternalName||(this.cachedFileLevelInternalName=Re(this,!1)),this.cachedFileLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevel",{get:function(){var e=this.parent;return!!e&&(!(e.kind==s.VARIABLE&&!(e=e.parent))&&e.kind==s.SOURCE)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevelExport",{get:function(){var e=this.parent;return!(!e||e.kind==s.VARIABLE&&!(e=e.parent))&&(e.kind==s.NAMESPACEDECLARATION?this.is(i.CommonFlags.EXPORT)&&e.isTopLevelExport:e.kind==s.CLASSDECLARATION?this.is(i.CommonFlags.STATIC)&&e.isTopLevelExport:e.kind==s.SOURCE&&this.is(i.CommonFlags.EXPORT))},enumerable:!0,configurable:!0}),t.prototype.needsExplicitExport=function(e){return e.name.text!=e.externalName.text||this.range.source!=e.range.source||!this.isTopLevelExport},t}(j);t.DeclarationStatement=J;var $=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t}(J);t.VariableLikeDeclarationStatement=$;var ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BLOCK,t}return n(t,e),t}(j);t.BlockStatement=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BREAK,t}return n(t,e),t}(j);t.BreakStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CLASSDECLARATION,t}return n(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(J);t.ClassDeclaration=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CONTINUE,t}return n(t,e),t}(j);t.ContinueStatement=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.DO,t}return n(t,e),t}(j);t.DoStatement=ie;var ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EMPTY,t}return n(t,e),t}(j);t.EmptyStatement=ae;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMDECLARATION,t}return n(t,e),t}(J);t.EnumDeclaration=se;var oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMVALUEDECLARATION,t}return n(t,e),t}(J);t.EnumValueDeclaration=oe;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTIMPORT,t}return n(t,e),t}(c);t.ExportImportStatement=ce;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTMEMBER,t}return n(t,e),t}(c);t.ExportMember=le;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORT,t}return n(t,e),t}(j);t.ExportStatement=pe;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPRESSION,t}return n(t,e),t}(j);t.ExpressionStatement=ue;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FIELDDECLARATION,t.parameterIndex=-1,t}return n(t,e),t}($);t.FieldDeclaration=he;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FOR,t}return n(t,e),t}(j);t.ForStatement=de;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FUNCTIONDECLARATION,t}return n(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(J);t.FunctionDeclaration=_e;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return n(t,e),t}(j);t.IfStatement=me;var 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)memory.free(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{memory.free(i),memory.free(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{memory.free(i),memory.free(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{memory.free(i),memory.free(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{memory.free(i)}},e.prototype.addFunction=function(e,t,r,n){var i=h(e),a=p(r);try{return _BinaryenAddFunction(this.ref,i,t,a,r?r.length:0,n)}finally{memory.free(a),memory.free(i)}},e.prototype.removeFunction=function(e){var t=h(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{memory.free(t)}},e.prototype.addTemporaryFunction=function(e,t,r){this.hasTemporaryFunction=assert(!this.hasTemporaryFunction);var n=this.cachedTemporaryName;n||(this.cachedTemporaryName=n=h(""));var i=p(t);try{var a=_BinaryenAddFunctionType(this.ref,n,e,i,t?t.length:0);return _BinaryenAddFunction(this.ref,n,a,0,0,r)}finally{memory.free(i)}},e.prototype.removeTemporaryFunction=function(){this.hasTemporaryFunction=!assert(this.hasTemporaryFunction);var e=assert(this.cachedTemporaryName);_BinaryenRemoveFunction(this.ref,e),_BinaryenRemoveFunctionType(this.ref,e)},e.prototype.addFunctionExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addTableExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addMemoryExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addGlobalExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.removeExport=function(e){var t=h(e);try{_BinaryenRemoveExport(this.ref,t)}finally{memory.free(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{memory.free(s),memory.free(a),memory.free(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{memory.free(a),memory.free(i),memory.free(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{memory.free(a),memory.free(i),memory.free(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{memory.free(s),memory.free(a),memory.free(i)}},e.prototype.removeImport=function(e){var t=h(e);try{_BinaryenRemoveImport(this.ref,t)}finally{memory.free(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;--_)memory.free(c[_]);memory.free(s)}},e.prototype.setFunctionTable=function(e){var t=u(e);try{_BinaryenSetFunctionTable(this.ref,t,e.length)}finally{memory.free(t)}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.getOptimizeLevel=function(){return _BinaryenGetOptimizeLevel()},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.getShrinkLevel=function(){return _BinaryenGetShrinkLevel()},e.prototype.setShrinkLevel=function(e){void 0===e&&(e=1),_BinaryenSetShrinkLevel(e)},e.prototype.setDebugInfo=function(e){void 0===e&&(e=!1),_BinaryenSetDebugInfo(e)},e.prototype.optimize=function(e){void 0===e&&(e=0),e?_BinaryenFunctionOptimize(e,this.ref):_BinaryenModuleOptimize(this.ref)},e.prototype.runPasses=function(e,t){void 0===t&&(t=0);for(var r=e.length,n=new Array(r),i=0;i=0;--i)memory.free(n[i])}},e.prototype.precomputeExpression=function(e){var t=_BinaryenGetOptimizeLevel(),r=_BinaryenGetShrinkLevel(),n=_BinaryenGetDebugInfo();_BinaryenSetOptimizeLevel(4),_BinaryenSetShrinkLevel(0),_BinaryenSetDebugInfo(!1);var i=_BinaryenExpressionGetType(e),a=this.addTemporaryFunction(i,null,e),s=this.cachedPrecomputeNames;if(!s){var o=h("precompute");this.cachedPrecomputeName=o,this.cachedPrecomputeNames=s=p([o])}return _BinaryenFunctionRunPasses(a,this.ref,s,1),e=_BinaryenFunctionGetBody(a),this.removeTemporaryFunction(),_BinaryenSetOptimizeLevel(t),_BinaryenSetShrinkLevel(r),_BinaryenSetDebugInfo(n),e},e.prototype.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.cachedByValue,r=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 p(e)}function h(e){if(null==e)return 0;for(var t=memory.allocate(function(e){for(var t=0,r=0,n=e.length;r=55296&&i<=57343&&r+1=55296&&a<=57343&&n+1>>6),store(r++,128|63&a)):a<=65535?(store(r++,224|a>>>12),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=2097151?(store(r++,240|a>>>18),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=67108863?(store(r++,248|a>>>24),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):(store(r++,252|a>>>30),store(r++,128|a>>>24&63),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a))}return store(r,0),t}function 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),l=r(6),p=r(2),u=r(4),h=r(9),d=function(){return function(){}}(),_=function(){return function(){}}(),m=function(){return function(){}}();function y(e,t){switch(assert(t.length),e){case p.DecoratorKind.OPERATOR:case p.DecoratorKind.OPERATOR_BINARY:switch(t.charCodeAt(0)){case 91:if("[]"==t)return s.INDEXED_GET;if("[]="==t)return s.INDEXED_SET;break;case 123:if("{}"==t)return s.UNCHECKED_INDEXED_GET;if("{}="==t)return s.UNCHECKED_INDEXED_SET;break;case 43:if("+"==t)return s.ADD;break;case 45:if("-"==t)return s.SUB;break;case 42:if("*"==t)return s.MUL;if("**"==t)return s.POW;break;case 47:if("/"==t)return s.DIV;break;case 37:if("%"==t)return s.REM;break;case 38:if("&"==t)return s.BITWISE_AND;break;case 124:if("|"==t)return s.BITWISE_OR;break;case 94:if("^"==t)return s.BITWISE_XOR;break;case 61:if("=="==t)return s.EQ;break;case 33:if("!="==t)return s.NE;break;case 62:if(">"==t)return s.GT;if(">="==t)return s.GE;if(">>"==t)return s.BITWISE_SHR;if(">>>"==t)return s.BITWISE_SHR_U;break;case 60:if("<"==t)return s.LT;if("<="==t)return s.LE;if("<<"==t)return s.BITWISE_SHL}break;case p.DecoratorKind.OPERATOR_PREFIX:switch(t.charCodeAt(0)){case 43:if("+"==t)return s.PLUS;if("++"==t)return s.PREFIX_INC;break;case 45:if("-"==t)return s.MINUS;if("--"==t)return s.PREFIX_DEC;break;case 33:if("!"==t)return s.NOT;break;case 126:if("~"==t)return s.BITWISE_NOT}break;case p.DecoratorKind.OPERATOR_POSTFIX:switch(t.charCodeAt(0)){case 43:if("++"==t)return s.POSTFIX_INC;break;case 45:if("--"==t)return s.POSTFIX_DEC}}return s.INVALID}!function(e){e[e.INVALID=0]="INVALID",e[e.INDEXED_GET=1]="INDEXED_GET",e[e.INDEXED_SET=2]="INDEXED_SET",e[e.UNCHECKED_INDEXED_GET=3]="UNCHECKED_INDEXED_GET",e[e.UNCHECKED_INDEXED_SET=4]="UNCHECKED_INDEXED_SET",e[e.ADD=5]="ADD",e[e.SUB=6]="SUB",e[e.MUL=7]="MUL",e[e.DIV=8]="DIV",e[e.REM=9]="REM",e[e.POW=10]="POW",e[e.BITWISE_AND=11]="BITWISE_AND",e[e.BITWISE_OR=12]="BITWISE_OR",e[e.BITWISE_XOR=13]="BITWISE_XOR",e[e.BITWISE_SHL=14]="BITWISE_SHL",e[e.BITWISE_SHR=15]="BITWISE_SHR",e[e.BITWISE_SHR_U=16]="BITWISE_SHR_U",e[e.EQ=17]="EQ",e[e.NE=18]="NE",e[e.GT=19]="GT",e[e.GE=20]="GE",e[e.LT=21]="LT",e[e.LE=22]="LE",e[e.PLUS=23]="PLUS",e[e.MINUS=24]="MINUS",e[e.NOT=25]="NOT",e[e.BITWISE_NOT=26]="BITWISE_NOT",e[e.PREFIX_INC=27]="PREFIX_INC",e[e.PREFIX_DEC=28]="PREFIX_DEC",e[e.POSTFIX_INC=29]="POSTFIX_INC",e[e.POSTFIX_DEC=30]="POSTFIX_DEC"}(s=t.OperatorKind||(t.OperatorKind={}));var 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.abortInstance=null,r.memoryAllocateInstance=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)?l.Type.i8:l.Type.u8;break;case 2:o=u.isLoadSigned(e)?l.Type.i16:l.Type.u16;break;default:o=u.isLoadSigned(e)?l.Type.i32:l.Type.u32}return z(o,t);case u.ExpressionId.Block:if(!u.getBlockName(e)){var c=assert(u.getBlockChildCount(e)),p=u.getBlockChild(e,c-1);return this.canOverflow(p,t)}break;case u.ExpressionId.If:return this.canOverflow(u.getIfTrue(e),t)||this.canOverflow(assert(u.getIfFalse(e)),t);case u.ExpressionId.Select:return this.canOverflow(u.getSelectThen(e),t)||this.canOverflow(u.getSelectElse(e),t);case u.ExpressionId.Call:var h=this.currentFunction.program,d=assert(h.instancesLookup.get(assert(u.getCallTarget(e))));assert(d.kind==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=l&&u!=p?t.push("?: "):t.push(": "),t.push(i[u].toString());return t.push(") => "),t.push(this.returnType.toString()),t.join("")},e}();t.Signature=a;var s=null;function o(e){s||(s=[]);for(var t=s.length;t<=e;++t)s.push("arg$"+t.toString(10));return s[e-1]}t.getDefaultParameterName=o},function(e,t){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 l(e){switch(assert(e.length),e.charCodeAt(0)){case 97:switch(e){case"abstract":return i.ABSTRACT;case"as":return i.AS;case"async":return i.ASYNC;case"await":return i.AWAIT}break;case 98:switch(e){case"break":return i.BREAK}break;case 99:switch(e){case"case":return i.CASE;case"catch":return i.CATCH;case"class":return i.CLASS;case"continue":return i.CONTINUE;case"const":return i.CONST;case"constructor":return i.CONSTRUCTOR}break;case 100:switch(e){case"debugger":return i.DEBUGGER;case"declare":return i.DECLARE;case"default":return i.DEFAULT;case"delete":return i.DELETE;case"do":return i.DO}break;case 101:switch(e){case"else":return i.ELSE;case"enum":return i.ENUM;case"export":return i.EXPORT;case"extends":return i.EXTENDS}break;case 102:switch(e){case"false":return i.FALSE;case"finally":return i.FINALLY;case"for":return i.FOR;case"from":return i.FROM;case"function":return i.FUNCTION}break;case 103:switch(e){case"get":return i.GET}break;case 105:switch(e){case"if":return i.IF;case"implements":return i.IMPLEMENTS;case"import":return i.IMPORT;case"in":return i.IN;case"instanceof":return i.INSTANCEOF;case"interface":return i.INTERFACE;case"is":return i.IS}break;case 107:switch(e){case"keyof":return i.KEYOF}break;case 108:switch(e){case"let":return i.LET}break;case 109:switch(e){case"module":return i.MODULE}break;case 110:switch(e){case"namespace":return i.NAMESPACE;case"new":return i.NEW;case"null":return i.NULL}break;case 111:switch(e){case"of":return i.OF}break;case 112:switch(e){case"package":return i.PACKAGE;case"private":return i.PRIVATE;case"protected":return i.PROTECTED;case"public":return i.PUBLIC}break;case 114:switch(e){case"readonly":return i.READONLY;case"return":return i.RETURN}break;case 115:switch(e){case"set":return i.SET;case"static":return i.STATIC;case"super":return i.SUPER;case"switch":return i.SWITCH}break;case 116:switch(e){case"this":return i.THIS;case"throw":return i.THROW;case"true":return i.TRUE;case"try":return i.TRY;case"type":return i.TYPE;case"typeof":return i.TYPEOF}break;case 118:switch(e){case"var":return i.VAR;case"void":return i.VOID}break;case 119:switch(e){case"while":return i.WHILE;case"with":return i.WITH}break;case 121:switch(e){case"yield":return i.YIELD}}return i.INVALID}function p(e){switch(e){case i.ABSTRACT:case i.AS:case i.CONSTRUCTOR:case i.DECLARE:case i.DELETE:case i.FROM:case i.FOR:case i.GET:case i.IS:case i.KEYOF:case i.MODULE:case i.NAMESPACE:case i.READONLY:case i.SET:case i.TYPE:return!0;default:return!1}}!function(e){e[e.ABSTRACT=0]="ABSTRACT",e[e.AS=1]="AS",e[e.ASYNC=2]="ASYNC",e[e.AWAIT=3]="AWAIT",e[e.BREAK=4]="BREAK",e[e.CASE=5]="CASE",e[e.CATCH=6]="CATCH",e[e.CLASS=7]="CLASS",e[e.CONST=8]="CONST",e[e.CONTINUE=9]="CONTINUE",e[e.CONSTRUCTOR=10]="CONSTRUCTOR",e[e.DEBUGGER=11]="DEBUGGER",e[e.DECLARE=12]="DECLARE",e[e.DEFAULT=13]="DEFAULT",e[e.DELETE=14]="DELETE",e[e.DO=15]="DO",e[e.ELSE=16]="ELSE",e[e.ENUM=17]="ENUM",e[e.EXPORT=18]="EXPORT",e[e.EXTENDS=19]="EXTENDS",e[e.FALSE=20]="FALSE",e[e.FINALLY=21]="FINALLY",e[e.FOR=22]="FOR",e[e.FROM=23]="FROM",e[e.FUNCTION=24]="FUNCTION",e[e.GET=25]="GET",e[e.IF=26]="IF",e[e.IMPLEMENTS=27]="IMPLEMENTS",e[e.IMPORT=28]="IMPORT",e[e.IN=29]="IN",e[e.INSTANCEOF=30]="INSTANCEOF",e[e.INTERFACE=31]="INTERFACE",e[e.IS=32]="IS",e[e.KEYOF=33]="KEYOF",e[e.LET=34]="LET",e[e.MODULE=35]="MODULE",e[e.NAMESPACE=36]="NAMESPACE",e[e.NEW=37]="NEW",e[e.NULL=38]="NULL",e[e.OF=39]="OF",e[e.PACKAGE=40]="PACKAGE",e[e.PRIVATE=41]="PRIVATE",e[e.PROTECTED=42]="PROTECTED",e[e.PUBLIC=43]="PUBLIC",e[e.READONLY=44]="READONLY",e[e.RETURN=45]="RETURN",e[e.SET=46]="SET",e[e.STATIC=47]="STATIC",e[e.SUPER=48]="SUPER",e[e.SWITCH=49]="SWITCH",e[e.THIS=50]="THIS",e[e.THROW=51]="THROW",e[e.TRUE=52]="TRUE",e[e.TRY=53]="TRY",e[e.TYPE=54]="TYPE",e[e.TYPEOF=55]="TYPEOF",e[e.VAR=56]="VAR",e[e.VOID=57]="VOID",e[e.WHILE=58]="WHILE",e[e.WITH=59]="WITH",e[e.YIELD=60]="YIELD",e[e.OPENBRACE=61]="OPENBRACE",e[e.CLOSEBRACE=62]="CLOSEBRACE",e[e.OPENPAREN=63]="OPENPAREN",e[e.CLOSEPAREN=64]="CLOSEPAREN",e[e.OPENBRACKET=65]="OPENBRACKET",e[e.CLOSEBRACKET=66]="CLOSEBRACKET",e[e.DOT=67]="DOT",e[e.DOT_DOT_DOT=68]="DOT_DOT_DOT",e[e.SEMICOLON=69]="SEMICOLON",e[e.COMMA=70]="COMMA",e[e.LESSTHAN=71]="LESSTHAN",e[e.GREATERTHAN=72]="GREATERTHAN",e[e.LESSTHAN_EQUALS=73]="LESSTHAN_EQUALS",e[e.GREATERTHAN_EQUALS=74]="GREATERTHAN_EQUALS",e[e.EQUALS_EQUALS=75]="EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS=76]="EXCLAMATION_EQUALS",e[e.EQUALS_EQUALS_EQUALS=77]="EQUALS_EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS_EQUALS=78]="EXCLAMATION_EQUALS_EQUALS",e[e.EQUALS_GREATERTHAN=79]="EQUALS_GREATERTHAN",e[e.PLUS=80]="PLUS",e[e.MINUS=81]="MINUS",e[e.ASTERISK_ASTERISK=82]="ASTERISK_ASTERISK",e[e.ASTERISK=83]="ASTERISK",e[e.SLASH=84]="SLASH",e[e.PERCENT=85]="PERCENT",e[e.PLUS_PLUS=86]="PLUS_PLUS",e[e.MINUS_MINUS=87]="MINUS_MINUS",e[e.LESSTHAN_LESSTHAN=88]="LESSTHAN_LESSTHAN",e[e.GREATERTHAN_GREATERTHAN=89]="GREATERTHAN_GREATERTHAN",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN=90]="GREATERTHAN_GREATERTHAN_GREATERTHAN",e[e.AMPERSAND=91]="AMPERSAND",e[e.BAR=92]="BAR",e[e.CARET=93]="CARET",e[e.EXCLAMATION=94]="EXCLAMATION",e[e.TILDE=95]="TILDE",e[e.AMPERSAND_AMPERSAND=96]="AMPERSAND_AMPERSAND",e[e.BAR_BAR=97]="BAR_BAR",e[e.QUESTION=98]="QUESTION",e[e.COLON=99]="COLON",e[e.EQUALS=100]="EQUALS",e[e.PLUS_EQUALS=101]="PLUS_EQUALS",e[e.MINUS_EQUALS=102]="MINUS_EQUALS",e[e.ASTERISK_EQUALS=103]="ASTERISK_EQUALS",e[e.ASTERISK_ASTERISK_EQUALS=104]="ASTERISK_ASTERISK_EQUALS",e[e.SLASH_EQUALS=105]="SLASH_EQUALS",e[e.PERCENT_EQUALS=106]="PERCENT_EQUALS",e[e.LESSTHAN_LESSTHAN_EQUALS=107]="LESSTHAN_LESSTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_EQUALS=108]="GREATERTHAN_GREATERTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS=109]="GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS",e[e.AMPERSAND_EQUALS=110]="AMPERSAND_EQUALS",e[e.BAR_EQUALS=111]="BAR_EQUALS",e[e.CARET_EQUALS=112]="CARET_EQUALS",e[e.AT=113]="AT",e[e.IDENTIFIER=114]="IDENTIFIER",e[e.STRINGLITERAL=115]="STRINGLITERAL",e[e.INTEGERLITERAL=116]="INTEGERLITERAL",e[e.FLOATLITERAL=117]="FLOATLITERAL",e[e.INVALID=118]="INVALID",e[e.ENDOFFILE=119]="ENDOFFILE"}(i=t.Token||(t.Token={})),function(e){e[e.DEFAULT=0]="DEFAULT",e[e.PREFER=1]="PREFER",e[e.ALWAYS=2]="ALWAYS"}(a=t.IdentifierHandling||(t.IdentifierHandling={})),t.tokenFromKeyword=l,t.tokenIsAlsoIdentifier=p,t.operatorTokenToString=function(e){switch(e){case i.DELETE:return"delete";case i.IN:return"in";case i.INSTANCEOF:return"instanceof";case i.NEW:return"new";case i.TYPEOF:return"typeof";case i.VOID:return"void";case i.YIELD:return"yield";case i.DOT_DOT_DOT:return"...";case i.COMMA:return",";case i.LESSTHAN:return"<";case i.GREATERTHAN:return">";case i.LESSTHAN_EQUALS:return"<=";case i.GREATERTHAN_EQUALS:return">=";case i.EQUALS_EQUALS:return"==";case i.EXCLAMATION_EQUALS:return"!=";case i.EQUALS_EQUALS_EQUALS:return"===";case i.EXCLAMATION_EQUALS_EQUALS:return"!==";case i.PLUS:return"+";case i.MINUS:return"-";case i.ASTERISK_ASTERISK:return"**";case i.ASTERISK:return"*";case i.SLASH:return"/";case i.PERCENT:return"%";case i.PLUS_PLUS:return"++";case i.MINUS_MINUS:return"--";case i.LESSTHAN_LESSTHAN:return"<<";case i.GREATERTHAN_GREATERTHAN:return">>";case i.GREATERTHAN_GREATERTHAN_GREATERTHAN:return">>>";case i.AMPERSAND:return"&";case i.BAR:return"|";case i.CARET:return"^";case i.EXCLAMATION:return"!";case i.TILDE:return"~";case i.AMPERSAND_AMPERSAND:return"&&";case i.BAR_BAR:return"||";case i.EQUALS:return"=";case i.PLUS_EQUALS:return"+=";case i.MINUS_EQUALS:return"-=";case i.ASTERISK_EQUALS:return"*=";case i.ASTERISK_ASTERISK_EQUALS:return"**=";case i.SLASH_EQUALS:return"/=";case i.PERCENT_EQUALS:return"%=";case i.LESSTHAN_LESSTHAN_EQUALS:return"<<=";case i.GREATERTHAN_GREATERTHAN_EQUALS:return">>=";case i.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:return">>>=";case i.AMPERSAND_EQUALS:return"&=";case i.BAR_EQUALS:return"|=";case i.CARET_EQUALS:return"^=";default:return assert(!1),""}};var u=function(){function e(e,t,r){this.debugInfoRef=0,this.source=e,this.start=t,this.end=r}return e.join=function(t,r){if(t.source!=r.source)throw new Error("source mismatch");return new e(t.source,t.startr.end?t.end:r.end)},Object.defineProperty(e.prototype,"atStart",{get:function(){return new e(this.source,this.start,this.start)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"atEnd",{get:function(){return new e(this.source,this.end,this.end)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"line",{get:function(){for(var e=this.source.text,t=1,r=this.start;r>=0;--r)10==e.charCodeAt(r)&&t++;return t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"column",{get:function(){for(var e=this.source.text,t=0,r=this.start-1;r>=0&&10!=e.charCodeAt(r);--r)++t;return t},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.source.text.substring(this.start,this.end)},e}();t.Range=u;var h=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,r)||this;n.end=0,n.pos=0,n.token=-1,n.tokenPos=0,n.nextToken=-1,n.nextTokenPos=0,n.nextTokenOnNewLine=!1,n.onComment=null,n.source=t,n.pos=0,n.end=t.text.length,n.diagnostics=r||new Array;var i=t.text;if(n.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos+11&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos3&&this.pos1&&this.pos1&&this.pos=this.end){n+=e.substring(r,this.pos),this.error(s.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.end));break}var i=e.charCodeAt(this.pos);if(i==t){n+=e.substring(r,this.pos++);break}if(92!=i){if(c.isLineBreak(i)){n+=e.substring(r,this.pos),this.error(s.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.pos));break}++this.pos}else n+=e.substring(r,this.pos),n+=this.readEscapeSequence(),r=this.pos}return n},t.prototype.readEscapeSequence=function(){if(++this.pos>=this.end)return this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(this.end)),"";var e=this.source.text,t=e.charCodeAt(this.pos++);switch(t){case 48:return"\0";case 98:return"\b";case 116:return"\t";case 110:return"\n";case 118:return"\v";case 102:return"\f";case 114:return"\r";case 39:return"'";case 34:return'"';case 117:return this.pos=this.end){this.error(s.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.end));break}if(92!=e.charCodeAt(this.pos)){var n=e.charCodeAt(this.pos);if(47==n&&!r)break;if(c.isLineBreak(n)){this.error(s.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.pos));break}++this.pos,r=!1}else++this.pos,r=!0}return e.substring(t,this.pos)},t.prototype.readRegexpFlags=function(){for(var e=this.source.text,t=this.pos,r=0;this.pos57)&&95!=r)break;t++}return!0},t.prototype.readInteger=function(){var e=this.source.text;if(48==e.charCodeAt(this.pos)&&this.pos+2=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else if(o>=65&&o<=70)r=i64_add(i64_mul(r,n),i64_new(10+o-65,0));else if(o>=97&&o<=102)r=i64_add(i64_mul(r,n),i64_new(10+o-97,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readDecimalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(10,0),i=t;this.pos=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readOctalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(8,0),i=t;this.pos=48&&o<=55)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}++this.pos}return this.pos==t?this.error(s.DiagnosticCode.Octal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readBinaryInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(2,0),i=i64_new(1,0),a=t;this.pos=48&&n<=57)t=16*t+n-48;else if(n>=65&&n<=70)t=16*t+10+n-65;else{if(!(n>=97&&n<=102))return this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(this.pos-1,this.pos)),"";t=16*t+10+n-97}if(0==--e)break}return e?(this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(this.pos)),""):String.fromCharCode(t)},t.prototype.readExtendedUnicodeEscape=function(){var e=this.pos,t=this.readHexInteger(),r=i64_low(t),n=!1;assert(!i64_high(t)),r>1114111&&(this.error(s.DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,this.range(e,this.pos)),n=!0);var i=this.source.text;return this.pos>=this.end?(this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(e,this.end)),n=!0):125==i.charCodeAt(this.pos)?++this.pos:(this.error(s.DiagnosticCode.Unterminated_Unicode_escape_sequence,this.range(e,this.pos)),n=!0),n?"":r<65536?String.fromCharCode(r):String.fromCharCode(55296+((r-65536)/1024|0),(r-65536)%1024+56320)},t.prototype.finish=function(){},t}(s.DiagnosticEmitter);t.Tokenizer=h;var d=function(){return function(){}}();t.State=d;var _=null},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=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),l=r(2),p=r(6),u=r(0);!function(e){e[e.REPORT=0]="REPORT",e[e.SWALLOW=1]="SWALLOW"}(s=t.ReportMode||(t.ReportMode={}));var h=function(e){function t(t){var r=e.call(this,t.diagnostics)||this;return r.currentThisExpression=null,r.currentElementExpression=null,r.program=t,r}return n(t,e),t.prototype.resolveType=function(e,t,r){if(void 0===t&&(t=null),void 0===r&&(r=s.REPORT),e.kind==l.NodeKind.SIGNATURE){var n=this.resolveSignature(e,t,r);return n?e.isNullable?n.type.asNullable():n.type:null}assert(e.kind==l.NodeKind.TYPE);var i=e,a=i.name.text,h=a,d=i.range.source.internalPath+u.PATH_DELIMITER+a,_=this.program.elementsLookup,m=void 0;if((m=_.get(d))||(m=_.get(h)))switch(m.kind){case c.ElementKind.ENUM:return null!==i.typeArguments&&i.typeArguments.length?(r==s.REPORT&&this.error(o.DiagnosticCode.Type_0_is_not_generic,e.range,m.internalName),null):p.Type.i32;case c.ElementKind.CLASS_PROTOTYPE:var 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=p.typesToString(t),o=new c.FunctionPrototype(this.program,i,n.internalName+"<"+a+">"+u.INSTANCE_DELIMITER+i,e.declaration,n,e.decoratorFlags);return o.flags=e.flags,o.operatorKind=e.operatorKind,o.classTypeArguments=t,o},t.prototype.resolveFunctionInclTypeArguments=function(e,t,r,n,i){void 0===i&&(i=s.REPORT);var a=null;return!e.is(u.CommonFlags.GENERIC)||(assert(null!=t&&0!=t.length),a=this.resolveTypeArguments(assert(e.declaration.typeParameters),t,r,n,i))?this.resolveFunction(e,a,r,i):null},t.prototype.resolveClass=function(e,t,r,n){var h,d,_,m,y,g,E,T;void 0===r&&(r=null),void 0===n&&(n=s.REPORT);var f=t?p.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,l=c.length;assert(l>0);var p=null!==t?t.length:0;if(l!=p)return i==s.REPORT&&this.error(o.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,l.toString(10),p.toString(10)),null;if(!(a=this.resolveTypeArguments(c,t,r,n,i)))return null}else if(null!==t&&t.length)return i==s.REPORT&&this.error(o.DiagnosticCode.Type_0_is_not_generic,n.range,e.internalName),null;return this.resolveClass(e,a,r,i)},t}(o.DiagnosticEmitter);t.Resolver=h},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Operation_not_supported=100]="Operation_not_supported",e[e.Operation_is_unsafe=101]="Operation_is_unsafe",e[e.User_defined_0=102]="User_defined_0",e[e.Conversion_from_type_0_to_1_requires_an_explicit_cast=200]="Conversion_from_type_0_to_1_requires_an_explicit_cast",e[e.Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit=201]="Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit",e[e.Type_0_cannot_be_changed_to_type_1=202]="Type_0_cannot_be_changed_to_type_1",e[e.Type_0_cannot_be_reinterpreted_as_type_1=203]="Type_0_cannot_be_reinterpreted_as_type_1",e[e.Basic_type_0_cannot_be_nullable=204]="Basic_type_0_cannot_be_nullable",e[e.Cannot_export_a_mutable_global=205]="Cannot_export_a_mutable_global",e[e.Compiling_constant_with_non_constant_initializer_as_mutable=206]="Compiling_constant_with_non_constant_initializer_as_mutable",e[e.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa=207]="Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa",e[e.Unmanaged_classes_cannot_implement_interfaces=208]="Unmanaged_classes_cannot_implement_interfaces",e[e.Invalid_regular_expression_flags=209]="Invalid_regular_expression_flags",e[e.Implementation_0_must_match_the_signature_1=210]="Implementation_0_must_match_the_signature_1",e[e.Class_0_is_sealed_and_cannot_be_extended=211]="Class_0_is_sealed_and_cannot_be_extended",e[e.Decorator_0_is_not_valid_here=212]="Decorator_0_is_not_valid_here",e[e.Duplicate_decorator=213]="Duplicate_decorator",e[e.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf=214]="An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf",e[e.Optional_parameter_must_have_an_initializer=215]="Optional_parameter_must_have_an_initializer",e[e.Constructor_of_class_0_must_not_require_any_arguments=216]="Constructor_of_class_0_must_not_require_any_arguments",e[e.Function_0_cannot_be_inlined_into_itself=217]="Function_0_cannot_be_inlined_into_itself",e[e.Unterminated_string_literal=1002]="Unterminated_string_literal",e[e.Identifier_expected=1003]="Identifier_expected",e[e._0_expected=1005]="_0_expected",e[e.A_file_cannot_have_a_reference_to_itself=1006]="A_file_cannot_have_a_reference_to_itself",e[e.Trailing_comma_not_allowed=1009]="Trailing_comma_not_allowed",e[e.Unexpected_token=1012]="Unexpected_token",e[e.A_rest_parameter_must_be_last_in_a_parameter_list=1014]="A_rest_parameter_must_be_last_in_a_parameter_list",e[e.Parameter_cannot_have_question_mark_and_initializer=1015]="Parameter_cannot_have_question_mark_and_initializer",e[e.A_required_parameter_cannot_follow_an_optional_parameter=1016]="A_required_parameter_cannot_follow_an_optional_parameter",e[e.Statements_are_not_allowed_in_ambient_contexts=1036]="Statements_are_not_allowed_in_ambient_contexts",e[e.Initializers_are_not_allowed_in_ambient_contexts=1039]="Initializers_are_not_allowed_in_ambient_contexts",e[e._0_modifier_cannot_be_used_here=1042]="_0_modifier_cannot_be_used_here",e[e.A_rest_parameter_cannot_be_optional=1047]="A_rest_parameter_cannot_be_optional",e[e.A_rest_parameter_cannot_have_an_initializer=1048]="A_rest_parameter_cannot_have_an_initializer",e[e.A_set_accessor_must_have_exactly_one_parameter=1049]="A_set_accessor_must_have_exactly_one_parameter",e[e.A_set_accessor_parameter_cannot_have_an_initializer=1052]="A_set_accessor_parameter_cannot_have_an_initializer",e[e.A_get_accessor_cannot_have_parameters=1054]="A_get_accessor_cannot_have_parameters",e[e.Enum_member_must_have_initializer=1061]="Enum_member_must_have_initializer",e[e.Type_parameters_cannot_appear_on_a_constructor_declaration=1092]="Type_parameters_cannot_appear_on_a_constructor_declaration",e[e.Type_annotation_cannot_appear_on_a_constructor_declaration=1093]="Type_annotation_cannot_appear_on_a_constructor_declaration",e[e.An_accessor_cannot_have_type_parameters=1094]="An_accessor_cannot_have_type_parameters",e[e.A_set_accessor_cannot_have_a_return_type_annotation=1095]="A_set_accessor_cannot_have_a_return_type_annotation",e[e.Type_parameter_list_cannot_be_empty=1098]="Type_parameter_list_cannot_be_empty",e[e.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement=1104]="A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement",e[e.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement=1105]="A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement",e[e.A_return_statement_can_only_be_used_within_a_function_body=1108]="A_return_statement_can_only_be_used_within_a_function_body",e[e.Expression_expected=1109]="Expression_expected",e[e.Type_expected=1110]="Type_expected",e[e.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement=1113]="A_default_clause_cannot_appear_more_than_once_in_a_switch_statement",e[e.Duplicate_label_0=1114]="Duplicate_label_0",e[e.Octal_literals_are_not_allowed_in_strict_mode=1121]="Octal_literals_are_not_allowed_in_strict_mode",e[e.Digit_expected=1124]="Digit_expected",e[e.Hexadecimal_digit_expected=1125]="Hexadecimal_digit_expected",e[e.Unexpected_end_of_text=1126]="Unexpected_end_of_text",e[e.Invalid_character=1127]="Invalid_character",e[e._case_or_default_expected=1130]="_case_or_default_expected",e[e.A_declare_modifier_cannot_be_used_in_an_already_ambient_context=1038]="A_declare_modifier_cannot_be_used_in_an_already_ambient_context",e[e.Type_argument_expected=1140]="Type_argument_expected",e[e.String_literal_expected=1141]="String_literal_expected",e[e.Line_break_not_permitted_here=1142]="Line_break_not_permitted_here",e[e.Declaration_expected=1146]="Declaration_expected",e[e._const_declarations_must_be_initialized=1155]="_const_declarations_must_be_initialized",e[e.Unterminated_regular_expression_literal=1161]="Unterminated_regular_expression_literal",e[e.Interface_declaration_cannot_have_implements_clause=1176]="Interface_declaration_cannot_have_implements_clause",e[e.Binary_digit_expected=1177]="Binary_digit_expected",e[e.Octal_digit_expected=1178]="Octal_digit_expected",e[e.An_implementation_cannot_be_declared_in_ambient_contexts=1183]="An_implementation_cannot_be_declared_in_ambient_contexts",e[e.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive=1198]="An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive",e[e.Unterminated_Unicode_escape_sequence=1199]="Unterminated_Unicode_escape_sequence",e[e.Decorators_are_not_valid_here=1206]="Decorators_are_not_valid_here",e[e._abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration=1242]="_abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration",e[e.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract=1245]="Method_0_cannot_have_an_implementation_because_it_is_marked_abstract",e[e.A_class_may_only_extend_another_class=1311]="A_class_may_only_extend_another_class",e[e.A_parameter_property_cannot_be_declared_using_a_rest_parameter=1317]="A_parameter_property_cannot_be_declared_using_a_rest_parameter",e[e.Duplicate_identifier_0=2300]="Duplicate_identifier_0",e[e.Cannot_find_name_0=2304]="Cannot_find_name_0",e[e.Module_0_has_no_exported_member_1=2305]="Module_0_has_no_exported_member_1",e[e.Generic_type_0_requires_1_type_argument_s=2314]="Generic_type_0_requires_1_type_argument_s",e[e.Type_0_is_not_generic=2315]="Type_0_is_not_generic",e[e.Type_0_is_not_assignable_to_type_1=2322]="Type_0_is_not_assignable_to_type_1",e[e.Index_signature_is_missing_in_type_0=2329]="Index_signature_is_missing_in_type_0",e[e._this_cannot_be_referenced_in_current_location=2332]="_this_cannot_be_referenced_in_current_location",e[e._super_can_only_be_referenced_in_a_derived_class=2335]="_super_can_only_be_referenced_in_a_derived_class",e[e.Property_0_does_not_exist_on_type_1=2339]="Property_0_does_not_exist_on_type_1",e[e.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures=2349]="Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures",e[e.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature=2351]="Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature",e[e.A_function_whose_declared_type_is_not_void_must_return_a_value=2355]="A_function_whose_declared_type_is_not_void_must_return_a_value",e[e.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access=2357]="The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access",e[e.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access=2364]="The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access",e[e.Operator_0_cannot_be_applied_to_types_1_and_2=2365]="Operator_0_cannot_be_applied_to_types_1_and_2",e[e._get_and_set_accessor_must_have_the_same_type=2380]="_get_and_set_accessor_must_have_the_same_type",e[e.Constructor_implementation_is_missing=2390]="Constructor_implementation_is_missing",e[e.Function_implementation_is_missing_or_not_immediately_following_the_declaration=2391]="Function_implementation_is_missing_or_not_immediately_following_the_declaration",e[e.Multiple_constructor_implementations_are_not_allowed=2392]="Multiple_constructor_implementations_are_not_allowed",e[e.Duplicate_function_implementation=2393]="Duplicate_function_implementation",e[e.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local=2395]="Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local",e[e.Type_0_has_no_property_1=2460]="Type_0_has_no_property_1",e[e.The_0_operator_cannot_be_applied_to_type_1=2469]="The_0_operator_cannot_be_applied_to_type_1",e[e.In_const_enum_declarations_member_initializer_must_be_constant_expression=2474]="In_const_enum_declarations_member_initializer_must_be_constant_expression",e[e.Export_declaration_conflicts_with_exported_declaration_of_0=2484]="Export_declaration_conflicts_with_exported_declaration_of_0",e[e.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property=2540]="Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property",e[e.The_target_of_an_assignment_must_be_a_variable_or_a_property_access=2541]="The_target_of_an_assignment_must_be_a_variable_or_a_property_access",e[e.Index_signature_in_type_0_only_permits_reading=2542]="Index_signature_in_type_0_only_permits_reading",e[e.Expected_0_arguments_but_got_1=2554]="Expected_0_arguments_but_got_1",e[e.Expected_at_least_0_arguments_but_got_1=2555]="Expected_at_least_0_arguments_but_got_1",e[e.Expected_0_type_arguments_but_got_1=2558]="Expected_0_type_arguments_but_got_1",e[e.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums=2651]="A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums",e[e.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration=2673]="Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration",e[e.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration=2674]="Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration",e[e.Namespace_0_has_no_exported_member_1=2694]="Namespace_0_has_no_exported_member_1",e[e.File_0_not_found=6054]="File_0_not_found",e[e.Numeric_separators_are_not_allowed_here=6188]="Numeric_separators_are_not_allowed_here",e[e.Multiple_consecutive_numeric_separators_are_not_permitted=6189]="Multiple_consecutive_numeric_separators_are_not_permitted"}(t.DiagnosticCode||(t.DiagnosticCode={})),t.diagnosticCodeToString=function(e){switch(e){case 100:return"Operation not supported.";case 101:return"Operation is unsafe.";case 102:return"User-defined: {0}";case 200:return"Conversion from type '{0}' to '{1}' requires an explicit cast.";case 201:return"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.";case 202:return"Type '{0}' cannot be changed to type '{1}'.";case 203:return"Type '{0}' cannot be reinterpreted as type '{1}'.";case 204:return"Basic type '{0}' cannot be nullable.";case 205:return"Cannot export a mutable global.";case 206:return"Compiling constant with non-constant initializer as mutable.";case 207:return"Unmanaged classes cannot extend managed classes and vice-versa.";case 208:return"Unmanaged classes cannot implement interfaces.";case 209:return"Invalid regular expression flags.";case 210:return"Implementation '{0}' must match the signature '{1}'.";case 211:return"Class '{0}' is sealed and cannot be extended.";case 212:return"Decorator '{0}' is not valid here.";case 213:return"Duplicate decorator.";case 214:return"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.";case 215:return"Optional parameter must have an initializer.";case 216:return"Constructor of class '{0}' must not require any arguments.";case 217:return"Function '{0}' cannot be inlined into itself.";case 1002:return"Unterminated string literal.";case 1003:return"Identifier expected.";case 1005:return"'{0}' expected.";case 1006:return"A file cannot have a reference to itself.";case 1009:return"Trailing comma not allowed.";case 1012:return"Unexpected token.";case 1014:return"A rest parameter must be last in a parameter list.";case 1015:return"Parameter cannot have question mark and initializer.";case 1016:return"A required parameter cannot follow an optional parameter.";case 1036:return"Statements are not allowed in ambient contexts.";case 1039:return"Initializers are not allowed in ambient contexts.";case 1042:return"'{0}' modifier cannot be used here.";case 1047:return"A rest parameter cannot be optional.";case 1048:return"A rest parameter cannot have an initializer.";case 1049:return"A 'set' accessor must have exactly one parameter.";case 1052:return"A 'set' accessor parameter cannot have an initializer.";case 1054:return"A 'get' accessor cannot have parameters.";case 1061:return"Enum member must have initializer.";case 1092:return"Type parameters cannot appear on a constructor declaration.";case 1093:return"Type annotation cannot appear on a constructor declaration.";case 1094:return"An accessor cannot have type parameters.";case 1095:return"A 'set' accessor cannot have a return type annotation.";case 1098:return"Type parameter list cannot be empty.";case 1104:return"A 'continue' statement can only be used within an enclosing iteration statement.";case 1105:return"A 'break' statement can only be used within an enclosing iteration or switch statement.";case 1108:return"A 'return' statement can only be used within a function body.";case 1109:return"Expression expected.";case 1110:return"Type expected.";case 1113:return"A 'default' clause cannot appear more than once in a 'switch' statement.";case 1114:return"Duplicate label '{0}'.";case 1121:return"Octal literals are not allowed in strict mode.";case 1124:return"Digit expected.";case 1125:return"Hexadecimal digit expected.";case 1126:return"Unexpected end of text.";case 1127:return"Invalid character.";case 1130:return"'case' or 'default' expected.";case 1038:return"A 'declare' modifier cannot be used in an already ambient context.";case 1140:return"Type argument expected.";case 1141:return"String literal expected.";case 1142:return"Line break not permitted here.";case 1146:return"Declaration expected.";case 1155:return"'const' declarations must be initialized.";case 1161:return"Unterminated regular expression literal.";case 1176:return"Interface declaration cannot have 'implements' clause.";case 1177:return"Binary digit expected.";case 1178:return"Octal digit expected.";case 1183:return"An implementation cannot be declared in ambient contexts.";case 1198:return"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.";case 1199:return"Unterminated Unicode escape sequence.";case 1206:return"Decorators are not valid here.";case 1242:return"'abstract' modifier can only appear on a class, method, or property declaration.";case 1245:return"Method '{0}' cannot have an implementation because it is marked abstract.";case 1311:return"A class may only extend another class.";case 1317:return"A parameter property cannot be declared using a rest parameter.";case 2300:return"Duplicate identifier '{0}'.";case 2304:return"Cannot find name '{0}'.";case 2305:return"Module '{0}' has no exported member '{1}'.";case 2314:return"Generic type '{0}' requires {1} type argument(s).";case 2315:return"Type '{0}' is not generic.";case 2322:return"Type '{0}' is not assignable to type '{1}'.";case 2329:return"Index signature is missing in type '{0}'.";case 2332:return"'this' cannot be referenced in current location.";case 2335:return"'super' can only be referenced in a derived class.";case 2339:return"Property '{0}' does not exist on type '{1}'.";case 2349:return"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.";case 2351:return"Cannot use 'new' with an expression whose type lacks a construct signature.";case 2355:return"A function whose declared type is not 'void' must return a value.";case 2357:return"The operand of an increment or decrement operator must be a variable or a property access.";case 2364:return"The left-hand side of an assignment expression must be a variable or a property access.";case 2365:return"Operator '{0}' cannot be applied to types '{1}' and '{2}'.";case 2380:return"'get' and 'set' accessor must have the same type.";case 2390:return"Constructor implementation is missing.";case 2391:return"Function implementation is missing or not immediately following the declaration.";case 2392:return"Multiple constructor implementations are not allowed.";case 2393:return"Duplicate function implementation.";case 2395:return"Individual declarations in merged declaration '{0}' must be all exported or all local.";case 2460:return"Type '{0}' has no property '{1}'.";case 2469:return"The '{0}' operator cannot be applied to type '{1}'.";case 2474:return"In 'const' enum declarations member initializer must be constant expression.";case 2484:return"Export declaration conflicts with exported declaration of '{0}'.";case 2540:return"Cannot assign to '{0}' because it is a constant or a read-only property.";case 2541:return"The target of an assignment must be a variable or a property access.";case 2542:return"Index signature in type '{0}' only permits reading.";case 2554:return"Expected {0} arguments, but got {1}.";case 2555:return"Expected at least {0} arguments, but got {1}.";case 2558:return"Expected {0} type arguments, but got {1}.";case 2651:return"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.";case 2673:return"Constructor of class '{0}' is private and only accessible within the class declaration.";case 2674:return"Constructor of class '{0}' is protected and only accessible within the class declaration.";case 2694:return"Namespace '{0}' has no exported member '{1}'.";case 6054:return"File '{0}' not found.";case 6188:return"Numeric separators are not allowed here.";case 6189:return"Multiple consecutive numeric separators are not permitted.";default:return""}}},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=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(20),c=r(1),l=r(4),p=r(0),u=r(5),h=r(8),d=r(2),_=r(6),m=r(3);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(s=t.Target||(t.Target={}));var y=function(){function e(){this.target=s.WASM32,this.noTreeShaking=!1,this.noAssert=!1,this.importMemory=!1,this.importTable=!1,this.sourceMap=!1,this.memoryBase=0,this.globalAliases=null,this.features=0,this.optimizeLevelHint=0,this.shrinkLevelHint=0}return Object.defineProperty(e.prototype,"isWasm64",{get:function(){return this.target==s.WASM64},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"usizeType",{get:function(){return this.target==s.WASM64?_.Type.usize64:_.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==s.WASM64?_.Type.isize64:_.Type.isize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nativeSizeType",{get:function(){return this.target==s.WASM64?l.NativeType.I64:l.NativeType.I32},enumerable:!0,configurable:!0}),e.prototype.hasFeature=function(e){return 0!=(this.features&e)},e}();t.Options=y,function(e){e[e.NONE=0]="NONE",e[e.SIGN_EXTENSION=1]="SIGN_EXTENSION",e[e.MUTABLE_GLOBAL=2]="MUTABLE_GLOBAL"}(t.Feature||(t.Feature={})),function(e){e[e.NONE=0]="NONE",e[e.IMPLICIT=1]="IMPLICIT",e[e.EXPLICIT=2]="EXPLICIT"}(t.ConversionKind||(t.ConversionKind={})),function(e){e[e.NONE=0]="NONE",e[e.WRAP=1]="WRAP"}(t.WrapMode||(t.WrapMode={}));var g,E,T=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.currentOuterFunction=null,n.currentInlineFunctions=[],n.currentEnum=null,n.currentType=_.Type.void,n.memorySegments=[],n.stringSegments=new Map,n.functionTable=[],n.argcVar=0,n.argcSet=0,n.needsIterateRoots=!1,n.f32ModInstance=null,n.f64ModInstance=null,n.f32PowInstance=null,n.f64PowInstance=null,n.program=t,n.resolver=t.resolver,r||(r=new y),n.options=r,n.memoryOffset=i64_new(max(r.memoryBase,8)),n.module=l.Module.create(),n}return n(t,e),t.compile=function(e,r){return void 0===r&&(r=null),new t(e,r).compile()},t.prototype.compile=function(){var e,t,r=this.options,n=this.module,s=this.program;s.initialize(r);var c=new u.Function(s.startFunction,"start",new _.Signature([],_.Type.void));this.startFunctionInstance=c;var p=new Array;this.startFunctionBody=p,this.currentFunction=c;for(var h=s.sources,d=0,m=h.length;d"),!1;e.type=this.currentType}else assert(!1);if(e.is(p.CommonFlags.AMBIENT)&&e.hasDecorator(u.DecoratorFlags.BUILTIN))return!0;var a=e.type.toNativeType(),s=e.is(p.CommonFlags.CONST)||e.is(p.CommonFlags.STATIC|p.CommonFlags.READONLY);if(e.is(p.CommonFlags.AMBIENT))return s||this.options.hasFeature(2)?(e.set(p.CommonFlags.MODULE_IMPORT),r?f(e,r,e.parent):(g="env",E=e.simpleName),t.addGlobalImport(e.internalName,g,E,a),e.set(p.CommonFlags.COMPILED),!0):(this.error(c.DiagnosticCode.Operation_not_supported,assert(r).range),!1);var o=!1;if(null!==r&&null!==r.initializer){if(n||(n=this.compileExpression(r.initializer,e.type,1,1)),l.getExpressionId(n)!=l.ExpressionId.Const&&(s?(n=t.precomputeExpression(n),l.getExpressionId(n)!=l.ExpressionId.Const&&(this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,r.range),o=!0)):o=!0),e.hasDecorator(u.DecoratorFlags.INLINE)&&!o){switch(assert(l.getExpressionId(n)==l.ExpressionId.Const),l.getExpressionType(n)){case l.NativeType.I32:e.constantValueKind=1,e.constantIntegerValue=i64_new(l.getConstValueI32(n),0);break;case l.NativeType.I64:e.constantValueKind=1,e.constantIntegerValue=i64_new(l.getConstValueI64Low(n),l.getConstValueI64High(n));break;case l.NativeType.F32:e.constantValueKind=2,e.constantFloatValue=l.getConstValueF32(n);break;case l.NativeType.F64:e.constantValueKind=2,e.constantFloatValue=l.getConstValueF64(n);break;default:return assert(!1),!1}e.set(p.CommonFlags.INLINED)}}else n=e.type.toNativeZero(t);var h=e.internalName;return o?(t.addGlobal(h,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(h,n))):t.addGlobal(h,a,!s,n),!0},t.prototype.compileEnumDeclaration=function(e){var t=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(t.kind==u.ElementKind.ENUM),this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){var t,r;if(e.is(p.CommonFlags.COMPILED))return!0;e.set(p.CommonFlags.COMPILED);var n=this.module;this.currentEnum=e;var a=null,s=!1;if(e.members)try{for(var o=i(e.members.values()),h=o.next();!h.done;h=o.next()){var d=h.value;if(d.kind==u.ElementKind.ENUMVALUE){var m=!1,y=d,g=y.declaration;y.set(p.CommonFlags.COMPILED);var E=void 0;g.value?(E=this.compileExpression(g.value,_.Type.i32,1,0),l.getExpressionId(E)!=l.ExpressionId.Const&&(e.is(p.CommonFlags.CONST)?(E=n.precomputeExpression(E),l.getExpressionId(E)!=l.ExpressionId.Const&&(this.error(c.DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,g.value.range),m=!0)):m=!0)):null==a?E=n.createI32(0):(s&&this.error(c.DiagnosticCode.Enum_member_must_have_initializer,g.range),E=n.createBinary(l.BinaryOp.AddI32,n.createGetGlobal(a.internalName,l.NativeType.I32),n.createI32(1)),E=n.precomputeExpression(E),l.getExpressionId(E)!=l.ExpressionId.Const&&(e.is(p.CommonFlags.CONST)&&this.error(c.DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,g.range),m=!0)),m?(n.addGlobal(y.internalName,l.NativeType.I32,!0,n.createI32(0)),this.startFunctionBody.push(n.createSetGlobal(y.internalName,E)),s=!0):(n.addGlobal(y.internalName,l.NativeType.I32,!e.is(p.CommonFlags.CONST),E),s=!1),a=y}}}catch(e){t={error:e}}finally{try{h&&!h.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return this.currentEnum=null,!0},t.prototype.compileFunctionDeclaration=function(e,t,r){void 0===r&&(r=null);var n=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(n.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.compileFunctionUsingTypeArguments(n,t,r,null,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n,i){var a=this.resolver.resolveFunctionInclTypeArguments(e,t,r,i);return a?(a.outerScope=n,this.compileFunction(a)?a:null):null},t.prototype.ensureFunctionType=function(e,t,r){void 0===r&&(r=null);var n,i=e?e.length:0,a=0;if(r?((n=new Array(1+i))[0]=r.toNativeType(),a=1):n=new Array(i),e)for(var s=0;s=0)return e.functionTableIndex;var t=this.functionTable,r=t.length;return!e.is(p.CommonFlags.TRAMPOLINE)&&e.signature.requiredParameters=0?"case"+h.toString(10):"break")+"|"+a);var y=t.createBlock("case0|"+a,p,l.NativeType.None),g=!0,E=!0,T=!0,f=!0;for(d=0;d=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),o.compileAbort(this,null,e)},t.prototype.compileTryStatement=function(e){return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileVariableStatement=function(e,t){void 0===t&&(t=!1);var r=this.program,n=this.currentFunction,i=e.declarations,a=i.length;if(t||n==this.startFunctionInstance&&e.parent&&e.parent.kind==d.NodeKind.SOURCE){for(var s=0;s");continue}E=this.currentType}var f=!1;if(y.is(p.CommonFlags.CONST))if(T)if(T=this.module.precomputeExpression(T),l.getExpressionId(T)==l.ExpressionId.Const){var I=new u.Local(r,g,-1,E);switch(l.getExpressionType(T)){case l.NativeType.I32:I=I.withConstantIntegerValue(i64_new(l.getConstValueI32(T),0));break;case l.NativeType.I64:I=I.withConstantIntegerValue(i64_new(l.getConstValueI64Low(T),l.getConstValueI64High(T)));break;case l.NativeType.F32:I=I.withConstantFloatValue(l.getConstValueF32(T));break;case l.NativeType.F64:I=I.withConstantFloatValue(l.getConstValueF64(T));break;default:return assert(!1),this.module.createUnreachable()}var v=n.flow.scopedLocals;if(v){if(v.has(g))return this.error(c.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(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range);else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,y.range);if(!f){I=void 0;I=y.isAny(p.CommonFlags.LET|p.CommonFlags.CONST)||h.is(2048)?h.addScopedLocal(E,g,!1,y):n.addLocal(E,g,y),T?(o.push(this.compileAssignmentWithValue(y.name,T)),I.type.is(36)&&h.setLocalWrapped(I.index,!h.canOverflow(T,E))):I.type.is(36)&&h.setLocalWrapped(I.index,!0)}}return o.length?1==o.length?o[0]:this.module.createBlock(null,o,l.NativeType.None):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,_.Type.void,2,0)},t.prototype.compileWhileStatement=function(e){var t=this.module,r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var n=t.precomputeExpression(r);if(l.getExpressionId(n)==l.ExpressionId.Const&&l.getExpressionType(n)==l.NativeType.I32){if(!l.getConstValueI32(n))return t.createNop()}else r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType)}var i=this.currentFunction,a=i.enterBreakContext(),s=i.flow,o=s.fork();i.flow=o;var c="break|"+a;o.breakLabel=c;var u="continue|"+a;o.continueLabel=u;var h=this.compileStatement(e.statement),d=o.isAny(29);return i.flow=o.free(),i.leaveBreakContext(),o.unset(792),s.inheritConditional(o),t.createBlock(c,[t.createLoop(u,t.createIf(r,d?h:t.createBlock(null,[h,t.createBreak(u)],l.NativeType.None)))],l.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(_.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&a:0);case 2:case 7:return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 4:case 9:if(!e.program.options.isWasm64)return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 3:case 8:return 1==e.constantValueKind?this.module.createI64(i64_low(e.constantIntegerValue),i64_high(e.constantIntegerValue)):this.module.createI64(0);case 12:if(!e.hasDecorator(u.DecoratorFlags.BUILTIN)||t!=_.Type.f32)return this.module.createF64(e.constantFloatValue);this.currentType=_.Type.f32;case 11:return this.module.createF32(e.constantFloatValue);default:return assert(!1),this.module.createUnreachable()}},t.prototype.compileExpression=function(e,t,r,n){var i;switch(this.currentType=t,e.kind){case d.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case d.NodeKind.BINARY:i=this.compileBinaryExpression(e,t);break;case d.NodeKind.CALL:i=this.compileCallExpression(e,t);break;case d.NodeKind.COMMA:i=this.compileCommaExpression(e,t);break;case d.NodeKind.ELEMENTACCESS:i=this.compileElementAccessExpression(e,t);break;case d.NodeKind.FUNCTION:i=this.compileFunctionExpression(e,t);break;case d.NodeKind.IDENTIFIER:case d.NodeKind.FALSE:case d.NodeKind.NULL:case d.NodeKind.THIS:case d.NodeKind.SUPER:case d.NodeKind.TRUE:i=this.compileIdentifierExpression(e,t,0==r);break;case d.NodeKind.INSTANCEOF:i=this.compileInstanceOfExpression(e,t);break;case d.NodeKind.LITERAL:i=this.compileLiteralExpression(e,t);break;case d.NodeKind.NEW:i=this.compileNewExpression(e,t);break;case d.NodeKind.PARENTHESIZED:i=this.compileParenthesizedExpression(e,t);break;case d.NodeKind.PROPERTYACCESS:i=this.compilePropertyAccessExpression(e,t,0==r);break;case d.NodeKind.TERNARY:i=this.compileTernaryExpression(e,t);break;case d.NodeKind.UNARYPOSTFIX:i=this.compileUnaryPostfixExpression(e,t);break;case d.NodeKind.UNARYPREFIX:i=this.compileUnaryPrefixExpression(e,t);break;default:this.error(c.DiagnosticCode.Operation_not_supported,e.range),i=this.module.createUnreachable()}var a=this.currentType;return 0!=r&&a!=t?(i=this.convertExpression(i,a,t,r,n,e),this.currentType=t):1==n&&(i=this.ensureSmallIntegerWrap(i,a)),this.options.sourceMap&&this.addDebugLocation(i,e.range),i},t.prototype.compileExpressionRetainType=function(e,t,r){return this.compileExpression(e,t==_.Type.void?_.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r,n){return this.module.precomputeExpression(this.compileExpression(e,t,r,n))},t.prototype.convertExpression=function(e,t,r,n,i,a){assert(0!=n);var s=this.module;return 13==t.kind?(assert(13!=r.kind),this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,a.range,t.toString(),r.toString()),s.createUnreachable()):13==r.kind?s.createDrop(e):(t.isAssignableTo(r)||1==n&&this.error(c.DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,a.range,t.toString(),r.toString()),t.is(8)?r.is(8)?11==t.kind?12==r.kind&&(e=s.createUnary(l.UnaryOp.PromoteF32,e)):11==r.kind&&(e=s.createUnary(l.UnaryOp.DemoteF64,e)):r.is(4)?e=11==t.kind?r.is(1)?r.is(64)?s.createUnary(l.UnaryOp.TruncF32ToI64,e):s.createUnary(l.UnaryOp.TruncF32ToI32,e):r.is(64)?s.createUnary(l.UnaryOp.TruncF32ToU64,e):s.createUnary(l.UnaryOp.TruncF32ToU32,e):r.is(1)?r.is(64)?s.createUnary(l.UnaryOp.TruncF64ToI64,e):s.createUnary(l.UnaryOp.TruncF64ToI32,e):r.is(64)?s.createUnary(l.UnaryOp.TruncF64ToU64,e):s.createUnary(l.UnaryOp.TruncF64ToU32,e):(assert(0==r.flags,"void type expected"),e=s.createDrop(e)):t.is(4)&&r.is(8)?e=11==r.kind?t.is(64)?s.createUnary(t.is(1)?l.UnaryOp.ConvertI64ToF32:l.UnaryOp.ConvertU64ToF32,e):s.createUnary(t.is(1)?l.UnaryOp.ConvertI32ToF32:l.UnaryOp.ConvertU32ToF32,e):t.is(64)?s.createUnary(t.is(1)?l.UnaryOp.ConvertI64ToF64:l.UnaryOp.ConvertU64ToF64,e):s.createUnary(t.is(1)?l.UnaryOp.ConvertI32ToF64:l.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=s.createUnary(l.UnaryOp.WrapI64,e)):r.is(64)?(e=s.createUnary(r.is(1)?l.UnaryOp.ExtendI32:l.UnaryOp.ExtendU32,this.ensureSmallIntegerWrap(e,t)),i=0):t.is(32)&&t.size",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.GtI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GtI64:l.BinaryOp.GtI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.GtI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.GtU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GtU64:l.BinaryOp.GtU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.GtU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.GtF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.GtF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.LESSTHAN_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.LE)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"<=",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.LeI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.LeI64:l.BinaryOp.LeI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.LeI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.LeU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.LeU64:l.BinaryOp.LeU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.LeU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.LeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.LeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.GREATERTHAN_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.GE)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,">=",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.GeI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GeI64:l.BinaryOp.GeI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.GeI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.GeU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GeU64:l.BinaryOp.GeU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.GeU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.GeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.GeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EQUALS_EQUALS_EQUALS:case h.Token.EQUALS_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,g==h.Token.EQUALS_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.EQ)){o=this.compileBinaryOverload(v,d,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,h.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.EqI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.EqI64:l.BinaryOp.EqI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.EqI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.EqF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.EqF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EXCLAMATION_EQUALS_EQUALS:case h.Token.EXCLAMATION_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,g==h.Token.EXCLAMATION_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.NE)){o=this.compileBinaryOverload(v,d,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,h.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.NeI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.NeI64:l.BinaryOp.NeI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.NeI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.NeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.NeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EQUALS:return this.compileAssignment(d,m,t);case h.Token.PLUS_EQUALS:y=!0;case h.Token.PLUS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.ADD)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"+",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.AddI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.AddI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.AddF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.AddF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.MINUS_EQUALS:y=!0;case h.Token.MINUS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.SUB)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"-",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.SubI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.SubI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.SubF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.SubF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.ASTERISK_EQUALS:y=!0;case h.Token.ASTERISK:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.MUL)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(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=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"*",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.MulI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.MulI64:l.BinaryOp.MulI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.MulI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.MulF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.MulF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.ASTERISK_ASTERISK_EQUALS:y=!0;case h.Token.ASTERISK_ASTERISK:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.POW)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var E=void 0;if(11==this.currentType.kind){if(i=this.compileExpression(m,_.Type.f32,1,0),a=this.currentType,!(E=this.f32PowInstance)){if(!(T=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=p.createUnreachable();break}if(!(f=T.members?T.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),o=p.createUnreachable();break}assert(f.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=E=this.resolver.resolveFunction(f,null)}}else if(r=this.convertExpression(r,this.currentType,_.Type.f64,1,0,d),n=this.currentType,i=this.compileExpression(m,_.Type.f64,1,0),a=this.currentType,!(E=this.f64PowInstance)){if(!(T=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=p.createUnreachable();break}if(!(f=T.members?T.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),o=p.createUnreachable();break}assert(f.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=E=this.resolver.resolveFunction(f,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;case h.Token.SLASH_EQUALS:y=!0;case h.Token.SLASH:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.DIV)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(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=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"/",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.DivI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.DivI64:l.BinaryOp.DivI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.DivI64,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.DivU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.DivU64:l.BinaryOp.DivU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.DivU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.DivF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.DivF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.PERCENT_EQUALS:y=!0;case h.Token.PERCENT:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.REM)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(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=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"%",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.RemI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.RemI64:l.BinaryOp.RemI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.RemI64,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.RemU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.RemU64:l.BinaryOp.RemU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.RemU64,r,i);break;case 11:if(!(E=this.f32ModInstance)){if(!(T=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=p.createUnreachable();break}if(!(f=T.members?T.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),o=p.createUnreachable();break}assert(f.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=E=this.resolver.resolveFunction(f,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;case 12:if(!(E=this.f64ModInstance)){var T,f;if(!(T=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=p.createUnreachable();break}if(!(f=T.members?T.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),o=p.createUnreachable();break}assert(f.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=E=this.resolver.resolveFunction(f,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.LESSTHAN_LESSTHAN_EQUALS:y=!0;case h.Token.LESSTHAN_LESSTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHL)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.ShlI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.ShlI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShlI64:l.BinaryOp.ShlI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.GREATERTHAN_GREATERTHAN_EQUALS:y=!0;case h.Token.GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType,this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.ShrI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.ShrI64,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrI64:l.BinaryOp.ShrI32,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.ShrU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.ShrU64,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrU64:l.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:y=!0;case h.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHR_U)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.ShrU32,r,i);case 0:case 1:case 2:case 7:o=p.createBinary(l.BinaryOp.ShrU32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.ShrU64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrU64:l.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.AMPERSAND_EQUALS:y=!0;case h.Token.AMPERSAND:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_AND)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"&",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.AndI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.AndI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.AndI64:l.BinaryOp.AndI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.BAR_EQUALS:y=!0;case h.Token.BAR:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_OR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"|",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.OrI32,r,i);break;case 2:case 7:o=p.createBinary(l.BinaryOp.OrI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.OrI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.OrI64:l.BinaryOp.OrI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.CARET_EQUALS:y=!0;case h.Token.CARET:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){var I,v;if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_XOR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"^",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.XorI32,r,i);break;case 2:case 7:o=p.createBinary(l.BinaryOp.XorI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.XorI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.XorI64:l.BinaryOp.XorI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.AMPERSAND_AMPERSAND:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,o=p.cloneExpression(r,!0,0))this.makeIsTrueish(r,this.currentType),o=p.createIf(this.makeIsTrueish(r,this.currentType),i,o);else{var A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=p.createIf(this.makeIsTrueish(p.createTeeLocal(C.index,r),this.currentType),i,p.createGetLocal(assert(C).index,this.currentType.toNativeType()))}break;case h.Token.BAR_BAR:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,o=this.module.cloneExpression(r,!0,0))o=this.module.createIf(this.makeIsTrueish(r,this.currentType),o,i);else{A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=p.createIf(this.makeIsTrueish(p.createTeeLocal(C.index,r),this.currentType),p.createGetLocal(assert(C).index,this.currentType.toNativeType()),i)}break;default:assert(!1),o=this.module.createUnreachable()}return y?this.compileAssignmentWithValue(d,o,t!=_.Type.void):o},t.prototype.compileUnaryOverload=function(e,t,r,n){var i,a=0;return e.is(p.CommonFlags.INSTANCE)?(a=r,i=[]):i=[t],this.compileCallDirect(e,i,n,a,e.hasDecorator(u.DecoratorFlags.INLINE))},t.prototype.compileBinaryOverload=function(e,t,r,n,i){var a,s=0;if(e.is(p.CommonFlags.INSTANCE)){var o=assert(e.parent);assert(o.kind==u.ElementKind.CLASS),s=r,a=[n]}else a=[t,n];return this.compileCallDirect(e,a,i,s,e.hasDecorator(u.DecoratorFlags.INLINE))},t.prototype.compileAssignment=function(e,t,r){var n,i=this.program.resolver,a=this.currentFunction,s=i.resolveExpression(e,a);if(!s)return this.module.createUnreachable();switch(s.kind){case u.ElementKind.GLOBAL:if(!this.compileGlobal(s))return this.module.createUnreachable();assert(s.type!=_.Type.void);case u.ElementKind.LOCAL:case u.ElementKind.FIELD:n=s.type;break;case u.ElementKind.PROPERTY:var o=s.setterPrototype;if(o){var l=this.resolver.resolveFunction(o,null);if(!l)return this.module.createUnreachable();assert(1==l.signature.parameterTypes.length),n=l.signature.parameterTypes[0];break}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,s.internalName),this.module.createUnreachable();case u.ElementKind.CLASS:if(i.currentElementExpression){var p=a.flow.is(4096),h=s.lookupOverload(u.OperatorKind.INDEXED_SET,p);if(!h)return s.lookupOverload(u.OperatorKind.INDEXED_GET,p)?this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,s.internalName):this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,s.internalName),this.module.createUnreachable();assert(2==h.signature.parameterTypes.length),n=h.signature.parameterTypes[1];break}default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}assert(n!=_.Type.void);var d=this.compileExpression(t,n,1,0);return this.compileAssignmentWithValue(e,d,r!=_.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.resolver.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();switch(i.kind){case u.ElementKind.LOCAL:var a=i.type;if(assert(a!=_.Type.void),this.currentType=r?a:_.Type.void,i.is(p.CommonFlags.CONST))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var s=this.currentFunction.flow;return a.is(36)&&s.setLocalWrapped(i.index,!s.canOverflow(t,a)),r?n.createTeeLocal(i.index,t):n.createSetLocal(i.index,t);case u.ElementKind.GLOBAL:if(!this.compileGlobal(i))return n.createUnreachable();a=i.type;if(assert(a!=_.Type.void),this.currentType=r?a:_.Type.void,i.is(p.CommonFlags.CONST))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();if(t=this.ensureSmallIntegerWrap(t,a),r){var o=a.toNativeType(),l=i.internalName;return n.createBlock(null,[n.createSetGlobal(l,t),n.createGetGlobal(l,o)],o)}return n.createSetGlobal(i.internalName,t);case u.ElementKind.FIELD:var h=i.declaration;if(i.is(p.CommonFlags.READONLY)&&!this.currentFunction.is(p.CommonFlags.CONSTRUCTOR)&&null!=h&&null==h.initializer)return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0);a=i.type;this.currentType=r?a:_.Type.void;o=a.toNativeType();if(10==a.kind&&(t=this.ensureSmallIntegerWrap(t,a)),r){s=(L=this.currentFunction).flow;var 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,o),o,i.memoryOffset),n.createGetLocal(y,o)],o)}return n.createStore(a.byteSize,m,t,o,i.memoryOffset);case u.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)){d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0);return this.makeCallDirect(E,[m,t])}return this.makeCallDirect(E,[t])}var 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)){d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,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(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();case u.ElementKind.CLASS:var v=this.resolver.currentElementExpression;if(v){var A=this.currentFunction.flow.is(4096),C=i.lookupOverload(u.OperatorKind.INDEXED_GET,A);if(!C)return this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.internalName),n.createUnreachable();var N=i.lookupOverload(u.OperatorKind.INDEXED_SET,A);if(!N)return this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.internalName),this.currentType=r?C.signature.returnType:_.Type.void,n.createUnreachable();var O=i.type,S=(d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0),this.compileExpression(v,_.Type.i32,1,0));if(r){var L,b=(L=this.currentFunction).getTempLocal(O,!1),k=L.getAndFreeTempLocal(this.currentType,!1),R=C.signature.returnType;return this.currentFunction.freeTempLocal(b),n.createBlock(null,[this.makeCallDirect(N,[n.createTeeLocal(b.index,m),n.createTeeLocal(k.index,S),t]),this.makeCallDirect(C,[n.createGetLocal(b.index,b.type.toNativeType()),n.createGetLocal(k.index,k.type.toNativeType())])],R.toNativeType())}return this.makeCallDirect(N,[m,S,t])}}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()},t.prototype.compileCallExpression=function(e,t){var r,n,i=this.module,a=this.currentFunction,s=this.resolver.resolveExpression(e.expression,a);if(!s)return i.createUnreachable();switch(s.kind){case u.ElementKind.FUNCTION_PROTOTYPE:var o=s,h=e.typeArguments;if(o.hasDecorator(u.DecoratorFlags.BUILTIN))return this.compileCallExpressionBuiltin(o,e,t);var m=null;if(h){if(!o.is(p.CommonFlags.GENERIC))return this.error(c.DiagnosticCode.Type_0_is_not_generic,e.expression.range,o.internalName),i.createUnreachable();m=this.resolver.resolveFunctionInclTypeArguments(o,h,this.currentFunction.flow.contextualTypeArguments,e)}else{if(o.is(p.CommonFlags.GENERIC)){for(var y=new Map,g=assert(o.declaration.typeParameters),E=g.length,T=0;Ts&&!i)||(this.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,s.toString(),t.toString()),!1)},t.prototype.compileCallDirect=function(e,t,r,n,i){void 0===n&&(n=0),void 0===i&&(i=!1);var a=t.length,s=e.signature;if(!this.checkCallSignature(s,a,0!=n,r))return this.module.createUnreachable();if(i){if(assert(!e.is(p.CommonFlags.TRAMPOLINE)),!this.currentInlineFunctions.includes(e)){this.currentInlineFunctions.push(e);var o=this.compileCallInlineUnchecked(e,t,r,n);return this.currentInlineFunctions.pop(),o}this.warning(c.DiagnosticCode.Function_0_cannot_be_inlined_into_itself,r.range,e.internalName)}var l=n?a+1:a,u=new Array(l),h=0;n&&(u[0]=n,h=1);for(var d=s.parameterTypes,_=0;_=i);var o=this.module;if(!this.compileFunction(e))return o.createUnreachable();var c=e.signature.returnType,l=e.is(p.CommonFlags.MODULE_IMPORT);if(r=a),this.ensureFunctionType(e.parameterTypes,e.returnType,e.thisType);var c=this.module;if(n=0),this.currentType=T,this.module.createGetLocal(f,T.toNativeType());case u.ElementKind.GLOBAL:if(!this.compileGlobal(E))return this.module.createUnreachable();var I=E.type;return assert(I!=_.Type.void),E.is(p.CommonFlags.INLINED)?this.compileInlineConstant(E,t,r):(this.currentType=I,this.module.createGetGlobal(E.internalName,I.toNativeType()));case u.ElementKind.ENUMVALUE:return E.is(p.CommonFlags.COMPILED)?(this.currentType=_.Type.i32,E.is(p.CommonFlags.INLINED)?this.module.createI32(E.constantValue):this.module.createGetGlobal(E.internalName,l.NativeType.I32)):(this.error(c.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,e.range),this.currentType=_.Type.i32,this.module.createUnreachable());case u.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(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileInstanceOfExpression=function(e,t){var r=this.module,n=this.compileExpressionRetainType(e.expression,this.options.usizeType,0),i=this.currentType,a=this.resolver.resolveType(e.isType);return this.currentType=_.Type.bool,a?i.is(512)&&!a.is(512)?i.nonNullableType.isAssignableTo(a)?r.createBinary(i.is(64)?l.BinaryOp.NeI64:l.BinaryOp.NeI32,n,i.toNativeZero(r)):r.createI32(0):r.createI32(i.isAssignableTo(a,!0)?1:0):r.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){void 0===r&&(r=!1);var n=this.module;switch(e.literalKind){case d.LiteralKind.ARRAY:assert(!r);var i=t.classReference;return i&&i.prototype==this.program.arrayPrototype?this.compileArrayLiteral(assert(i.typeArguments)[0],e.elementExpressions,e):(this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable());case d.LiteralKind.FLOAT:var a=e.value;return r&&(a=-a),t==_.Type.f32?n.createF32(a):(this.currentType=_.Type.f64,n.createF64(a));case d.LiteralKind.INTEGER:var s=e.value;switch(r&&(s=i64_sub(i64_new(0),s)),t.kind){case 0:if(i64_is_i8(s))return n.createI32(i64_low(s));break;case 5:if(i64_is_u8(s))return n.createI32(i64_low(s));break;case 1:if(i64_is_i16(s))return n.createI32(i64_low(s));break;case 6:if(i64_is_u16(s))return n.createI32(i64_low(s));break;case 2:if(i64_is_i32(s))return n.createI32(i64_low(s));break;case 7:if(i64_is_u32(s))return n.createI32(i64_low(s));break;case 10:if(i64_is_bool(s))return n.createI32(i64_low(s));break;case 4:if(!this.options.isWasm64){if(i64_is_i32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 9:if(!this.options.isWasm64){if(i64_is_u32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 3:case 8:return n.createI64(i64_low(s),i64_high(s));case 11:if(i64_is_f32(s))return n.createF32(i64_to_f32(s));break;case 12:if(i64_is_f64(s))return n.createF64(i64_to_f64(s));break;case 13:break;default:return assert(!1),n.createUnreachable()}return i64_is_i32(s)?(this.currentType=_.Type.i32,n.createI32(i64_low(s))):i64_is_u32(s)?(this.currentType=_.Type.u32,n.createI32(i64_low(s))):(this.currentType=_.Type.i64,n.createI64(i64_low(s),i64_high(s)));case d.LiteralKind.STRING:return assert(!r),this.compileStaticString(e.value);case d.LiteralKind.OBJECT:return assert(!r),this.compileObjectLiteral(e,t)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,n.createUnreachable()},t.prototype.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,l=this.program.typesLookup.get("string");return this.currentType=l||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!=u.ElementKind.CLASS_PROTOTYPE)return i.createUnreachable();var s=this.resolver.resolveClass(a,[e]);if(!s)return i.createUnreachable();var o=s.type,p=t.length;if(p){var h=e.toNativeType(),d=void 0,_=void 0;switch(h){case l.NativeType.I32:d=changetype(new Int32Array(p)),_=4*p;break;case l.NativeType.I64:d=changetype(new Array(p)),_=8*p;break;case l.NativeType.F32:d=changetype(new Float32Array(p)),_=4*p;break;case l.NativeType.F64:d=changetype(new Float64Array(p)),_=8*p;break;default:return assert(!1),i.createUnreachable()}for(var y=new Array(p),g=void 0,E=0;E",t.toString()),r.createUnreachable();var i=n.constructorInstance;if(i){if(i.signature.requiredParameters)return this.error(c.DiagnosticCode.Constructor_of_class_0_must_not_require_any_arguments,e.range,n.toString()),r.createUnreachable();if(i.is(p.CommonFlags.PRIVATE))return this.error(c.DiagnosticCode.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,e.range,n.toString()),r.createUnreachable();if(i.is(p.CommonFlags.PROTECTED))return this.error(c.DiagnosticCode.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,e.range,n.toString()),r.createUnreachable()}var a=e.names,s=a.length,l=e.values,h=n.members,d=!1,_=new Array(s+2),m=this.currentFunction.getTempLocal(this.options.usizeType);assert(s==l.length);for(var y=0,g=s;y=0);var h=this.compileExpressionRetainType(o,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 u.ElementKind.PROPERTY:var d=i.getterPrototype;if(d){var m=this.resolver.resolveFunction(d,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&u.DecoratorFlags.INLINE);if(m.is(p.CommonFlags.INSTANCE)){s=assert(m.parent);assert(s.kind==u.ElementKind.CLASS);o=assert(this.resolver.currentThisExpression),h=this.compileExpressionRetainType(o,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(c.DiagnosticCode.Property_0_does_not_exist_on_type_1,e.range,i.simpleName,i.parent.toString()),n.createUnreachable()}return this.error(c.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,_.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var o=this.module.precomputeExpression(s);if(l.getExpressionId(o)==l.ExpressionId.Const&&l.getExpressionType(o)==l.NativeType.I32)return l.getConstValueI32(o)?this.compileExpressionRetainType(r,t,0):this.compileExpressionRetainType(n,t,0);s=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType)}var u=a.fork();i.flow=u;var h=this.compileExpressionRetainType(r,t,0),d=this.currentType;u.free();var m=a.fork();i.flow=m;var y=this.compileExpressionRetainType(n,t,0),g=this.currentType;i.flow=m.free(),a.inheritMutual(u,m);var E=_.Type.commonCompatible(d,g,!1);return E?(h=this.convertExpression(h,d,E,1,0,r),y=this.convertExpression(y,g,E,1,0,n),this.currentType=E,this.module.createIf(s,h,y)):(this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,e.range,d.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==_.Type.void?_.Type.i32:t,0,0);if(l.getExpressionId(i)==l.ExpressionId.Unreachable)return i;var a,s,o,p=this.currentType;switch(e.operator){case h.Token.PLUS_PLUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(p.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=l.BinaryOp.AddI32,s=l.NativeType.I32,o=r.createI32(1);break;case 9:case 4:a=(u=this.options).isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,s=u.nativeSizeType,o=p.toNativeOne(r);break;case 3:case 8:a=l.BinaryOp.AddI64,s=l.NativeType.I64,o=r.createI64(1);break;case 11:a=l.BinaryOp.AddF32,s=l.NativeType.F32,o=r.createF32(1);break;case 12:a=l.BinaryOp.AddF64,s=l.NativeType.F64,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;case h.Token.MINUS_MINUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(p.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=l.BinaryOp.SubI32,s=l.NativeType.I32,o=r.createI32(1);break;case 9:case 4:var u;a=(u=this.options).isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,s=u.nativeSizeType,o=p.toNativeOne(r);break;case 3:case 8:a=l.BinaryOp.SubI64,s=l.NativeType.I64,o=r.createI64(1);break;case 11:a=l.BinaryOp.SubF32,s=l.NativeType.F32,o=r.createF32(1);break;case 12:a=l.BinaryOp.SubF64,s=l.NativeType.F64,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;default:return assert(!1),r.createUnreachable()}if(t==_.Type.void)return this.compileAssignmentWithValue(e.operand,r.createBinary(a,i,o),!1);var d=n.getTempLocal(p,!1),m=this.compileAssignmentWithValue(e.operand,r.createBinary(a,this.module.createGetLocal(d.index,s),o),!1);this.currentType=assert(d).type,n.freeTempLocal(d);var y=d.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 h.Token.PLUS:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PLUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}break;case h.Token.MINUS:if(e.operand.kind==d.NodeKind.LITERAL&&(e.operand.literalKind==d.LiteralKind.INTEGER||e.operand.literalKind==d.LiteralKind.FLOAT)){r=this.compileLiteralExpression(e.operand,t,!0),this.options.sourceMap&&this.addDebugLocation(r,e.range);break}if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.MINUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.SubI32,n.createI32(0),r);break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,this.currentType.toNativeZero(n),r);break;case 3:case 8:r=n.createBinary(l.BinaryOp.SubI64,n.createI64(0),r);break;case 11:r=n.createUnary(l.UnaryOp.NegF32,r);break;case 12:r=n.createUnary(l.UnaryOp.NegF64,r);break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.PLUS_PLUS:if(i=!0,r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PREFIX_INC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.AddI32,r,this.module.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.AddI64,r,n.createI64(1));break;case 11:r=n.createBinary(l.BinaryOp.AddF32,r,n.createF32(1));break;case 12:r=n.createBinary(l.BinaryOp.AddF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.MINUS_MINUS:if(i=!0,r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PREFIX_DEC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.SubI32,r,n.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.SubI64,r,n.createI64(1));break;case 11:r=n.createBinary(l.BinaryOp.SubF32,r,n.createF32(1));break;case 12:r=n.createBinary(l.BinaryOp.SubF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.EXCLAMATION:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256))if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}r=this.makeIsFalseish(r,this.currentType),this.currentType=_.Type.bool;break;case h.Token.TILDE:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t.is(8)?_.Type.i64:t,0,0),this.currentType.is(256)){var a,s;if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.BITWISE_NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(r=this.convertExpression(r,this.currentType,this.currentType.intType,1,0,e.operand),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.XorI32,r,n.createI32(-1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.XorI64:l.BinaryOp.XorI32,r,this.currentType.toNativeNegOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.XorI64,r,n.createI64(-1,-1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.TYPEOF:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();default:return assert(!1),n.createUnreachable()}return i?this.compileAssignmentWithValue(e.operand,r,t!=_.Type.void):r},t.prototype.ensureSmallIntegerWrap=function(e,t){var r=this.module,n=this.currentFunction.flow;switch(t.kind){case 0:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(l.UnaryOp.ExtendI8ToI32,e):r.createBinary(l.BinaryOp.ShrI32,r.createBinary(l.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24)));break;case 1:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(l.UnaryOp.ExtendI16ToI32,e):r.createBinary(l.BinaryOp.ShrI32,r.createBinary(l.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16)));break;case 5:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(255)));break;case 6:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(65535)));break;case 10:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(1)))}return e},t.prototype.makeIsFalseish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return r.createUnary(l.UnaryOp.EqzI32,e);case 3:case 8:return r.createUnary(l.UnaryOp.EqzI64,e);case 9:case 4:return r.createUnary(64==t.size?l.UnaryOp.EqzI64:l.UnaryOp.EqzI32,e);case 11:return r.createBinary(l.BinaryOp.EqF32,e,r.createF32(0));case 12:return r.createBinary(l.BinaryOp.EqF64,e,r.createF64(0));default:return assert(!1),r.createI32(1)}},t.prototype.makeIsTrueish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return e;case 3:case 8:return r.createBinary(l.BinaryOp.NeI64,e,r.createI64(0));case 9:case 4:return 64==t.size?r.createBinary(l.BinaryOp.NeI64,e,r.createI64(0)):e;case 11:return r.createBinary(l.BinaryOp.NeF32,e,r.createF32(0));case 12:return r.createBinary(l.BinaryOp.NeF64,e,r.createF64(0));default:return assert(!1),r.createI32(0)}},t.prototype.makeAllocate=function(e,t){var r,n,a=this.module,s=this.currentFunction,c=this.options.nativeSizeType,l=s.getTempLocal(e.type,!1),h=new Array;if(h.push(a.createSetLocal(l.index,o.compileAllocate(this,e,t))),e.members)try{for(var d=i(e.members.values()),_=d.next();!_.done;_=d.next()){var m=_.value;if(m.kind==u.ElementKind.FIELD){var 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(l.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(l.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(l.index,c)),s.freeTempLocal(l),this.currentType=e.type,a.createBlock(null,h,c)},t.prototype.makeConditionalAllocate=function(e,t){var r=this.module,n=this.options.nativeSizeType;return this.currentType=e.type,r.createIf(n==l.NativeType.I64?r.createBinary(l.BinaryOp.NeI64,r.createGetLocal(0,l.NativeType.I64),r.createI64(0)):r.createGetLocal(0,l.NativeType.I32),r.createGetLocal(0,n),r.createTeeLocal(0,this.makeAllocate(e,t)))},t.prototype.addDebugLocation=function(e,t){var r=this.currentFunction,n=t.source;n.debugInfoIndex<0&&(n.debugInfoIndex=this.module.addDebugInfoFile(n.normalizedPath)),t.debugInfoRef=e,r.debugLocations.push(t)},t}(c.DiagnosticEmitter);function f(e,t,r){if(void 0===r&&(r=null),g=r?r.simpleName:t.range.source.simplePath,E=e.simpleName,e.hasDecorator(u.DecoratorFlags.EXTERNAL)){var n=e.program,i=assert(d.findDecorator(d.DecoratorKind.EXTERNAL,t.decorators)),a=i.arguments;if(a&&a.length){var s=a[0];s.kind==d.NodeKind.LITERAL&&s.literalKind==d.LiteralKind.STRING?(E=s.value,a.length>=2&&((s=a[1]).kind==d.NodeKind.LITERAL&&s.literalKind==d.LiteralKind.STRING?(g=E,E=s.value,a.length>2&&n.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"2",a.length.toString())):n.error(c.DiagnosticCode.String_literal_expected,s.range))):n.error(c.DiagnosticCode.String_literal_expected,s.range)}else n.error(c.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,i.range,"1","0")}}t.Compiler=T},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),l=r(2),p=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=l.mangleInternalPath(n);if(!this.donelog.has(a)){this.donelog.add(a),this.seenlog.add(a);var o=new l.Source(n,e,r?l.SourceKind.ENTRY:t.startsWith(i.LIBRARY_PREFIX)&&t.indexOf(i.PATH_DELIMITER,i.LIBRARY_PREFIX.length)<0?l.SourceKind.LIBRARY:l.SourceKind.DEFAULT),p=this.program;p.sources.push(o);var u=new s.Tokenizer(o,p.diagnostics);u.onComment=this.onComment,o.tokenizer=u;for(var h=o.statements;!u.skip(s.Token.ENDOFFILE);){var d=this.parseTopLevelStatement(u);d&&(d.parent=o,h.push(d))}u.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)}var l=0,p=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,l=e.tokenPos,p=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):(p&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(l,p),"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=l.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=l.Node.createType(l.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 p=l.ParameterKind.DEFAULT;if(e.skip(s.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),p=l.ParameterKind.REST),e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return e.reset(r),this.tryParseSignatureIsSignature=!1,null;c=!0,e.discard(r);var u=this.parseType(e,!1);if(!u)return null;if(u.kind!=l.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,u.range),this.tryParseSignatureIsSignature=!0,null;a=u}else{if(!e.skipIdentifier())return c?this.error(o.DiagnosticCode.Identifier_expected,e.range()):e.reset(r),this.tryParseSignatureIsSignature=c,null;var h=l.Node.createIdentifierExpression(e.readIdentifier(),e.range(e.tokenPos,e.pos));if(e.skip(s.Token.QUESTION)&&(c=!0,e.discard(r),p==l.ParameterKind.REST?this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):p=l.ParameterKind.OPTIONAL),e.skip(s.Token.COLON)){c=!0,e.discard(r);var d=this.parseType(e);if(!d)return this.tryParseSignatureIsSignature=c,null;var _=new l.ParameterNode;_.parameterKind=p,_.name=h,_.type=d,i?i.push(_):i=[_]}else c&&this.error(o.DiagnosticCode.Type_expected,e.range())}}while(e.skip(s.Token.COMMA));if(!e.skip(s.Token.CLOSEPAREN))return c?this.error(o.DiagnosticCode._0_expected,e.range(),")"):e.reset(r),this.tryParseSignatureIsSignature=c,null}return e.skip(s.Token.EQUALS_GREATERTHAN)?(c=!0,e.discard(r),(t=this.parseType(e))?(this.tryParseSignatureIsSignature=!0,l.Node.createSignature(i||[],t,a,!1,e.range(n,e.pos))):(this.tryParseSignatureIsSignature=c,null)):(c?this.error(o.DiagnosticCode._0_expected,e.range(),"=>"):e.reset(r),this.tryParseSignatureIsSignature=c,null)},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skipIdentifier()){for(var r=e.readIdentifier(),n=l.Node.createIdentifierExpression(r,e.range(t,e.pos));e.skip(s.Token.DOT);){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;r=e.readIdentifier(),n=l.Node.createPropertyAccessExpression(n,l.Node.createIdentifierExpression(r,e.range()),e.range(t,e.pos))}var i=void 0;if(!e.skip(s.Token.OPENPAREN))return l.Node.createDecorator(n,null,e.range(t,e.pos));if(i=this.parseArguments(e))return l.Node.createDecorator(n,i,e.range(t,e.pos))}else this.error(o.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r,n){var i=new Array;do{var a=this.parseVariableDeclaration(e,t,r);if(!a)return null;i.push(a)}while(e.skip(s.Token.COMMA));var o=l.Node.createVariableStatement(i,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),o},t.prototype.parseVariableDeclaration=function(e,t,r){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var n=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=t,c=null;e.skip(s.Token.COLON)&&(c=this.parseType(e));var p=null;if(e.skip(s.Token.EQUALS)){if(a&i.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,e.range()),!(p=this.parseExpression(e,2)))return null}else a&i.CommonFlags.CONST?a&i.CommonFlags.AMBIENT||this.error(o.DiagnosticCode._const_declarations_must_be_initialized,n.range):c||this.error(o.DiagnosticCode.Type_expected,e.range(e.pos));return l.Node.createVariableDeclaration(n,c,p,r,a,s.Range.join(n.range,e.range()))},t.prototype.parseEnum=function(e,t,r,n){if(e.next()!=s.Token.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var a=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.next()!=s.Token.OPENBRACE)return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;for(var c=new Array;!e.skip(s.Token.CLOSEBRACE);){var p=this.parseEnumValue(e,i.CommonFlags.NONE);if(!p)return null;if(c.push(p),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEBRACE))break;return this.error(o.DiagnosticCode._0_expected,e.range(),"}"),null}}var u=l.Node.createEnumDeclaration(a,c,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),u},t.prototype.parseEnumValue=function(e,t){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var r=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),n=null;return e.skip(s.Token.EQUALS)&&!(n=this.parseExpression(e,2))?null:l.Node.createEnumValueDeclaration(r,n,t,s.Range.join(r.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=s.Token.SEMICOLON&&e.nextToken!=s.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=l.Node.createReturnStatement(t,e.range());return e.skip(s.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){for(var t=new Array;!e.skip(s.Token.GREATERTHAN);){var r=this.parseTypeParameter(e);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.GREATERTHAN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),">"),null}}return 0===t.length&&this.error(o.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range()),t},t.prototype.parseTypeParameter=function(e){if(e.next()==s.Token.IDENTIFIER){var t=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(s.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=l.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return l.Node.createTypeParameter(t,r,s.Range.join(t.range,e.range()))}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e,t){void 0===t&&(t=!1);var r=new Array,n=null,i=!1,a=!1,c=null;if(this.parseParametersThis=null,e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;if(!(c=this.parseType(e)))return null;if(c.kind==l.NodeKind.TYPE?this.parseParametersThis=c:this.error(o.DiagnosticCode.Operation_not_supported,c.range),!e.skip(s.Token.COMMA))return e.skip(s.Token.CLOSEPAREN)?r:(this.error(o.DiagnosticCode._0_expected,e.range(),")"),null)}for(;!e.skip(s.Token.CLOSEPAREN);){var p=this.parseParameter(e,t);if(!p)return null;switch(n&&!a&&(this.error(o.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,n.name.range),a=!0),p.parameterKind){default:i&&this.error(o.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,p.name.range);break;case l.ParameterKind.OPTIONAL:i=!0;break;case l.ParameterKind.REST:n=p}if(r.push(p),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return r},t.prototype.parseParameter=function(e,t){void 0===t&&(t=!1);var r=!1,n=!1,a=null,c=i.CommonFlags.NONE;if(t&&(e.skip(s.Token.PUBLIC)?(a=e.range(),c|=i.CommonFlags.PUBLIC):e.skip(s.Token.PROTECTED)?(a=e.range(),c|=i.CommonFlags.PROTECTED):e.skip(s.Token.PRIVATE)&&(a=e.range(),c|=i.CommonFlags.PRIVATE),e.peek()==s.Token.READONLY)){var p=e.mark();e.next(),e.peek()!=s.Token.COLON?(e.discard(p),a||(a=e.range()),c|=i.CommonFlags.READONLY):e.reset(p)}if(e.skip(s.Token.DOT_DOT_DOT)&&(c?this.error(o.DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,e.range()):a=e.range(),r=!0),e.skipIdentifier()){r||(a=e.range());var u=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),h=null;if((n=e.skip(s.Token.QUESTION))&&r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,u.range),e.skip(s.Token.COLON)){if(!(h=this.parseType(e)))return null}else h=l.Node.createOmittedType(e.range(e.pos));var d=null;if(e.skip(s.Token.EQUALS)&&(r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,u.range),n?this.error(o.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,u.range):n=!0,!(d=this.parseExpression(e,2))))return null;var _=l.Node.createParameter(u,h,d,r?l.ParameterKind.REST:n?l.ParameterKind.OPTIONAL:l.ParameterKind.DEFAULT,s.Range.join(a,e.range()));return _.flags|=c,_}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseFunction=function(e,t,r,n){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range(e.pos)),null;var a=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=-1,p=null;if(e.skip(s.Token.LESSTHAN)){if(c=e.tokenPos,!(p=this.parseTypeParameters(e)))return null;t|=i.CommonFlags.GENERIC}if(!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null;c<0&&(c=e.tokenPos);var u=this.parseParameters(e);if(!u)return null;var h=this.parseParametersThis,d=0!=(t&i.CommonFlags.SET);d&&(1!=u.length&&this.error(o.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,a.range),u.length&&u[0].initializer&&this.error(o.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,a.range)),t&i.CommonFlags.GET&&u.length&&this.error(o.DiagnosticCode.A_get_accessor_cannot_have_parameters,a.range);var _=null;if(e.skip(s.Token.COLON)&&!(_=this.parseType(e,!0,d)))return null;_||(_=l.Node.createOmittedType(e.range(e.pos)),d||this.error(o.DiagnosticCode.Type_expected,_.range));var m=l.Node.createSignature(u,_,h,!1,e.range(c,e.pos)),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=l.Node.createFunctionDeclaration(a,p,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()?l.Node.createIdentifierExpression(e.readIdentifier(),e.range()):l.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==s.Token.OPENPAREN),t=l.Node.createEmptyIdentifierExpression(e.range(e.tokenPos));var i=e.pos,a=this.parseParameters(e);return a?this.parseFunctionExpressionCommon(e,t,a,n,r,i):null},t.prototype.parseFunctionExpressionCommon=function(e,t,r,n,a,c){void 0===a&&(a=-1),void 0===c&&(c=-1),a<0&&(a=t.range.start),c<0&&(c=a);var p=null;if(e.skip(s.Token.COLON)){if(!(p=this.parseType(e)))return null}else p=l.Node.createOmittedType(e.range(e.pos)),this.error(o.DiagnosticCode.Type_expected,p.range);if(n&&!e.skip(s.Token.EQUALS_GREATERTHAN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var u,h=l.Node.createSignature(r,p,null,!1,e.range(c,e.pos));if(n)u=this.parseStatement(e,!1);else{if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;u=this.parseBlockStatement(e,!1)}if(!u)return null;var d=l.Node.createFunctionDeclaration(t,null,h,u,null,n?i.CommonFlags.ARROW:i.CommonFlags.NONE,e.range(a,e.pos));return l.Node.createFunctionExpression(d)},t.prototype.parseClassOrInterface=function(e,t,r,n){var a=e.token==s.Token.INTERFACE;if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var c,p=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(s.Token.LESSTHAN)){if(!(c=this.parseTypeParameters(e)))return null;t|=i.CommonFlags.GENERIC}else c=[];var u=null;if(e.skip(s.Token.EXTENDS)){var h=this.parseType(e);if(!h)return null;if(h.kind!=l.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,h.range),null;u=h}var d=null;if(e.skip(s.Token.IMPLEMENTS)){a&&this.error(o.DiagnosticCode.Interface_declaration_cannot_have_implements_clause,e.range());do{var _=this.parseType(e);if(!_)return null;a||(d||(d=[]),d.push(_))}while(e.skip(s.Token.COMMA))}if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;var m,y=new Array;if(a?(assert(!d),m=l.Node.createInterfaceDeclaration(p,c,u,y,r,t,e.range(n,e.pos))):m=l.Node.createClassDeclaration(p,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()?l.Node.createIdentifierExpression(e.readIdentifier(),e.range()):l.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;var n=new Array,a=l.Node.createClassDeclaration(t,[],null,null,n,null,i.CommonFlags.NONE,e.range(r,e.pos));if(!e.skip(s.Token.CLOSEBRACE))do{var c=this.parseClassMember(e,a);if(!c)return null;c.parent=a,n.push(c)}while(!e.skip(s.Token.CLOSEBRACE));return l.Node.createClassExpression(a)},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=t.kind==l.NodeKind.INTERFACEDECLARATION,a=new Array;e.skip(s.Token.AT);){var c=this.parseDecorator(e);if(!c)break;n&&this.error(o.DiagnosticCode.Decorators_are_not_valid_here,c.range),a.push(c)}var p=t.flags&i.CommonFlags.AMBIENT;n&&(p|=i.CommonFlags.VIRTUAL),e.skip(s.Token.PUBLIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"public"),p|=i.CommonFlags.PUBLIC):e.skip(s.Token.PRIVATE)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"private"),p|=i.CommonFlags.PRIVATE):e.skip(s.Token.PROTECTED)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"protected"),p|=i.CommonFlags.PROTECTED);var u=0,h=0,d=0,_=0;e.skip(s.Token.STATIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"static"),p|=i.CommonFlags.STATIC,u=e.tokenPos,h=e.pos):(p|=i.CommonFlags.INSTANCE,e.skip(s.Token.ABSTRACT)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"abstract"),p|=i.CommonFlags.ABSTRACT,d=e.tokenPos,_=e.pos),t.flags&i.CommonFlags.GENERIC&&(p|=i.CommonFlags.GENERIC_CONTEXT));var m=0,y=0;e.skip(s.Token.READONLY)&&(p|=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):(p|=i.CommonFlags.GET,T=!0,I=e.tokenPos,v=e.pos,p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly")):e.skip(s.Token.SET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(g):(p|=i.CommonFlags.SET|i.CommonFlags.SET,f=!0,I=e.tokenPos,v=e.pos,p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly")):e.skip(s.Token.CONSTRUCTOR)&&(E=!0,(p|=i.CommonFlags.CONSTRUCTOR)&i.CommonFlags.STATIC&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(u,h),"static"),p&i.CommonFlags.ABSTRACT&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(d,_),"abstract"),p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly"))),!E&&!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var A=E?l.Node.createConstructorExpression(e.range()):l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),C=null;if(e.skip(s.Token.LESSTHAN)){var N=e.tokenPos;if(!(C=this.parseTypeParameters(e)))return null;E?this.error(o.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range(N,e.pos)):T||f?this.error(o.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(N,e.pos)):p|=i.CommonFlags.GENERIC}if(e.skip(s.Token.OPENPAREN)){var O=e.tokenPos,S=this.parseParameters(e,E);if(!S)return null;var L=this.parseParametersThis;if(E)for(var b=0,k=S.length;b"),null):null;case s.Token.IDENTIFIER:return l.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case s.Token.THIS:return l.Node.createThisExpression(e.range(r,e.pos));case s.Token.CONSTRUCTOR:return l.Node.createConstructorExpression(e.range(r,e.pos));case s.Token.SUPER:return l.Node.createSuperExpression(e.range(r,e.pos));case s.Token.STRINGLITERAL:return l.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case s.Token.INTEGERLITERAL:return l.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case s.Token.FLOATLITERAL:return l.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case s.Token.SLASH:var T=e.readRegexpPattern();return e.skip(s.Token.SLASH)?l.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 t==s.Token.ENDOFFILE?this.error(o.DiagnosticCode.Unexpected_end_of_text,e.range(r)):this.error(o.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){var t=e.mark();if(!e.skip(s.Token.LESSTHAN))return null;var r=new Array;do{if(e.peek()===s.Token.GREATERTHAN)break;var n=this.parseType(e,!0,!0);if(!n)return e.reset(t),null;r.push(n)}while(e.skip(s.Token.COMMA));return e.skip(s.Token.GREATERTHAN)&&e.skip(s.Token.OPENPAREN)?r:(e.reset(t),null)},t.prototype.parseArguments=function(e){for(var t=new Array;!e.skip(s.Token.CLOSEPAREN);){var r=this.parseExpression(e,2);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return t},t.prototype.parseExpression=function(e,t){void 0===t&&(t=1),assert(0!=t);var r=this.parseExpressionStart(e);if(!r)return null;var n,i=r.range.start;if(l.nodeIsCallable(r.kind))for(var a=null;e.skip(s.Token.OPENPAREN)||l.nodeIsGenericCallable(r.kind)&&null!==(a=this.tryParseTypeArgumentsBeforeArguments(e));){var c=this.parseArguments(e);if(!c)return null;r=l.Node.createCallExpression(r,a,c,e.range(i,e.pos))}for(var p,d=null;(p=u(n=e.peek()))>=t;)switch(e.next(),n){case s.Token.AS:var _=this.parseType(e);if(!_)return null;r=l.Node.createAssertionExpression(l.AssertionKind.AS,r,_,e.range(i,e.pos));break;case s.Token.INSTANCEOF:var m=this.parseType(e);if(!m)return null;r=l.Node.createInstanceOfExpression(r,m,e.range(i,e.pos));break;case s.Token.OPENBRACKET:if(!(d=this.parseExpression(e)))return null;if(!e.skip(s.Token.CLOSEBRACKET))return this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;r=l.Node.createElementAccessExpression(r,d,e.range(i,e.pos));break;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:r.kind!=l.NodeKind.IDENTIFIER&&r.kind!=l.NodeKind.ELEMENTACCESS&&r.kind!=l.NodeKind.PROPERTYACCESS&&this.error(o.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,r.range),r=l.Node.createUnaryPostfixExpression(n,r,e.range(i,e.pos));break;case s.Token.QUESTION:var 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=l.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=l.Node.createCommaExpression(E,e.range(i,e.pos));break;default:if(!(d=this.parseExpression(e,h(n)?p:p+1)))return null;if(n==s.Token.DOT)if(d.kind==l.NodeKind.IDENTIFIER)r=l.Node.createPropertyAccessExpression(r,d,e.range(i,e.pos));else{if(d.kind!=l.NodeKind.CALL)return this.error(o.DiagnosticCode.Identifier_expected,d.range),null;var T=d;if(T.expression.kind!=l.NodeKind.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,T.expression.range),null;T.expression=l.Node.createPropertyAccessExpression(r,T.expression,e.range(i,e.pos)),r=T}else r=l.Node.createBinaryExpression(n,r,d,e.range(i,e.pos))}return r},t.prototype.skipStatement=function(e){for(e.peek(!0),e.nextTokenOnNewLine&&e.next();;){var t=e.peek(!0);if(t==s.Token.ENDOFFILE||t==s.Token.SEMICOLON){e.next();break}if(e.nextTokenOnNewLine)break;switch(e.next()){case s.Token.IDENTIFIER:e.readIdentifier();break;case s.Token.STRINGLITERAL:e.readString();break;case s.Token.INTEGERLITERAL:e.readInteger();break;case s.Token.FLOATLITERAL:e.readFloat()}}},t.prototype.skipBlock=function(e){var t=1,r=!0;do{switch(e.next()){case s.Token.ENDOFFILE:this.error(o.DiagnosticCode._0_expected,e.range(),"}"),r=!1;break;case s.Token.OPENBRACE:++t;break;case s.Token.CLOSEBRACE:--t||(r=!1);break;case s.Token.IDENTIFIER:e.readIdentifier();break;case s.Token.STRINGLITERAL:e.readString();break;case s.Token.INTEGERLITERAL:e.readInteger();break;case s.Token.FLOATLITERAL:e.readFloat()}}while(r)},t}(o.DiagnosticEmitter);function u(e){switch(e){case s.Token.COMMA:return 1;case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:return 4;case s.Token.QUESTION:return 5;case s.Token.BAR_BAR:return 6;case s.Token.AMPERSAND_AMPERSAND:return 7;case s.Token.BAR:return 8;case s.Token.CARET:return 9;case s.Token.AMPERSAND:return 10;case s.Token.EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS:case s.Token.EQUALS_EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS_EQUALS:return 11;case s.Token.AS:case s.Token.IN:case s.Token.INSTANCEOF:case s.Token.LESSTHAN:case s.Token.GREATERTHAN:case s.Token.LESSTHAN_EQUALS:case s.Token.GREATERTHAN_EQUALS:return 12;case s.Token.LESSTHAN_LESSTHAN:case s.Token.GREATERTHAN_GREATERTHAN:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 13;case s.Token.PLUS:case s.Token.MINUS:return 14;case s.Token.ASTERISK:case s.Token.SLASH:case s.Token.PERCENT:return 15;case s.Token.ASTERISK_ASTERISK:return 16;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:return 18;case s.Token.DOT:case s.Token.NEW:case s.Token.OPENBRACKET:return 20}return 0}function h(e){switch(e){case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:case s.Token.QUESTION:case s.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=p,function(e){e[e.NONE=0]="NONE",e[e.COMMA=1]="COMMA",e[e.SPREAD=2]="SPREAD",e[e.YIELD=3]="YIELD",e[e.ASSIGNMENT=4]="ASSIGNMENT",e[e.CONDITIONAL=5]="CONDITIONAL",e[e.LOGICAL_OR=6]="LOGICAL_OR",e[e.LOGICAL_AND=7]="LOGICAL_AND",e[e.BITWISE_OR=8]="BITWISE_OR",e[e.BITWISE_XOR=9]="BITWISE_XOR",e[e.BITWISE_AND=10]="BITWISE_AND",e[e.EQUALITY=11]="EQUALITY",e[e.RELATIONAL=12]="RELATIONAL",e[e.SHIFT=13]="SHIFT",e[e.ADDITIVE=14]="ADDITIVE",e[e.MULTIPLICATIVE=15]="MULTIPLICATIVE",e[e.EXPONENTIATED=16]="EXPONENTIATED",e[e.UNARY_PREFIX=17]="UNARY_PREFIX",e[e.UNARY_POSTFIX=18]="UNARY_POSTFIX",e[e.CALL=19]="CALL",e[e.MEMBERACCESS=20]="MEMBERACCESS",e[e.GROUPING=21]="GROUPING"}(t.Precedence||(t.Precedence={}))},function(e,t,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),l=function(){function e(e,t){void 0===t&&(t=!1),this.todo=[],this.seen=new Set,this.program=e,this.includePrivate}return e.prototype.walk=function(){var e,t;try{for(var r=i(this.program.moduleLevelExports.values()),n=r.next();!n.done;n=r.next()){var a=n.value;this.visitElement(a.element)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}for(var s=this.todo;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("memory.size()");case n.HostOp.GrowMemory:return this.push("memory.grow("),this.decompileExpression(n.getHostOperand(e,0)),void this.push(")")}break;case n.ExpressionId.Nop:return void this.push(";\n");case n.ExpressionId.Unreachable:return void this.push("unreachable()");case n.ExpressionId.AtomicCmpxchg:case n.ExpressionId.AtomicRMW:case n.ExpressionId.AtomicWait:case n.ExpressionId.AtomicWake:}throw new Error("not implemented")},e.prototype.push=function(e){this.text.push(e)},e.prototype.finish=function(){var e=this.text.join("");return this.text=[],e},e}();function a(e){switch(e){case 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(11),i=r(14),a=r(13),s=r(1);t.formatDiagnostic=s.formatDiagnosticMessage;var o=r(12);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>>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(e=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(1),a=r(2),s=r(6),o=r(4),c=r(5),l=r(9),p=r(0);function u(e,t,r,n,p,u){var y,g,E,T,f=e.module;switch(t.internalName){case"isInteger":var I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(4)&&!I.is(256)?f.createI32(1):f.createI32(0):f.createUnreachable();case"isFloat":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(8)?f.createI32(1):f.createI32(0):f.createUnreachable();case"isSigned":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(1)?f.createI32(1):f.createI32(0):f.createUnreachable();case"isReference":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?(e.currentType=s.Type.bool,I.is(256)?f.createI32(1):f.createI32(0)):f.createUnreachable();case"isString":I=d(e,r,n,u);if(e.currentType=s.Type.bool,!I)return f.createUnreachable();if(R=I.classReference){var v=e.program.stringInstance;if(v&&R.isAssignableTo(v))return f.createI32(1)}return f.createI32(0);case"isArray":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?null!=(R=I.classReference)&&null!=R.lookupOverload(c.OperatorKind.INDEXED_GET)?f.createI32(1):f.createI32(0):f.createUnreachable();case"isDefined":if(e.currentType=s.Type.bool,r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();var A=e.resolver.resolveExpression(n[0],e.currentFunction,l.ReportMode.SWALLOW);return f.createI32(A?1:0);case"isConstant":if(e.currentType=s.Type.bool,r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();var C=e.compileExpressionRetainType(n[0],s.Type.i32,0);return e.currentType=s.Type.bool,f.createI32(o.getExpressionId(C)==o.ExpressionId.Const?1:0);case"clz":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,1)}else y=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:T=f.createUnary(o.UnaryOp.ClzI32,y);break;case 10:case 2:case 7:T=f.createUnary(o.UnaryOp.ClzI32,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}case 4:T=f.createUnary(e.options.isWasm64?o.UnaryOp.ClzI64:o.UnaryOp.ClzI32,y);break;case 3:case 8:T=f.createUnary(o.UnaryOp.ClzI64,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"ctz":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],0,1)}else y=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:T=f.createUnary(o.UnaryOp.CtzI32,y);break;case 10:case 2:case 7:T=f.createUnary(o.UnaryOp.CtzI32,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}case 4:T=f.createUnary(e.options.isWasm64?o.UnaryOp.CtzI64:o.UnaryOp.CtzI32,y);break;case 3:case 8:T=f.createUnary(o.UnaryOp.CtzI64,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"popcnt":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,1)}else y=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:T=f.createUnary(o.UnaryOp.PopcntI32,y);break;case 10:case 2:case 7:T=f.createUnary(o.UnaryOp.PopcntI32,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}case 4:T=f.createUnary(e.options.isWasm64?o.UnaryOp.PopcntI64:o.UnaryOp.PopcntI32,y);break;case 3:case 8:T=f.createUnary(o.UnaryOp.PopcntI64,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"rotl":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,1)}else y=e.compileExpression(n[0],s.Type.i32,0,1);switch(g=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=e.ensureSmallIntegerWrap(f.createBinary(o.BinaryOp.RotlI32,y,g),e.currentType);case 2:case 7:T=f.createBinary(o.BinaryOp.RotlI32,y,g);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}case 4:T=f.createBinary(e.options.isWasm64?o.BinaryOp.RotlI64:o.BinaryOp.RotlI32,y,g);break;case 3:case 8:T=f.createBinary(o.BinaryOp.RotlI64,y,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"rotr":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,1)}else y=e.compileExpression(n[0],s.Type.i32,0,1);switch(g=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=e.ensureSmallIntegerWrap(f.createBinary(o.BinaryOp.RotrI32,y,g),e.currentType);break;case 2:case 7:T=f.createBinary(o.BinaryOp.RotrI32,y,g);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}case 4:T=f.createBinary(e.options.isWasm64?o.BinaryOp.RotrI64:o.BinaryOp.RotrI32,y,g);break;case 3:case 8:T=f.createBinary(o.BinaryOp.RotrI64,y,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"abs":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,1)}else y=e.compileExpression(n[0],s.Type.f64,0,1);switch(e.currentType.kind){case 0:case 1:case 2:var N=e.currentFunction.getAndFreeTempLocal(s.Type.i32,!1);T=f.createSelect(f.createTeeLocal(N.index,y),f.createBinary(o.BinaryOp.SubI32,f.createI32(0),f.createGetLocal(N.index,o.NativeType.I32)),f.createBinary(o.BinaryOp.GtI32,f.createGetLocal(N.index,o.NativeType.I32),f.createI32(0)));break;case 4:N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);T=f.createSelect(f.createTeeLocal(N.index,y),f.createBinary(e.options.isWasm64?o.BinaryOp.SubI64:o.BinaryOp.SubI32,e.options.usizeType.toNativeZero(f),f.createGetLocal(N.index,e.options.nativeSizeType)),f.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,f.createGetLocal(N.index,e.options.nativeSizeType),e.options.usizeType.toNativeZero(f)));break;case 3:N=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);T=f.createSelect(f.createTeeLocal(N.index,y),f.createBinary(o.BinaryOp.SubI64,f.createI64(0,0),f.createGetLocal(N.index,o.NativeType.I64)),f.createBinary(o.BinaryOp.GtI64,f.createGetLocal(N.index,o.NativeType.I64),f.createI64(0,0)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}case 5:case 6:case 7:case 8:case 10:T=y;break;case 11:T=f.createUnary(o.UnaryOp.AbsF32,y);break;case 12:T=f.createUnary(o.UnaryOp.AbsF64,y);break;case 13:T=f.createUnreachable();break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"max":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,1)}else y=e.compileExpression(n[0],s.Type.f64,0,1);switch(g=e.compileExpression(n[1],e.currentType,1,1),e.currentType.kind){case 0:case 1:case 2:var O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(y,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(g,e.currentType));e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(o.BinaryOp.GtI32,f.createGetLocal(S.index,o.NativeType.I32),f.createGetLocal(L.index,o.NativeType.I32)));break;case 5:case 6:case 7:case 10:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(y,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(g,e.currentType));e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(o.BinaryOp.GtU32,f.createGetLocal(S.index,o.NativeType.I32),f.createGetLocal(L.index,o.NativeType.I32)));break;case 3:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(o.BinaryOp.GtI64,f.createGetLocal(S.index,o.NativeType.I64),f.createGetLocal(L.index,o.NativeType.I64)));break;case 8:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(o.BinaryOp.GtU64,f.createGetLocal(S.index,o.NativeType.I64),f.createGetLocal(L.index,o.NativeType.I64)));break;case 4:S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,f.createGetLocal(S.index,e.options.nativeSizeType),f.createGetLocal(L.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(e.options.isWasm64?o.BinaryOp.GtU64:o.BinaryOp.GtU32,f.createGetLocal(S.index,e.options.nativeSizeType),f.createGetLocal(L.index,e.options.nativeSizeType)));break;case 11:T=f.createBinary(o.BinaryOp.MaxF32,y,g);break;case 12:T=f.createBinary(o.BinaryOp.MaxF64,y,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"min":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,1)}else y=e.compileExpression(n[0],s.Type.f64,0,1);switch(g=e.compileExpression(n[1],e.currentType,1,1),e.currentType.kind){case 0:case 1:case 2:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(y,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(g,e.currentType));e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(o.BinaryOp.LtI32,f.createGetLocal(S.index,o.NativeType.I32),f.createGetLocal(L.index,o.NativeType.I32)));break;case 5:case 6:case 7:case 10:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(y,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(g,e.currentType));e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(o.BinaryOp.LtU32,f.createGetLocal(S.index,o.NativeType.I32),f.createGetLocal(L.index,o.NativeType.I32)));break;case 3:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(o.BinaryOp.LtI64,f.createGetLocal(S.index,o.NativeType.I64),f.createGetLocal(L.index,o.NativeType.I64)));break;case 8:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(o.BinaryOp.LtU64,f.createGetLocal(S.index,o.NativeType.I64),f.createGetLocal(L.index,o.NativeType.I64)));break;case 4:S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(e.options.isWasm64?o.BinaryOp.LtI64:o.BinaryOp.LtI32,f.createGetLocal(S.index,e.options.nativeSizeType),f.createGetLocal(L.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),T=f.createSelect(f.createTeeLocal(S.index,y),f.createTeeLocal(L.index,g),f.createBinary(e.options.isWasm64?o.BinaryOp.LtU64:o.BinaryOp.LtU32,f.createGetLocal(S.index,e.options.nativeSizeType),f.createGetLocal(L.index,e.options.nativeSizeType)));break;case 11:T=f.createBinary(o.BinaryOp.MinF32,y,g);break;case 12:T=f.createBinary(o.BinaryOp.MinF64,y,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"ceil":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,0)}else y=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}default:T=y;break;case 11:T=f.createUnary(o.UnaryOp.CeilF32,y);break;case 12:T=f.createUnary(o.UnaryOp.CeilF64,y);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"floor":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,0)}else y=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}default:T=y;break;case 11:T=f.createUnary(o.UnaryOp.FloorF32,y);break;case 12:T=f.createUnary(o.UnaryOp.FloorF64,y);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"copysign":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,0)}else y=e.compileExpression(n[0],s.Type.f64,0,0);switch(g=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 11:T=f.createBinary(o.BinaryOp.CopysignF32,y,g);break;case 12:T=f.createBinary(o.BinaryOp.CopysignF64,y,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"nearest":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,0)}else y=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}default:T=y;break;case 11:T=f.createUnary(o.UnaryOp.NearestF32,y);break;case 12:T=f.createUnary(o.UnaryOp.NearestF64,y);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"reinterpret":if(1!=n.length)return r&&1==r.length||(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0")),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(!r||1!=r.length)return r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),f.createUnreachable();switch(r[0].kind){case 2:case 7:y=e.compileExpression(n[0],s.Type.f32,1,0),T=f.createUnary(o.UnaryOp.ReinterpretF32,y);break;case 3:case 8:y=e.compileExpression(n[0],s.Type.f64,1,0),T=f.createUnary(o.UnaryOp.ReinterpretF64,y);break;case 9:if(r[0].is(256))return e.error(i.DiagnosticCode.Operation_not_supported,u.range),e.currentType=r[0],f.createUnreachable();case 4:y=e.compileExpression(n[0],e.options.isWasm64?s.Type.f64:s.Type.f32,1,0),T=f.createUnary(e.options.isWasm64?o.UnaryOp.ReinterpretF64:o.UnaryOp.ReinterpretF32,y);break;case 11:y=e.compileExpression(n[0],s.Type.i32,1,0),T=f.createUnary(o.UnaryOp.ReinterpretI32,y);break;case 12:y=e.compileExpression(n[0],s.Type.i64,1,0),T=f.createUnary(o.UnaryOp.ReinterpretI64,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return e.currentType=r[0],T;case"sqrt":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,0)}else y=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 11:T=f.createUnary(o.UnaryOp.SqrtF32,y);break;case 12:T=f.createUnary(o.UnaryOp.SqrtF64,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"trunc":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(r&&r.length){if(e.currentType=r[0],1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,0)}else y=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable();break}default:T=y;break;case 11:T=f.createUnary(o.UnaryOp.TruncF32,y);break;case 12:T=f.createUnary(o.UnaryOp.TruncF64,y);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"load":return n.length<1||n.length>2?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),n.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),f.createUnreachable()):r&&1==r.length?(y=e.compileExpression(n[0],e.options.usizeType,1,0),(x=2==n.length?_(e,n[1]):0)<0?f.createUnreachable():(e.currentType=r[0],f.createLoad(r[0].byteSize,r[0].is(5),y,r[0].is(4)&&p.is(4)&&p.size>r[0].size?(e.currentType=p).toNativeType():(e.currentType=r[0]).toNativeType(),x))):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),f.createUnreachable());case"store":if(e.currentType=s.Type.void,n.length<2||n.length>3)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),n.length<2?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"2",n.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),f.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),f.createUnreachable();y=e.compileExpression(n[0],e.options.usizeType,1,0),g=e.compileExpression(n[1],r[0],r[0].is(4)?0:1,0);I=void 0;return r[0].is(4)&&(!e.currentType.is(4)||e.currentType.size1)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),f.createUnreachable();var R;if(!(R=r[0].classReference))return e.error(i.DiagnosticCode.Operation_not_supported,u.range),f.createUnreachable();var x=void 0;if(n.length){if(n[0].kind!=a.NodeKind.LITERAL||n[0].literalKind!=a.LiteralKind.STRING)return e.error(i.DiagnosticCode.String_literal_expected,n[0].range),f.createUnreachable();var F=n[0].value,D=R.members?R.members.get(F):null;if(!D||D.kind!=c.ElementKind.FIELD)return e.error(i.DiagnosticCode.Type_0_has_no_property_1,n[0].range,R.internalName,F),f.createUnreachable();x=D.memoryOffset}else x=R.currentMemoryOffset;return e.options.isWasm64?p.is(4)&&p.size<=32?(e.currentType=s.Type.u32,f.createI32(x)):f.createI64(x):p.is(4)&&64==p.size?(e.currentType=s.Type.u64,f.createI64(x)):f.createI32(x);case"select":if(3!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,0)}else y=e.compileExpressionRetainType(n[0],s.Type.i32,0);I=e.currentType;switch(g=e.compileExpression(n[1],I,1,0),E=e.makeIsTrueish(e.compileExpressionRetainType(n[2],s.Type.bool,0),e.currentType),e.currentType=I,e.currentType.kind){case 0:case 1:case 5:case 6:case 10:default:T=f.createSelect(y,g,E);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=f.createUnreachable()}return T;case"unreachable":return 0!=n.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),f.createUnreachable();case"memory.size":return e.currentType=s.Type.i32,0!=n.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),f.createHost(o.HostOp.CurrentMemory);case"memory.grow":return e.currentType=s.Type.i32,1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),y=f.createUnreachable()):y=e.compileExpression(n[0],s.Type.i32,1,0),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),f.createHost(o.HostOp.GrowMemory,null,[y]);case"memory.copy":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),3!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),e.currentType=s.Type.void,f.createUnreachable();throw y=e.compileExpression(n[0],e.options.usizeType,1,0),g=e.compileExpression(n[1],e.options.usizeType,1,0),E=e.compileExpression(n[2],e.options.usizeType,1,0),e.currentType=s.Type.void,new Error("not implemented");case"memory.fill":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),3!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),e.currentType=s.Type.void,f.createUnreachable();throw y=e.compileExpression(n[0],e.options.usizeType,1,0),g=e.compileExpression(n[1],s.Type.u32,1,0),E=e.compileExpression(n[2],e.options.usizeType,1,0),e.currentType=s.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),e.currentType=r[0],f.createUnreachable()):(y=e.compileExpressionRetainType(n[0],r[0],0),e.currentType=r[0],e.currentType.size!=r[0].size?(e.error(i.DiagnosticCode.Operation_not_supported,u.range),f.createUnreachable()):y):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),f.createUnreachable());case"assert":if(n.length<1||n.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),n.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)):n.length>2&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),f.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(n[0],r[0],1,1)}else y=e.compileExpressionRetainType(n[0],s.Type.bool,1);I=e.currentType;if(e.currentType=I.nonNullableType,e.options.noAssert)return p==s.Type.void?(e.currentType=s.Type.void,f.createNop()):y;var B=m(e,2==n.length?n[1]:null,u);if(e.currentType=I.nonNullableType,p==s.Type.void){switch(e.currentType.kind){default:T=f.createIf(f.createUnary(o.UnaryOp.EqzI32,y),B);break;case 3:case 8:T=f.createIf(f.createUnary(o.UnaryOp.EqzI64,y),B);break;case 4:case 9:T=f.createIf(f.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,y),B);break;case 11:T=f.createIf(f.createBinary(o.BinaryOp.EqF32,y,f.createF32(0)),B);break;case 12:T=f.createIf(f.createBinary(o.BinaryOp.EqF64,y,f.createF64(0)),B);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=B}e.currentType=s.Type.void}else switch(e.currentType.kind){case 0:case 1:case 5:case 6:case 10:O=e.currentFunction.flow,N=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));T=f.createIf(f.createTeeLocal(N.index,y),f.createGetLocal(N.index,o.NativeType.I32),B);break;case 2:case 7:default:N=e.currentFunction.getAndFreeTempLocal(s.Type.i32,!1);T=f.createIf(f.createTeeLocal(N.index,y),f.createGetLocal(N.index,o.NativeType.I32),B);break;case 3:case 8:N=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);T=f.createIf(f.createUnary(o.UnaryOp.EqzI64,f.createTeeLocal(N.index,y)),B,f.createGetLocal(N.index,o.NativeType.I64));break;case 4:case 9:N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);T=f.createIf(f.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,f.createTeeLocal(N.index,y)),B,f.createGetLocal(N.index,e.options.nativeSizeType));break;case 11:N=e.currentFunction.getAndFreeTempLocal(s.Type.f32,!1);T=f.createIf(f.createBinary(o.BinaryOp.EqF32,f.createTeeLocal(N.index,y),f.createF32(0)),B,f.createGetLocal(N.index,o.NativeType.F32));break;case 12:N=e.currentFunction.getAndFreeTempLocal(s.Type.f64,!1);T=f.createIf(f.createBinary(o.BinaryOp.EqF64,f.createTeeLocal(N.index,y),f.createF64(0)),B,f.createGetLocal(N.index,o.NativeType.F64));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),T=B}return T;case"unchecked":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable()):((O=e.currentFunction.flow).set(4096),T=e.compileExpressionRetainType(n[0],p,0),O.unset(4096),T);case"call_indirect":if(n.length<1)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),f.createUnreachable();var U=void 0;if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),f.createUnreachable();U=r[0]}else U=p;if(y=e.compileExpressionRetainType(n[0],s.Type.u32,0),7!=e.currentType.kind)return e.error(i.DiagnosticCode.Operation_not_supported,n[0].range),f.createUnreachable();for(var P=n.length-1,w=new Array(P),M=new Array(P+1),G=U.toNativeType(),K=new Array(P),z=0;z void"),f.createUnreachable())}var Q=function(e,t,r,n,i){switch(t.internalName){case"i32.clz":return h("clz",e,s.Type.i32,r,s.Type.i32,i);case"i64.clz":return h("clz",e,s.Type.i64,r,s.Type.i64,i);case"i32.ctz":return h("ctz",e,s.Type.i32,r,s.Type.i32,i);case"i64.ctz":return h("ctz",e,s.Type.i64,r,s.Type.i64,i);case"i32.popcnt":return h("popcnt",e,s.Type.i32,r,s.Type.i32,i);case"i64.popcnt":return h("popcnt",e,s.Type.i64,r,s.Type.i64,i);case"i32.rotl":return h("rotl",e,s.Type.i32,r,s.Type.i32,i);case"i64.rotl":return h("rotl",e,s.Type.i64,r,s.Type.i64,i);case"i32.rotr":return h("rotr",e,s.Type.i32,r,s.Type.i32,i);case"i64.rotr":return h("rotr",e,s.Type.i64,r,s.Type.i64,i);case"f32.abs":return h("abs",e,s.Type.f32,r,s.Type.f32,i);case"f64.abs":return h("abs",e,s.Type.f64,r,s.Type.f64,i);case"f32.max":return h("max",e,s.Type.f32,r,s.Type.f32,i);case"f64.max":return h("max",e,s.Type.f64,r,s.Type.f64,i);case"f32.min":return h("min",e,s.Type.f32,r,s.Type.f32,i);case"f64.min":return h("min",e,s.Type.f64,r,s.Type.f64,i);case"f32.ceil":return h("ceil",e,s.Type.f32,r,s.Type.f32,i);case"f64.ceil":return h("ceil",e,s.Type.f64,r,s.Type.f64,i);case"f32.floor":return h("floor",e,s.Type.f32,r,s.Type.f32,i);case"f64.floor":return h("floor",e,s.Type.f64,r,s.Type.f64,i);case"f32.copysign":return h("copysign",e,s.Type.f32,r,s.Type.f32,i);case"f64.copysign":return h("copysign",e,s.Type.f64,r,s.Type.f64,i);case"f32.nearest":return h("nearest",e,s.Type.f32,r,s.Type.f32,i);case"f64.nearest":return h("nearest",e,s.Type.f64,r,s.Type.f64,i);case"i32.reinterpret_f32":return h("reinterpret",e,s.Type.i32,r,s.Type.f32,i);case"i64.reinterpret_f64":return h("reinterpret",e,s.Type.i64,r,s.Type.f64,i);case"f32.reinterpret_i32":return h("reinterpret",e,s.Type.f32,r,s.Type.i32,i);case"f64.reinterpret_i64":return h("reinterpret",e,s.Type.f64,r,s.Type.i64,i);case"f32.sqrt":return h("sqrt",e,s.Type.f32,r,s.Type.f32,i);case"f64.sqrt":return h("sqrt",e,s.Type.f64,r,s.Type.f64,i);case"f32.trunc":return h("trunc",e,s.Type.f32,r,s.Type.f32,i);case"f64.trunc":return h("trunc",e,s.Type.f64,r,s.Type.f64,i);case"i32.load8_s":return h("load",e,s.Type.i8,r,s.Type.i32,i);case"i32.load8_u":return h("load",e,s.Type.u8,r,s.Type.u32,i);case"i32.load16_s":return h("load",e,s.Type.i16,r,s.Type.i32,i);case"i32.load16_u":return h("load",e,s.Type.u16,r,s.Type.u32,i);case"i32.load":return h("load",e,s.Type.i32,r,s.Type.i32,i);case"i64.load8_s":return h("load",e,s.Type.i8,r,s.Type.i64,i);case"i64.load8_u":return h("load",e,s.Type.u8,r,s.Type.u64,i);case"i64.load16_s":return h("load",e,s.Type.i16,r,s.Type.i64,i);case"i64.load16_u":return h("load",e,s.Type.u16,r,s.Type.u64,i);case"i64.load32_s":return h("load",e,s.Type.i32,r,s.Type.i64,i);case"i64.load32_u":return h("load",e,s.Type.u32,r,s.Type.u64,i);case"i64.load":return h("load",e,s.Type.i64,r,s.Type.i64,i);case"f32.load":return h("load",e,s.Type.f32,r,s.Type.f32,i);case"f64.load":return h("load",e,s.Type.f64,r,s.Type.f64,i);case"i32.store8":return h("store",e,s.Type.i8,r,s.Type.i32,i);case"i32.store16":return h("store",e,s.Type.i16,r,s.Type.i32,i);case"i32.store":return h("store",e,s.Type.i32,r,s.Type.i32,i);case"i64.store8":return h("store",e,s.Type.i8,r,s.Type.i64,i);case"i64.store16":return h("store",e,s.Type.i16,r,s.Type.i64,i);case"i64.store32":return h("store",e,s.Type.i32,r,s.Type.i64,i);case"i64.store":return h("store",e,s.Type.i64,r,s.Type.i64,i);case"f32.store":return h("store",e,s.Type.f32,r,s.Type.f32,i);case"f64.store":return h("store",e,s.Type.f64,r,s.Type.f64,i)}return 0}(e,t,n,0,u);return Q?(r&&r.length&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),Q):(e.error(i.DiagnosticCode.Operation_not_supported,u.range),f.createUnreachable())}function h(e,t,r,n,i,a){var s=assert(t.program.elementsLookup.get(e));return assert(s.kind==c.ElementKind.FUNCTION_PROTOTYPE),u(t,s,[r],n,i,a)}function d(e,t,r,n){if(0==r.length)return t&&1==t.length?t[0]:(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t?t.length.toString(10):"0"),null);if(1==r.length){if(t)if(1==t.length)e.compileExpression(r[0],t[0],1,0);else{if(t.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t.length.toString(10)),null;e.compileExpressionRetainType(r[0],s.Type.i32,0)}else e.compileExpressionRetainType(r[0],s.Type.i32,0);return e.currentType}return t&&t.length>1&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,"1",r.length.toString(10)),null}function _(e,t){var r,n;return e.options.isWasm64?(r=e.precomputeExpression(t,s.Type.usize64,1,0),(o.getExpressionId(r)!=o.ExpressionId.Const||o.getExpressionType(r)!=o.NativeType.I64||0!=o.getConstValueI64High(r)||(n=o.getConstValueI64Low(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)):(r=e.precomputeExpression(t,s.Type.usize32,1,0),(o.getExpressionId(r)!=o.ExpressionId.Const||o.getExpressionType(r)!=o.NativeType.I32||(n=o.getConstValueI32(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)),n}function m(e,t,r){var n=e.program,i=e.module,a=n.typesLookup.get("string");if(!a)return i.createUnreachable();var c=n.abortInstance;if(!c||!e.compileFunction(c))return i.createUnreachable();var l=null!=t?e.compileExpression(t,a,1,0):a.toNativeZero(i),p=e.compileStaticString(r.range.source.normalizedPath);return e.currentType=s.Type.void,i.createBlock(null,[i.createCallImport(c.internalName,[l,p,i.createI32(r.range.line),i.createI32(r.range.column)],o.NativeType.None),i.createUnreachable()])}t.compileCall=u,t.compileAllocate=function(e,t,r){var n=e.program;assert(t.program==n);var a=e.module,s=e.options,o=n.memoryAllocateInstance;return o?e.compileFunction(o)?(e.currentType=t.type,a.createCall(o.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],s.nativeSizeType)):a.createUnreachable():(n.error(i.DiagnosticCode.Cannot_find_name_0,r.range,"memory.allocate"),a.createUnreachable())},t.compileAbort=m,t.compileIterateRoots=function(e){var t,r,i=e.module,a=new Array;try{for(var l=n(e.program.elementsLookup.values()),u=l.next();!u.done;u=l.next()){var h=u.value;if(h.kind==c.ElementKind.GLOBAL){var d=h,_=d.type.classReference;if(d.is(p.CommonFlags.COMPILED)&&null!==_&&!_.hasDecorator(c.DecoratorFlags.UNMANAGED))if(d.is(p.CommonFlags.INLINED)){var m=d.constantIntegerValue;a.push(i.createCallIndirect(i.createGetLocal(0,o.NativeType.I32),[e.options.isWasm64?i.createI64(i64_low(m),i64_high(m)):i.createI32(i64_low(m))],"iv"))}else a.push(i.createCallIndirect(i.createGetLocal(0,o.NativeType.I32),[i.createGetGlobal(d.internalName,e.options.nativeSizeType)],"iv"))}}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=l.return)&&r.call(l)}finally{if(t)throw t.error}}var y=e.ensureFunctionType([s.Type.i32],s.Type.void);i.addFunction("~iterateRoots",y,[],a.length?i.createBlock(null,a):i.createNop())}},function(e,t){e.exports=n;var r=null;try{r=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(e){}function n(e,t,r){this.low=0|e,this.high=0|t,this.unsigned=!!r}function i(e){return!0===(e&&e.__isLong__)}n.prototype.__isLong__,Object.defineProperty(n.prototype,"__isLong__",{value:!0}),n.isLong=i;var a={},s={};function o(e,t){var r,n,i;return t?(i=0<=(e>>>=0)&&e<256)&&(n=s[e])?n:(r=l(e,(0|e)<0?-1:0,!0),i&&(s[e]=r),r):(i=-128<=(e|=0)&&e<128)&&(n=a[e])?n:(r=l(e,e<0?-1:0,!1),i&&(a[e]=r),r)}function c(e,t){if(isNaN(e))return t?E: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():l(e%d|0,e/d|0,t)}function l(e,t,r){return new n(e,t,r)}n.fromInt=o,n.fromNumber=c,n.fromBits=l;var p=Math.pow;function u(e,t,r){if(0===e.length)throw Error("empty string");if("NaN"===e||"Infinity"===e||"+Infinity"===e||"-Infinity"===e)return 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(p(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 l+s;for(;l.length<6;)l="0"+l;s=""+l+s}},N.getHighBits=function(){return this.high},N.getHighBitsUnsigned=function(){return this.high>>>0},N.getLowBits=function(){return this.low},N.getLowBitsUnsigned=function(){return this.low>>>0},N.getNumBitsAbs=function(){if(this.isNegative())return this.eq(C)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&0==(e&1<=0},N.isOdd=function(){return 1==(1&this.low)},N.isEven=function(){return 0==(1&this.low)},N.equals=function(e){return i(e)||(e=h(e)),(this.unsigned===e.unsigned||this.high>>>31!=1||e.high>>>31!=1)&&(this.high===e.high&&this.low===e.low)},N.eq=N.equals,N.notEquals=function(e){return!this.eq(e)},N.neq=N.notEquals,N.ne=N.notEquals,N.lessThan=function(e){return this.comp(e)<0},N.lt=N.lessThan,N.lessThanOrEqual=function(e){return this.comp(e)<=0},N.lte=N.lessThanOrEqual,N.le=N.lessThanOrEqual,N.greaterThan=function(e){return this.comp(e)>0},N.gt=N.greaterThan,N.greaterThanOrEqual=function(e){return this.comp(e)>=0},N.gte=N.greaterThanOrEqual,N.ge=N.greaterThanOrEqual,N.compare=function(e){if(i(e)||(e=h(e)),this.eq(e))return 0;var t=this.isNegative(),r=e.isNegative();return t&&!r?-1:!t&&r?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1},N.comp=N.compare,N.negate=function(){return!this.unsigned&&this.eq(C)?C:this.not().add(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,p=0,u=0,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,u+=(d+=n+c)>>>16,p+=(u+=r+o)>>>16,p+=t+s,l((d&=65535)<<16|(_&=65535),(p&=65535)<<16|(u&=65535),this.unsigned)},N.subtract=function(e){return i(e)||(e=h(e)),this.add(e.neg())},N.sub=N.subtract,N.multiply=function(e){if(this.isZero())return g;if(i(e)||(e=h(e)),r)return l(r.mul(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned);if(e.isZero())return 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,p=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*p)>>>16,_+=t*d+n*u+a*p+s*o,l((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?l((this.unsigned?r.div_u:r.div_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?E: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:p(2,s-48),u=c(t),d=u.mul(e);d.isNegative()||d.gt(n);)d=(u=c(t-=o,this.unsigned)).mul(e);u.isZero()&&(u=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?l((this.unsigned?r.rem_u:r.rem_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this.sub(this.div(e).mul(e))},N.mod=N.modulo,N.rem=N.modulo,N.not=function(){return l(~this.low,~this.high,this.unsigned)},N.and=function(e){return i(e)||(e=h(e)),l(this.low&e.low,this.high&e.high,this.unsigned)},N.or=function(e){return i(e)||(e=h(e)),l(this.low|e.low,this.high|e.high,this.unsigned)},N.xor=function(e){return i(e)||(e=h(e)),l(this.low^e.low,this.high^e.high,this.unsigned)},N.shiftLeft=function(e){return i(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?l(this.low<>>32-e,this.unsigned):l(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):l(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},N.shr=N.shiftRight,N.shiftRightUnsigned=function(e){if(i(e)&&(e=e.toInt()),0===(e&=63))return this;var t=this.high;return e<32?l(this.low>>>e|t<<32-e,t>>>e,this.unsigned):l(32===e?t:t>>>e-32,0,this.unsigned)},N.shru=N.shiftRightUnsigned,N.shr_u=N.shiftRightUnsigned,N.toSigned=function(){return this.unsigned?l(this.low,this.high,!1):this},N.toUnsigned=function(){return this.unsigned?this:l(this.low,this.high,!0)},N.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},N.toBytesLE=function(){var e=this.high,t=this.low;return[255&t,t>>>8&255,t>>>16&255,t>>>24,255&e,e>>>8&255,e>>>16&255,e>>>24]},N.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,255&e,t>>>24,t>>>16&255,t>>>8&255,255&t]},n.fromBytes=function(e,t,r){return r?n.fromBytesLE(e,t):n.fromBytesBE(e,t)},n.fromBytesLE=function(e,t){return new n(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)},n.fromBytesBE=function(e,t){return new n(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}},function(e,t,r){(function(e){const t=e.Long||r(21);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){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self;function r(){Error.captureStackTrace?Error.captureStackTrace(this,r):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function n(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,n):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}t.ASC_TARGET=0,Object.defineProperties(t.i8=function(e){return e<<24>>24},{MIN_VALUE:{value:-128,writable:!1},MAX_VALUE:{value:127,writable:!1}}),Object.defineProperties(t.i16=function(e){return e<<16>>16},{MIN_VALUE:{value:-32768,writable:!1},MAX_VALUE:{value:32767,writable:!1}}),Object.defineProperties(t.i32=t.isize=function(e){return 0|e},{MIN_VALUE:{value:-2147483648,writable:!1},MAX_VALUE:{value:2147483647,writable:!1}}),Object.defineProperties(t.u8=function(e){return 255&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:255,writable:!1}}),Object.defineProperties(t.u16=function(e){return 65535&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:65535,writable:!1}}),Object.defineProperties(t.u32=t.usize=function(e){return e>>>0},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:4294967295,writable:!1}}),Object.defineProperties(t.bool=function(e){return!!e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:1,writable:!1}}),Object.defineProperties(t.f32=function(e){return Math.fround(e)},{MIN_VALUE:{value:Math.fround(-3.40282347e38),writable:!1},MAX_VALUE:{value:Math.fround(3.40282347e38),writable:!1},MIN_POSITIVE_VALUE:{value:Math.fround(1.175494351e-38),writable:!1},MIN_SAFE_INTEGER:{value:-16777215,writable:!1},MAX_SAFE_INTEGER:{value:16777215,writable:!1},EPSILON:{value:Math.fround(1.1920929e-7),writable:!1}}),Object.defineProperties(t.f64=function(e){return+e},{MIN_VALUE:{value:-1.7976931348623157e308,writable:!1},MAX_VALUE:{value:1.7976931348623157e308,writable:!1},MIN_POSITIVE_VALUE:{value:2.2250738585072014e-308,writable:!1},MIN_SAFE_INTEGER:{value:-9007199254740991,writable:!1},MAX_SAFE_INTEGER:{value:9007199254740991,writable:!1},EPSILON:{value:2.220446049250313e-16,writable:!1}}),t.clz=Math.clz32,t.ctz=function(e){var t=Math.clz32(e&-e);return e?31-t:t},t.popcnt=function(e){return 16843009*((e=(858993459&(e-=e>>>1&1431655765))+(e>>>2&858993459))+(e>>>4)&252645135)>>>24},t.rotl=function(e,t){return e<<(t&=31)|e>>>32-t},t.rotr=function(e,t){return e>>>(t&=31)|e<<32-t},t.abs=Math.abs,t.max=Math.max,t.min=Math.min,t.ceil=Math.ceil,t.floor=Math.floor,t.nearest=function(e){return.5===Math.abs(e-Math.trunc(e))?2*Math.round(.5*e):Math.round(e)},t.select=function(e,t,r){return r?e:t},t.sqrt=Math.sqrt,t.trunc=Math.trunc,t.copysign=function(e,t){return Math.abs(e)*Math.sign(t)},t.bswap=function(e){var t=e>>8&16711935,r=(16711935&e)<<8;return(t=(e=t|r)>>16&65535)|(r=(65535&e)<<16)},t.bswap16=function(e){return e<<8&65280|e>>8&255|4294901760&e},r.prototype=Object.create(Error.prototype),r.prototype.name="UnreachableError",r.prototype.message="unreachable",t.unreachable=function(){throw new r},n.prototype=Object.create(Error.prototype),n.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new n(t)},t.changetype=function(e){return e},t.parseI32=function(e,t){return 0|parseInt(e,void 0)},String.fromCharCodes=function(e){return String.fromCharCode.apply(String,e)},String.fromCodePoints=function(e){return String.fromCodePoint.apply(String,e)},t.isInteger=Number.isInteger,t.isFloat=function(e){return"number"==typeof e},t.isReference=function(e){return"object"==typeof e||"string"==typeof e},t.isString=function(e){return"string"==typeof e||e instanceof String},t.isArray=Array.isArray,t.unchecked=function(e){return e},t.fmod=function(e,t){return e%t},t.fmodf=function(e,t){return Math.fround(e%t)},t.JSMath=Math,t.memory=(()=>{var e=new Uint8Array(0),r=0;return{allocate:t.__memory_allocate||function(t){if(!(t>>>=0))return 0;if(r+t>e.length){var n=e;(e=new Uint8Array(Math.max(65536,e.length+t,2*e.length))).set(n)}var i=r;return 7&(r+=t)&&(r=1+(7|r)),i},free:t.__memory_free||function(e){},copy:t.__memory_copy||function(t,r,n){e.copyWithin(t,r,r+n)}}})(),t.store=t.__store||function(e,t,r){HEAP[e+(0|r)]=t},t.load=t.__load||function(e,t){return HEAP[e+(0|t)]}}).call(this,r(7))},function(t,r){t.exports=e},function(e,t,r){(function(e){const t=e.Binaryen||r(25);for(var n in e.binaryen=t,t)(n.startsWith("_Binaryen")||n.startsWith("_Relooper"))&&(e[n]=t[n]);e.__memory_allocate=t._malloc,e.__memory_free=t._free,e.__memory_copy=t._memmove,e.__store=function(e,r){t.HEAPU8[e]=r},e.__load=function(e){return t.HEAPU8[e]}}).call(this,r(7))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(26),r(24),r(23),r(22);var n=r(4);n.Module.prototype.toText=function(){return new binaryen.Module(this.ref).emitText()},n.Module.prototype.toAsmjs=function(){return new binaryen.Module(this.ref).emitAsmjs()}},function(e,t,r){r(27),e.exports=r(15)}])}); //# sourceMappingURL=assemblyscript.js.map \ No newline at end of file diff --git a/dist/assemblyscript.js.map b/dist/assemblyscript.js.map index 421239bc..5db5a357 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/resolver.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.ts","webpack://assemblyscript/./src/compiler.ts","webpack://assemblyscript/./src/parser.ts","webpack://assemblyscript/./src/definitions.ts","webpack://assemblyscript/./src/decompiler.ts","webpack://assemblyscript/./src/index.ts","webpack://assemblyscript/./src/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/./node_modules/long/src/long.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./src/glue/js/float.js","webpack://assemblyscript/./std/portable/index.js","webpack://assemblyscript/external \"binaryen\"","webpack://assemblyscript/./src/glue/js/binaryen.js","webpack://assemblyscript/./src/glue/js/index.ts"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__25__","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","BUILTIN","EXTERNAL","GLOBAL","INLINE","OPERATOR","SEALED","UNMANAGED","propStr","OPERATOR_BINARY","OPERATOR_PREFIX","OPERATOR_POSTFIX","CUSTOM","DECORATOR","CommentKind","COMMENT","Expression","LiteralKind","LiteralExpression","literalKind","ARRAY","AssertionKind","ASSERTION","BINARY","CLASS","COMMA","CONSTRUCTOR","FLOAT","FUNCTION","INSTANCEOF","INTEGER","NEW","OBJECT","PARENTHESIZED","REGEXP","TERNARY","STRING","SUPER","THIS","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","isLastStatement","BLOCK","FUNCTIONDECLARATION","METHODDECLARATION","SourceKind","Statement","Source","SOURCE","tokenizer","debugInfoIndex","exportPaths","sourceKind","pos","lastIndexOf","simplePath","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","VARIABLE","NAMESPACEDECLARATION","EXPORT","isTopLevelExport","CLASSDECLARATION","STATIC","needsExplicitExport","member","VariableLikeDeclarationStatement","BREAK","CONTINUE","DO","EMPTY","ENUMDECLARATION","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","FIELDDECLARATION","parameterIndex","FOR","IF","IMPORTDECLARATION","IMPORT","INTERFACEDECLARATION","RETURN","SWITCHCASE","SWITCH","THROW","TRY","TYPEDECLARATION","VARIABLEDECLARATION","VOID","WHILE","asGlobal","endsWith","findDecorator","decorator","__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","memory","allocate","createFrom","cArr","allocU8Array","_BinaryenModuleRead","free","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","getOptimizeLevel","_BinaryenGetOptimizeLevel","setOptimizeLevel","level","_BinaryenSetOptimizeLevel","getShrinkLevel","_BinaryenGetShrinkLevel","setShrinkLevel","_BinaryenSetShrinkLevel","setDebugInfo","on","_BinaryenSetDebugInfo","optimize","_BinaryenFunctionOptimize","_BinaryenModuleOptimize","runPasses","passes","_BinaryenFunctionRunPasses","_BinaryenModuleRunPasses","precomputeExpression","previousOptimizeLevel","previousShrinkLevel","previousDebugInfo","_BinaryenGetDebugInfo","_BinaryenExpressionGetType","_BinaryenFunctionGetBody","validate","_BinaryenModuleValidate","interpret","_BinaryenModuleInterpret","toBinary","sourceMapUrl","binaryPtr","sourceMapPtr","_BinaryenModuleAllocateAndWrite","readInt","binaryBytes","ret","BinaryModule","output","Uint8Array","load","readBuffer","sourceMap","readString","toText","Error","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","i32","MAX_VALUE","nested1","nested2","_BinaryenExpressionGetId","Const","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","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","abortInstance","memoryAllocateInstance","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","has","instance","resolveClass","Duplicate_identifier_0","programLevelInternalName","FUNCTION_PROTOTYPE","startFunction","GENERIC","AMBIENT","MAIN","resolveFunction","Global","withConstantIntegerValue","setConstantFloat","withConstantFloatValue","queuedNamedExports","checkDecorators","acceptedFlags","presentFlags","decoratorKindToFlag","isLibrary","Decorator_0_is_not_valid_here","Duplicate_decorator","checkGlobal","parentNode","hasDecorator","namespace","fileLevelInternalName","simpleName","ClassPrototype","numImplementsTypes","Unmanaged_classes_cannot_implement_interfaces","Operation_not_supported","MODULE_EXPORT","Export_declaration_conflicts_with_exported_declaration_of_0","isEntry","existingExport","memberDeclarations","memberDeclaration","initializeField","GET","SET","initializeAccessor","initializeMethod","classPrototype","isInterface","INTERFACE_PROTOTYPE","staticField","READONLY","ABSTRACT","instanceMembers","instanceField","FieldPrototype","decoratorFlags","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperatorOverloads","numArgs","firstArg","overloads","overloadPrototypes","Duplicate_function_implementation","operatorKind","String_literal_expected","Expected_0_arguments_but_got_1","internalPropertyName","propertyElement","isGetter","isNew","PROPERTY","getterPrototype","setterPrototype","Property","baseName","staticName","staticPrototype","instanceName","instancePrototype","Enum","initializeEnumValue","enm","EnumValue","initializeExport","externalIdentifier","prefix","FILESPACE","referencedName","referencedElement","seen","Set","add","initializeImport","indexPart","InterfacePrototype","parentNamespace","Namespace","Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local","existingExport_1","global_1","CONST","Element","program","NAMESPACE","ENUM","ENUMVALUE","constantValue","ConstantValueKind","VariableLikeElement","constantValueKind","constantIntegerValue","INLINED","constantFloatValue","Parameter","Local","LOCAL","scopedGlobal","instances","classTypeArguments","Function","contextualTypeArguments","localsByName","localsByIndex","additionalLocals","breakContext","debugLocations","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","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","overload","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","returnLabel","wrappedLocals","wrappedLocalsExt","unset","fork","branch","slice","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","DECLARE","DEFAULT","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","IS","KEYOF","LET","MODULE","OF","PACKAGE","PRIVATE","PROTECTED","PUBLIC","TYPEOF","VAR","WITH","YIELD","tokenIsAlsoIdentifier","token","operatorTokenToString","DOT_DOT_DOT","LESSTHAN","GREATERTHAN","LESSTHAN_EQUALS","GREATERTHAN_EQUALS","EQUALS_EQUALS","EXCLAMATION_EQUALS","EQUALS_EQUALS_EQUALS","EXCLAMATION_EQUALS_EQUALS","ASTERISK_ASTERISK","ASTERISK","SLASH","PERCENT","PLUS_PLUS","MINUS_MINUS","LESSTHAN_LESSTHAN","GREATERTHAN_GREATERTHAN","GREATERTHAN_GREATERTHAN_GREATERTHAN","AMPERSAND","BAR","CARET","EXCLAMATION","TILDE","AMPERSAND_AMPERSAND","BAR_BAR","EQUALS","PLUS_EQUALS","MINUS_EQUALS","ASTERISK_EQUALS","ASTERISK_ASTERISK_EQUALS","SLASH_EQUALS","PERCENT_EQUALS","LESSTHAN_LESSTHAN_EQUALS","GREATERTHAN_GREATERTHAN_EQUALS","GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS","AMPERSAND_EQUALS","BAR_EQUALS","CARET_EQUALS","a","b","Tokenizer","tokenPos","nextToken","nextTokenPos","nextTokenOnNewLine","onComment","identifierHandling","unsafeNext","maxTokenLength","STRINGLITERAL","OPENPAREN","CLOSEPAREN","isDecimalDigit","FLOATLITERAL","DOT","commentStartPos","LINE","TRIPLE","closed","_0_expected","testInteger","INTEGERLITERAL","COLON","SEMICOLON","EQUALS_GREATERTHAN","QUESTION","OPENBRACKET","CLOSEBRACKET","OPENBRACE","CLOSEBRACE","AT","isIdentifierStart","isKeywordCharacter","posBefore","isIdentifierPart","keywordToken","ALWAYS","PREFER","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skipIdentifier","skip","skipIdentifierName","mark","state","reusableState","State","discard","reset","readIdentifier","quote","Unterminated_string_literal","readEscapeSequence","Unexpected_end_of_text","readExtendedUnicodeEscape","readUnicodeEscape","fromCharCode","readRegexpPattern","escaped","Unterminated_regular_expression_literal","readRegexpFlags","Invalid_regular_expression_flags","readInteger","readHexInteger","readBinaryInteger","readOctalInteger","isOctalDigit","Octal_literals_are_not_allowed_in_strict_mode","readDecimalInteger","i64_16","sepEnd","i64_add","i64_mul","Numeric_separators_are_not_allowed_here","Multiple_consecutive_numeric_separators_are_not_permitted","Hexadecimal_digit_expected","i64_10","Digit_expected","i64_8","Octal_digit_expected","i64_2","i64_1","Binary_digit_expected","readFloat","readDecimalFloat","parseFloat","readHexFloat","remain","value32","invalid","An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive","Unterminated_Unicode_escape_sequence","finish","ReportMode","program_1","currentThisExpression","currentElementExpression","resolveType","reportMode","REPORT","resolveSignature","typeNode","Type_0_is_not_generic","resolveClassInclTypeArguments","typeArgumentNodes","numTypeArguments","paramType","instanceKey","placeholderType","parameterTypeNodes","parameterTypeNode","REST","returnTypeNode","resolveTypeArguments","alternativeReportNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","atEnd","context","resolvePropertyAccess","propertyAccess","contextualFunction","targetExpression","resolveExpression","propertyName","Property_0_does_not_exist_on_type_1","indexedGet","Index_signature_is_missing_in_type_0","resolveElementAccess","elementAccess","explicitLocal","_this_cannot_be_referenced_in_current_location","_super_can_only_be_referenced_in_a_derived_class","resolveFunctionInclTypeArguments","functionTarget","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","isInstance","classTypeParameters","numClassTypeParameters","numFunctionTypeArguments","signatureNode","functionTypeParameters","classInstance","signatureParameters","signatureParameterCount","parameterDeclaration","resolveFunctionPartially","partialKey","partialPrototype","reportNode","resolvedTypeArguments","_e","expectedTypeArguments","actualTypeArguments","baseClass","baseClassType","Class_0_is_sealed_and_cannot_be_extended","Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa","_f","_g","inheritedMember","constructorPartial","_h","_j","fieldDeclaration","fieldType","baseField","Type_expected","fieldInstance","instanceProperty","partialGetterPrototype","partialSetterPrototype","_k","_l","_m","overloadPrototype","operatorInstance","operatorPartial","typeParameterNodes","builtins_1","Options","WASM32","importMemory","importTable","features","feature","Feature","ConversionKind","WrapMode","mangleImportName_moduleName","mangleImportName_elementName","Compiler","currentOuterFunction","currentInlineFunctions","currentEnum","currentType","memorySegments","stringSegments","functionTable","argcVar","argcSet","needsIterateRoots","f32ModInstance","f64ModInstance","f32PowInstance","f64PowInstance","max","compile","startFunctionInstance","startFunctionBody","compileSource","funcRef","ensureFunctionType","i64_align","numPages","i64_shr_u","functionTableSize","functionTableExported","entries","moduleExport","makeModuleExport","compileIterateRoots","subPrefix","Cannot_export_a_mutable_global","ensureTrampoline","ensureArgcSet","COMPILED","setter","nativeType","nativeSizeType","getterName","setterName","fullName","ctor","compileSourceByPath","File_0_not_found","isGeneric","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","initExpr","resolvedType","compileExpressionRetainType","Type_0_is_not_assignable_to_type_1","isDeclaredConstant","MODULE_IMPORT","mangleImportName","initializeInStart","compileExpression","Compiling_constant_with_non_constant_initializer_as_mutable","compileEnum","previousValue","previousValueIsMut","initInStart","valueDeclaration","In_const_enum_declarations_member_initializer_must_be_constant_expression","Enum_member_must_have_initializer","AddI32","compileFunctionUsingTypeArguments","compileFunction","resultType","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","isConstructor","stmts","compileStatements","unshift","makeConditionalAllocate","A_function_whose_declared_type_is_not_void_must_return_a_value","compileInterfaceDeclaration","compileNamespace","compileClassUsingTypeArguments","compileClass","staticMembers","ctorInstance","addMemorySegment","alignment","ensureFunctionTableEntry","TRAMPOLINE","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileVoidStatement","compileWhileStatement","addDebugLocation","numStatements","Nop","A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement","A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement","condExpr","makeIsTrueish","terminated","repeatLabel","alwaysTrue","condPre","incrExpr","bodyExpr","usesContinue","breakBlock","repeatBlock","GENERIC_CONTEXT","condExprPrecomp","ifTrueFlow","ifTrueExpr","ifFalseExpr","ifFalseFlow","numCases","tempLocal","tempLocalIndex","breaks","breakIndex","defaultIndex","currentBlock","alwaysReturns","alwaysReturnsWrapped","alwaysThrows","alwaysAllocates","isLast","nextLabel","count","compileAbort","isKnownGlobal","numDeclarations","initializers","isInlined","_const_declarations_must_be_initialized","compileAssignmentWithValue","compileInlineConstant","contextualType","retainType","mask","conversionKind","wrapMode","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileInstanceOfExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","ensureSmallIntegerWrap","Conversion_from_type_0_to_1_requires_an_explicit_cast","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","leftExpr","leftType","rightExpr","rightType","commonType","compound","compileBinaryOverload","Operator_0_cannot_be_applied_to_types_1_and_2","compileAssignment","AddI64","AddF32","AddF64","SubI32","SubI64","SubF32","SubF64","MulI64","MulF32","MulF64","makeCallDirect","DivI32","DivI64","DivU64","DivF32","DivF64","RemI64","RemU64","intType","ShlI64","The_0_operator_cannot_be_applied_to_type_1","ShrI64","ShrU64","AndI64","OrI32","OrI64","XorI32","XorI64","compileUnaryOverload","valueExpr","argumentExpressions","thisArg","compileCallDirect","valueExpression","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","isUnchecked","indexedSet","Index_signature_in_type_0_only_permits_reading","valueWithCorrectType","tee","thisExpression","thisExpr","setterInstance","getterInstance","nativeReturnType","elementExpr","tempLocalTarget","tempLocalElement","indexArg","compileCallExpressionBuiltin","inferredTypes","numTypeParameters","numParameterTypes","numArguments","argumentExprs","argumentExpression","inferredType","concreteType","compileCallIndirect","compileCall","checkCallSignature","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","inline","includes","compileCallInlineUnchecked","Function_0_cannot_be_inlined_into_itself","numArgumentsInclThis","previousFlow","thisLocal","paramExpr","argumentLocal","bodyStatement","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","trampolineSignature","trampolineName","ofN","Optional_parameter_must_have_an_initializer","ensureArgcVar","numOperands","isCallImport","parameterNodes","allOptionalsAreConstant","makeCallIndirect","numExpressions","exprs","retainConstantType","scopedThis","superType","localType","A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums","implicitNegate","compileArrayLiteral","floatValue","intValue","i64_sub","i64_is_i8","i64_is_u8","i64_is_i16","i64_is_u16","i64_is_i32","i64_is_u32","i64_is_bool","i64_is_f32","i64_to_f32","i64_is_f64","i64_to_f64","compileStaticString","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","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","compileAllocate","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","currentClassInstance","makeAllocate","ifThenFlow","ifThenExpr","ifThenType","ifElseFlow","ifElseExpr","ifElseType","getValue","nativeOne","setValue","NegF32","NegF64","makeIsFalseish","ExtendI8ToI32","ExtendI16ToI32","field","nativeFieldType","parentElement","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","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","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","readI32","readI64","lo","hi","readF32","i32_as_f32","f32_as_i32","readF64","i64_as_f64","valueI64","f64_as_i64","indentX1","indentX2","indentX4","separator","ipos","dirname","origin","CharCode","lookupInUnicodeMap","unicodeIdentifierStart","isUnicodeIdentifierStart","unicodeIdentifierPart","isUnicodeIdentifierPart","mid","compiler","evaluateConstantType","SWALLOW","expr_1","tempLocal0","tempLocal1","evaluateConstantOffset","alignLog2","fieldName","Type_0_has_no_property_1","abort","operandExprs","signatureParts","nativeParamTypes","operandType","User_defined_0","expr_2","deferASM","deferASMCall","typeArgument","valueType","messageArg","filenameArg","allocateInstance","Long","wasm","WebAssembly","Instance","low","high","unsigned","isLong","obj","__isLong__","INT_CACHE","UINT_CACHE","fromInt","cachedObj","cache","fromBits","fromNumber","isNaN","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","Math","pow","fromString","radix","RangeError","radixToPower","parseInt","power","mul","fromValue","TWO_PWR_16_DBL","TWO_PWR_24","ONE","UONE","NEG_ONE","LongPrototype","toInt","toNumber","isZero","isNegative","eq","radixLong","div","rem1","sub","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","equals","notEquals","neq","ne","lessThan","comp","lt","lessThanOrEqual","lte","le","greaterThan","gt","greaterThanOrEqual","gte","ge","compare","thisNeg","otherNeg","negate","not","addend","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","subtract","subtrahend","multiply","multiplier","get_high","b00","divide","divisor","approx","res","div_u","div_s","toUnsigned","shru","shr","shl","floor","log2","log","LN2","delta","approxRes","approxRem","modulo","rem_u","rem_s","mod","and","or","xor","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toSigned","toBytes","toBytesLE","toBytesBE","fromBytes","fromBytesLE","fromBytesBE","i64_div","i64_div_u","i64_rem","i64_rem_u","i64_xor","i64_shr","i64_eq","minSafeF32","MIN_SAFE_INTEGER","maxSafeF32","MAX_SAFE_INTEGER","minSafeF64","maxSafeF64","fround","globalScope","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","HEAP","HEAP_OFFSET","oldHeap","copy","dest","src","copyWithin","binaryen","Binaryen","__memory_allocate","_malloc","__memory_free","_free","__memory_copy","_memmove","__store","HEAPU8","__load","emitText","emitAsmjs"],"mappings":"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AAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,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,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__25__) {\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 = 28);\n","/**\r\n * Common constants.\r\n * @module common\r\n *//***/\r\n\r\n/** Indicates traits of a {@link Node} or {@link Element}. */\r\nexport enum CommonFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n\r\n // Basic modifiers\r\n\r\n /** Has an `import` modifier. */\r\n IMPORT = 1 << 0,\r\n /** Has an `export` modifier. */\r\n EXPORT = 1 << 1,\r\n /** Has a `declare` modifier. */\r\n DECLARE = 1 << 2,\r\n /** Has a `const` modifier. */\r\n CONST = 1 << 3,\r\n /** Has a `let` modifier. */\r\n LET = 1 << 4,\r\n /** Has a `static` modifier. */\r\n STATIC = 1 << 5,\r\n /** Has a `readonly` modifier. */\r\n READONLY = 1 << 6,\r\n /** Has an `abstract` modifier. */\r\n ABSTRACT = 1 << 7,\r\n /** Has a `public` modifier. */\r\n PUBLIC = 1 << 8,\r\n /** Has a `private` modifier. */\r\n PRIVATE = 1 << 9,\r\n /** Has a `protected` modifier. */\r\n PROTECTED = 1 << 10,\r\n /** Has a `get` modifier. */\r\n GET = 1 << 11,\r\n /** Has a `set` modifier. */\r\n SET = 1 << 12,\r\n\r\n // Extended modifiers usually derived from basic modifiers\r\n\r\n /** Is ambient, that is either declared or nested in a declared element. */\r\n AMBIENT = 1 << 13,\r\n /** Is generic. */\r\n GENERIC = 1 << 14,\r\n /** Is part of a generic context. */\r\n GENERIC_CONTEXT = 1 << 15,\r\n /** Is an instance member. */\r\n INSTANCE = 1 << 16,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 17,\r\n /** Is an arrow function. */\r\n ARROW = 1 << 18,\r\n /** Is a module export. */\r\n MODULE_EXPORT = 1 << 19,\r\n /** Is a module import. */\r\n MODULE_IMPORT = 1 << 20,\r\n\r\n // Compilation states\r\n\r\n /** Is compiled. */\r\n COMPILED = 1 << 21,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 22,\r\n /** Is scoped. */\r\n SCOPED = 1 << 23,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 24,\r\n /** Is a virtual method. */\r\n VIRTUAL = 1 << 25,\r\n /** Is the main function. */\r\n MAIN = 1 << 26,\r\n\r\n // Other\r\n\r\n QUOTED = 1 << 27\r\n}\r\n\r\n/** Path delimiter inserted between file system levels. */\r\nexport const PATH_DELIMITER = \"/\";\r\n/** Substitution used to indicate the parent directory. */\r\nexport const PARENT_SUBST = \"..\";\r\n/** Function name prefix used for getters. */\r\nexport const GETTER_PREFIX = \"get:\";\r\n/** Function name prefix used for setters. */\r\nexport const SETTER_PREFIX = \"set:\";\r\n/** Delimiter used between class names and instance members. */\r\nexport const INSTANCE_DELIMITER = \"#\";\r\n/** Delimiter used between class and namespace names and static members. */\r\nexport const STATIC_DELIMITER = \".\";\r\n/** Delimiter used between a function and its inner elements. */\r\nexport const INNER_DELIMITER = \"~\";\r\n/** Substitution used to indicate a library directory. */\r\nexport const LIBRARY_SUBST = \"~lib\";\r\n/** Library directory prefix. */\r\nexport const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER;\r\n/** Prefix used to indicate a filespace element. */\r\nexport const FILESPACE_PREFIX = \"file:\";\r\n","/**\r\n * Shared diagnostic handling inherited by the parser and the compiler.\r\n * @module diagnostics\r\n * @preferred\r\n *//***/\r\n\r\nimport {\r\n Range\r\n} from \"./ast\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nimport {\r\n isLineBreak\r\n} from \"./util\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\n/** Indicates the category of a {@link DiagnosticMessage}. */\r\nexport enum DiagnosticCategory {\r\n /** Informatory message. */\r\n INFO,\r\n /** Warning message. */\r\n WARNING,\r\n /** Error message. */\r\n ERROR\r\n}\r\n\r\n/** Returns the string representation of the specified diagnostic category. */\r\nexport function diagnosticCategoryToString(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return \"INFO\";\r\n case DiagnosticCategory.WARNING: return \"WARNING\";\r\n case DiagnosticCategory.ERROR: return \"ERROR\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** ANSI escape sequence for blue foreground. */\r\nexport const COLOR_BLUE: string = \"\\u001b[96m\";\r\n/** ANSI escape sequence for yellow foreground. */\r\nexport const COLOR_YELLOW: string = \"\\u001b[93m\";\r\n/** ANSI escape sequence for red foreground. */\r\nexport const COLOR_RED: string = \"\\u001b[91m\";\r\n/** ANSI escape sequence to reset the foreground color. */\r\nexport const COLOR_RESET: string = \"\\u001b[0m\";\r\n\r\n/** Returns the ANSI escape sequence for the specified category. */\r\nexport function diagnosticCategoryToColor(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return COLOR_BLUE;\r\n case DiagnosticCategory.WARNING: return COLOR_YELLOW;\r\n case DiagnosticCategory.ERROR: return COLOR_RED;\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** Represents a diagnostic message. */\r\nexport class DiagnosticMessage {\r\n\r\n /** Message code. */\r\n code: i32;\r\n /** Message category. */\r\n category: DiagnosticCategory;\r\n /** Message text. */\r\n message: string;\r\n /** Respective source range, if any. */\r\n range: Range | null = null;\r\n\r\n /** Constructs a new diagnostic message. */\r\n private constructor(code: i32, category: DiagnosticCategory, message: string) {\r\n this.code = code;\r\n this.category = category;\r\n this.message = message;\r\n }\r\n\r\n /** Creates a new diagnostic message of the specified category. */\r\n static create(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): DiagnosticMessage {\r\n var message = diagnosticCodeToString(code);\r\n if (arg0 != null) message = message.replace(\"{0}\", arg0);\r\n if (arg1 != null) message = message.replace(\"{1}\", arg1);\r\n if (arg2 != null) message = message.replace(\"{2}\", arg2);\r\n return new DiagnosticMessage(code, category, message);\r\n }\r\n\r\n /** Creates a new informatory diagnostic message. */\r\n static createInfo(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.INFO, arg0, arg1);\r\n }\r\n\r\n /** Creates a new warning diagnostic message. */\r\n static createWarning(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.WARNING, arg0, arg1);\r\n }\r\n\r\n /** Creates a new error diagnostic message. */\r\n static createError(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.ERROR, arg0, arg1);\r\n }\r\n\r\n /** Adds a source range to this message. */\r\n withRange(range: Range): this {\r\n this.range = range;\r\n return this;\r\n }\r\n\r\n /** Converts this message to a string. */\r\n toString(): string {\r\n if (this.range) {\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \\\"\" +\r\n this.message +\r\n \"\\\" in \" +\r\n this.range.source.normalizedPath +\r\n \":\" +\r\n this.range.line.toString(10) +\r\n \":\" +\r\n this.range.column.toString(10)\r\n );\r\n }\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \" +\r\n this.message\r\n );\r\n }\r\n}\r\n\r\n/** Formats a diagnostic message, optionally with terminal colors and source context. */\r\nexport function formatDiagnosticMessage(\r\n message: DiagnosticMessage,\r\n useColors: bool = false,\r\n showContext: bool = false\r\n): string {\r\n\r\n // general information\r\n var sb: string[] = [];\r\n if (useColors) sb.push(diagnosticCategoryToColor(message.category));\r\n sb.push(diagnosticCategoryToString(message.category));\r\n if (useColors) sb.push(COLOR_RESET);\r\n sb.push(message.code < 1000 ? \" AS\" : \" TS\");\r\n sb.push(message.code.toString(10));\r\n sb.push(\": \");\r\n sb.push(message.message);\r\n\r\n // include range information if available\r\n if (message.range) {\r\n\r\n // include context information if requested\r\n let range = message.range;\r\n if (showContext) {\r\n sb.push(\"\\n\");\r\n sb.push(formatDiagnosticContext(message.range, useColors));\r\n }\r\n\r\n sb.push(\"\\n\");\r\n sb.push(\" in \");\r\n sb.push(range.source.normalizedPath);\r\n sb.push(\"(\");\r\n sb.push(range.line.toString(10));\r\n sb.push(\",\");\r\n sb.push(range.column.toString(10));\r\n sb.push(\")\");\r\n }\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Formats the diagnostic context for the specified range, optionally with terminal colors. */\r\nexport function formatDiagnosticContext(range: Range, useColors: bool = false): string {\r\n var text = range.source.text;\r\n var len = text.length;\r\n var start = range.start;\r\n var end = range.end;\r\n while (start > 0 && !isLineBreak(text.charCodeAt(start - 1))) start--;\r\n while (end < len && !isLineBreak(text.charCodeAt(end))) end++;\r\n var sb: string[] = [\r\n \"\\n \",\r\n text.substring(start, end),\r\n \"\\n \"\r\n ];\r\n while (start < range.start) {\r\n sb.push(\" \");\r\n start++;\r\n }\r\n if (useColors) sb.push(COLOR_RED);\r\n if (range.start == range.end) {\r\n sb.push(\"^\");\r\n } else {\r\n while (start++ < range.end) sb.push(\"~\");\r\n }\r\n if (useColors) sb.push(COLOR_RESET);\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Base class of all diagnostic emitters. */\r\nexport abstract class DiagnosticEmitter {\r\n\r\n /** Diagnostic messages emitted so far. */\r\n diagnostics: DiagnosticMessage[];\r\n\r\n /** Initializes this diagnostic emitter. */\r\n protected constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n }\r\n\r\n /** Emits a diagnostic message of the specified category. */\r\n emitDiagnostic(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range);\r\n this.diagnostics.push(message);\r\n // console.log(formatDiagnosticMessage(message, true, true) + \"\\n\"); // temporary\r\n // console.log(new Error(\"stack\").stack);\r\n }\r\n\r\n /** Emits an informatory diagnostic message. */\r\n info(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.INFO, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits a warning diagnostic message. */\r\n warning(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.WARNING, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits an error diagnostic message. */\r\n error(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.ERROR, range, arg0, arg1, arg2);\r\n }\r\n}\r\n","/**\r\n * Abstract syntax tree representing a source file once parsed.\r\n * @module ast\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Token,\r\n Tokenizer,\r\n Range\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n normalizePath,\r\n resolvePath,\r\n CharCode\r\n} from \"./util\";\r\n\r\nexport { Token, Range };\r\n\r\n/** Indicates the kind of a node. */\r\nexport enum NodeKind {\r\n\r\n SOURCE,\r\n\r\n // types\r\n TYPE,\r\n TYPEPARAMETER,\r\n PARAMETER,\r\n SIGNATURE,\r\n\r\n // expressions\r\n IDENTIFIER,\r\n ASSERTION,\r\n BINARY,\r\n CALL,\r\n CLASS,\r\n COMMA,\r\n ELEMENTACCESS,\r\n FALSE,\r\n FUNCTION,\r\n INSTANCEOF,\r\n LITERAL,\r\n NEW,\r\n NULL,\r\n PARENTHESIZED,\r\n PROPERTYACCESS,\r\n TERNARY,\r\n SUPER,\r\n THIS,\r\n TRUE,\r\n CONSTRUCTOR,\r\n UNARYPOSTFIX,\r\n UNARYPREFIX,\r\n\r\n // statements\r\n BLOCK,\r\n BREAK,\r\n CONTINUE,\r\n DO,\r\n EMPTY,\r\n EXPORT,\r\n EXPORTIMPORT,\r\n EXPRESSION,\r\n FOR,\r\n IF,\r\n IMPORT,\r\n RETURN,\r\n SWITCH,\r\n THROW,\r\n TRY,\r\n VARIABLE,\r\n VOID,\r\n WHILE,\r\n\r\n // declaration statements\r\n CLASSDECLARATION,\r\n ENUMDECLARATION,\r\n ENUMVALUEDECLARATION,\r\n FIELDDECLARATION,\r\n FUNCTIONDECLARATION,\r\n IMPORTDECLARATION,\r\n INTERFACEDECLARATION,\r\n METHODDECLARATION,\r\n NAMESPACEDECLARATION,\r\n TYPEDECLARATION,\r\n VARIABLEDECLARATION,\r\n\r\n // special\r\n DECORATOR,\r\n EXPORTMEMBER,\r\n SWITCHCASE,\r\n COMMENT\r\n}\r\n\r\n/** Checks if a node represents a constant value. */\r\nexport function nodeIsConstantValue(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.LITERAL:\r\n case NodeKind.NULL:\r\n case NodeKind.TRUE:\r\n case NodeKind.FALSE: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable. */\r\nexport function nodeIsCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.CALL:\r\n case NodeKind.ELEMENTACCESS:\r\n case NodeKind.PROPERTYACCESS: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable with generic arguments. */\r\nexport function nodeIsGenericCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.PROPERTYACCESS: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all nodes. */\r\nexport abstract class Node {\r\n\r\n /** Node kind indicator. */\r\n kind: NodeKind;\r\n /** Source range. */\r\n range: Range;\r\n /** Parent node. */\r\n parent: Node | null = null;\r\n /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n\r\n /** Tests if this node has the specified flag or flags. */\r\n is(flag: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this node has one of the specified flags. */\r\n isAny(flag: CommonFlags): bool { return (this.flags & flag) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n\r\n // types\r\n\r\n static createType(\r\n name: IdentifierExpression,\r\n typeArguments: CommonTypeNode[] | null,\r\n isNullable: bool,\r\n range: Range\r\n ): TypeNode {\r\n var type = new TypeNode();\r\n type.range = range;\r\n type.name = name; name.parent = type;\r\n type.typeArguments = typeArguments; if (typeArguments) setParent(typeArguments, type);\r\n type.isNullable = isNullable;\r\n return type;\r\n }\r\n\r\n static createOmittedType(\r\n range: Range\r\n ): TypeNode {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"\", range),\r\n null,\r\n false,\r\n range\r\n );\r\n }\r\n\r\n static createTypeParameter(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n range: Range\r\n ): TypeParameterNode {\r\n var elem = new TypeParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.extendsType = extendsType; if (extendsType) extendsType.parent = elem;\r\n return elem;\r\n }\r\n\r\n static createParameter(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode,\r\n initializer: Expression | null,\r\n kind: ParameterKind,\r\n range: Range\r\n ): ParameterNode {\r\n var elem = new ParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.parameterKind = kind;\r\n return elem;\r\n }\r\n\r\n static createSignature(\r\n parameters: ParameterNode[],\r\n returnType: CommonTypeNode,\r\n explicitThisType: TypeNode | null,\r\n isNullable: bool,\r\n range: Range\r\n ): SignatureNode {\r\n var sig = new SignatureNode();\r\n sig.range = range;\r\n sig.parameters = parameters; setParent(parameters, sig);\r\n sig.returnType = returnType; returnType.parent = sig;\r\n sig.explicitThisType = explicitThisType; if (explicitThisType) explicitThisType.parent = sig;\r\n sig.isNullable = isNullable;\r\n return sig;\r\n }\r\n\r\n // special\r\n\r\n static createDecorator(\r\n name: Expression,\r\n args: Expression[] | null,\r\n range: Range\r\n ): DecoratorNode {\r\n var stmt = new DecoratorNode();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.arguments = args; if (args) setParent(args, stmt);\r\n stmt.decoratorKind = decoratorNameToKind(name);\r\n return stmt;\r\n }\r\n\r\n static createComment(\r\n text: string,\r\n kind: CommentKind,\r\n range: Range\r\n ): CommentNode {\r\n var node = new CommentNode();\r\n node.range = range;\r\n node.commentKind = kind;\r\n node.text = text;\r\n return node;\r\n }\r\n\r\n // expressions\r\n\r\n static createIdentifierExpression(\r\n name: string,\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = name;\r\n return expr;\r\n }\r\n\r\n static createEmptyIdentifierExpression(\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = \"\";\r\n return expr;\r\n }\r\n\r\n static createArrayLiteralExpression(\r\n elements: (Expression | null)[],\r\n range: Range\r\n ): ArrayLiteralExpression {\r\n var expr = new ArrayLiteralExpression();\r\n expr.range = range;\r\n expr.elementExpressions = elements; setParentIfNotNull(elements, expr);\r\n return expr;\r\n }\r\n\r\n static createAssertionExpression(\r\n assertionKind: AssertionKind,\r\n expression: Expression,\r\n toType: CommonTypeNode,\r\n range: Range\r\n ): AssertionExpression {\r\n var expr = new AssertionExpression();\r\n expr.range = range;\r\n expr.assertionKind = assertionKind;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.toType = toType; toType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createBinaryExpression(\r\n operator: Token,\r\n left: Expression,\r\n right: Expression,\r\n range: Range\r\n ): BinaryExpression {\r\n var expr = new BinaryExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.left = left; left.parent = expr;\r\n expr.right = right; right.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createCallExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): CallExpression {\r\n var expr = new CallExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createClassExpression(\r\n declaration: ClassDeclaration\r\n ): ClassExpression {\r\n var expr = new ClassExpression();\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createCommaExpression(\r\n expressions: Expression[],\r\n range: Range\r\n ): CommaExpression {\r\n var expr = new CommaExpression();\r\n expr.range = range;\r\n expr.expressions = expressions; setParent(expressions, expr);\r\n return expr;\r\n }\r\n\r\n static createConstructorExpression(\r\n range: Range\r\n ): ConstructorExpression {\r\n var expr = new ConstructorExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createElementAccessExpression(\r\n expression: Expression,\r\n element: Expression,\r\n range: Range\r\n ): ElementAccessExpression {\r\n var expr = new ElementAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.elementExpression = element; element.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createFalseExpression(\r\n range: Range\r\n ): FalseExpression {\r\n var expr = new FalseExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createFloatLiteralExpression(\r\n value: f64,\r\n range: Range\r\n ): FloatLiteralExpression {\r\n var expr = new FloatLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createFunctionExpression(\r\n declaration: FunctionDeclaration\r\n ): FunctionExpression {\r\n var expr = new FunctionExpression();\r\n expr.flags = declaration.flags & CommonFlags.ARROW;\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createInstanceOfExpression(\r\n expression: Expression,\r\n isType: CommonTypeNode,\r\n range: Range\r\n ): InstanceOfExpression {\r\n var expr = new InstanceOfExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.isType = isType; isType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createIntegerLiteralExpression(\r\n value: I64,\r\n range: Range\r\n ): IntegerLiteralExpression {\r\n var expr = new IntegerLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createNewExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): NewExpression {\r\n var expr = new NewExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createNullExpression(\r\n range: Range\r\n ): NullExpression {\r\n var expr = new NullExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createObjectLiteralExpression(\r\n names: IdentifierExpression[],\r\n values: Expression[],\r\n range: Range\r\n ): ObjectLiteralExpression {\r\n var expr = new ObjectLiteralExpression();\r\n expr.range = range;\r\n expr.names = names;\r\n expr.values = values;\r\n return expr;\r\n }\r\n\r\n static createParenthesizedExpression(\r\n expression: Expression,\r\n range: Range\r\n ): ParenthesizedExpression {\r\n var expr = new ParenthesizedExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createPropertyAccessExpression(\r\n expression: Expression,\r\n property: IdentifierExpression,\r\n range: Range\r\n ): PropertyAccessExpression {\r\n var expr = new PropertyAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.property = property; property.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createRegexpLiteralExpression(\r\n pattern: string,\r\n flags: string,\r\n range: Range\r\n ): RegexpLiteralExpression {\r\n var expr = new RegexpLiteralExpression();\r\n expr.range = range;\r\n expr.pattern = pattern;\r\n expr.patternFlags = flags;\r\n return expr;\r\n }\r\n\r\n static createTernaryExpression(\r\n condition: Expression,\r\n ifThen: Expression,\r\n ifElse: Expression,\r\n range: Range\r\n ): TernaryExpression {\r\n var expr = new TernaryExpression();\r\n expr.range = range;\r\n expr.condition = condition; condition.parent = expr;\r\n expr.ifThen = ifThen; ifThen.parent = expr;\r\n expr.ifElse = ifElse; ifElse.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createStringLiteralExpression(\r\n value: string,\r\n range: Range\r\n ): StringLiteralExpression {\r\n var expr = new StringLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createSuperExpression(\r\n range: Range\r\n ): SuperExpression {\r\n var expr = new SuperExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createThisExpression(\r\n range: Range\r\n ): ThisExpression {\r\n var expr = new ThisExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createTrueExpression(\r\n range: Range\r\n ): TrueExpression {\r\n var expr = new TrueExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createUnaryPostfixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPostfixExpression {\r\n var expr = new UnaryPostfixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createUnaryPrefixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPrefixExpression {\r\n var expr = new UnaryPrefixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n // statements\r\n\r\n static createBlockStatement(\r\n statements: Statement[],\r\n range: Range\r\n ): BlockStatement {\r\n var stmt = new BlockStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createBreakStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): BreakStatement {\r\n var stmt = new BreakStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createClassDeclaration(\r\n identifier: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n implementsTypes: TypeNode[] | null, // can't be functions\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ClassDeclaration {\r\n var stmt = new ClassDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = identifier; identifier.parent = stmt;\r\n stmt.typeParameters = typeParameters; setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.implementsTypes = implementsTypes; if (implementsTypes) setParent(implementsTypes, stmt);\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createContinueStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): ContinueStatement {\r\n var stmt = new ContinueStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createDoStatement(\r\n statement: Statement,\r\n condition: Expression,\r\n range: Range\r\n ): DoStatement {\r\n var stmt = new DoStatement();\r\n stmt.range = range;\r\n stmt.statement = statement; statement.parent = stmt;\r\n stmt.condition = condition; condition.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createEmptyStatement(\r\n range: Range\r\n ): EmptyStatement {\r\n var stmt = new EmptyStatement();\r\n stmt.range = range;\r\n return stmt;\r\n }\r\n\r\n static createEnumDeclaration(\r\n name: IdentifierExpression,\r\n members: EnumValueDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumDeclaration {\r\n var stmt = new EnumDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.values = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createEnumValueDeclaration(\r\n name: IdentifierExpression,\r\n value: Expression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumValueDeclaration {\r\n var stmt = new EnumValueDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportStatement(\r\n members: ExportMember[] | null,\r\n path: StringLiteralExpression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ExportStatement {\r\n var stmt = new ExportStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.members = members; if (members) setParent(members, stmt);\r\n stmt.path = path;\r\n if (path) {\r\n let normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n } else {\r\n stmt.normalizedPath = null;\r\n stmt.internalPath = null;\r\n }\r\n return stmt;\r\n }\r\n\r\n static createExportImportStatement(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression,\r\n range: Range\r\n ): ExportImportStatement {\r\n var stmt = new ExportImportStatement();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.externalName = externalName; externalName.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportMember(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression | null,\r\n range: Range\r\n ): ExportMember {\r\n var elem = new ExportMember();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n if (!externalName) {\r\n externalName = name;\r\n } else {\r\n externalName.parent = elem;\r\n }\r\n elem.externalName = externalName;\r\n return elem;\r\n }\r\n\r\n static createExpressionStatement(\r\n expression: Expression\r\n ): ExpressionStatement {\r\n var stmt = new ExpressionStatement();\r\n stmt.range = expression.range;\r\n stmt.expression = expression; expression.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createIfStatement(\r\n condition: Expression,\r\n ifTrue: Statement,\r\n ifFalse: Statement | null,\r\n range: Range\r\n ): IfStatement {\r\n var stmt = new IfStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.ifTrue = ifTrue; ifTrue.parent = stmt;\r\n stmt.ifFalse = ifFalse; if (ifFalse) ifFalse.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createImportStatement(\r\n decls: ImportDeclaration[] | null,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = decls; if (decls) setParent(decls, stmt);\r\n stmt.namespaceName = null;\r\n stmt.path = path;\r\n var normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative in project\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute in library\r\n if (!normalizedPath.startsWith(LIBRARY_PREFIX)) {\r\n normalizedPath = LIBRARY_PREFIX + normalizedPath;\r\n }\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportStatementWithWildcard(\r\n identifier: IdentifierExpression,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = null;\r\n stmt.namespaceName = identifier;\r\n stmt.path = path;\r\n stmt.normalizedPath = resolvePath(\r\n normalizePath(path.value),\r\n range.source.normalizedPath\r\n );\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportDeclaration(\r\n externalName: IdentifierExpression,\r\n name: IdentifierExpression | null,\r\n range: Range\r\n ): ImportDeclaration {\r\n var elem = new ImportDeclaration();\r\n elem.range = range;\r\n elem.externalName = externalName; externalName.parent = elem;\r\n if (!name) {\r\n name = externalName;\r\n } else {\r\n name.parent = elem;\r\n }\r\n elem.name = name;\r\n return elem;\r\n }\r\n\r\n static createInterfaceDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): InterfaceDeclaration {\r\n var stmt = new InterfaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createFieldDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FieldDeclaration {\r\n var stmt = new FieldDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.type = type; if (type) type.parent = stmt;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createForStatement(\r\n initializer: Statement | null,\r\n condition: Expression | null,\r\n incrementor: Expression | null,\r\n statement: Statement,\r\n range: Range\r\n ): ForStatement {\r\n var stmt = new ForStatement();\r\n stmt.range = range;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.condition = condition; if (condition) condition.parent = stmt;\r\n stmt.incrementor = incrementor; if (incrementor) incrementor.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FunctionDeclaration {\r\n var stmt = new FunctionDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createMethodDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): MethodDeclaration {\r\n var stmt = new MethodDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): NamespaceDeclaration {\r\n var stmt = new NamespaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createReturnStatement(\r\n value: Expression | null,\r\n range: Range\r\n ): ReturnStatement {\r\n var stmt = new ReturnStatement();\r\n stmt.range = range;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createSwitchStatement(\r\n condition: Expression,\r\n cases: SwitchCase[],\r\n range: Range\r\n ): SwitchStatement {\r\n var stmt = new SwitchStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.cases = cases; setParent(cases, stmt);\r\n return stmt;\r\n }\r\n\r\n static createSwitchCase(\r\n label: Expression | null,\r\n statements: Statement[],\r\n range: Range\r\n ): SwitchCase {\r\n var elem = new SwitchCase();\r\n elem.range = range;\r\n elem.label = label; if (label) label.parent = elem;\r\n elem.statements = statements; setParent(statements, elem);\r\n return elem;\r\n }\r\n\r\n static createThrowStatement(\r\n value: Expression,\r\n range: Range\r\n ): ThrowStatement {\r\n var stmt = new ThrowStatement();\r\n stmt.range = range;\r\n stmt.value = value; value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createTryStatement(\r\n statements: Statement[],\r\n catchVariable: IdentifierExpression | null,\r\n catchStatements: Statement[] | null,\r\n finallyStatements: Statement[] | null,\r\n range: Range\r\n ): TryStatement {\r\n var stmt = new TryStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n stmt.catchVariable = catchVariable;\r\n if (catchVariable) catchVariable.parent = stmt;\r\n stmt.catchStatements = catchStatements;\r\n if (catchStatements) setParent(catchStatements, stmt);\r\n stmt.finallyStatements = finallyStatements;\r\n if (finallyStatements) setParent(finallyStatements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createTypeDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n alias: CommonTypeNode,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): TypeDeclaration {\r\n var stmt = new TypeDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.type = alias; alias.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableStatement(\r\n declarations: VariableDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableStatement {\r\n var stmt = new VariableStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.declarations = declarations; setParent(declarations, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableDeclaration {\r\n var elem = new VariableDeclaration();\r\n elem.range = range;\r\n elem.flags = flags;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.decorators = decorators; // inherited\r\n return elem;\r\n }\r\n\r\n static createVoidStatement(\r\n expression: Expression,\r\n range: Range\r\n ): VoidStatement {\r\n var stmt = new VoidStatement();\r\n stmt.range = range;\r\n stmt.expression = expression;\r\n return stmt;\r\n }\r\n\r\n static createWhileStatement(\r\n condition: Expression,\r\n statement: Statement,\r\n range: Range\r\n ): WhileStatement {\r\n var stmt = new WhileStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n}\r\n\r\n// types\r\n\r\nexport abstract class CommonTypeNode extends Node {\r\n // kind varies\r\n\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type annotation. */\r\nexport class TypeNode extends CommonTypeNode {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: CommonTypeNode[] | null;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameterNode extends Node {\r\n kind = NodeKind.TYPEPARAMETER;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Extended type reference, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n}\r\n\r\n/** Represents the kind of a parameter. */\r\nexport enum ParameterKind {\r\n /** No specific flags. */\r\n DEFAULT,\r\n /** Is an optional parameter. */\r\n OPTIONAL,\r\n /** Is a rest parameter. */\r\n REST\r\n}\r\n\r\n/** Represents a function parameter. */\r\nexport class ParameterNode extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: CommonTypeNode;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n /** Implicit field declaration, if applicable. */\r\n implicitFieldDeclaration: FieldDeclaration | null = null;\r\n}\r\n\r\n/** Represents a function signature. */\r\nexport class SignatureNode extends CommonTypeNode {\r\n kind = NodeKind.SIGNATURE;\r\n\r\n /** Accepted parameters. */\r\n parameters: ParameterNode[];\r\n /** Return type. */\r\n returnType: CommonTypeNode;\r\n /** Explicitly provided this type, if any. */\r\n explicitThisType: TypeNode | null; // can't be a function\r\n}\r\n\r\n// special\r\n\r\n/** Built-in decorator kinds. */\r\nexport enum DecoratorKind {\r\n CUSTOM,\r\n GLOBAL,\r\n OPERATOR,\r\n OPERATOR_BINARY,\r\n OPERATOR_PREFIX,\r\n OPERATOR_POSTFIX,\r\n UNMANAGED,\r\n SEALED,\r\n INLINE,\r\n EXTERNAL,\r\n BUILTIN\r\n}\r\n\r\n/** Returns the kind of the specified decorator. Defaults to {@link DecoratorKind.CUSTOM}. */\r\nexport function decoratorNameToKind(name: Expression): DecoratorKind {\r\n // @global, @inline, @operator, @sealed, @unmanaged\r\n if (name.kind == NodeKind.IDENTIFIER) {\r\n let nameStr = (name).text;\r\n assert(nameStr.length);\r\n switch (nameStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (nameStr == \"builtin\") return DecoratorKind.BUILTIN;\r\n break;\r\n }\r\n case CharCode.e: {\r\n if (nameStr == \"external\") return DecoratorKind.EXTERNAL;\r\n break;\r\n }\r\n case CharCode.g: {\r\n if (nameStr == \"global\") return DecoratorKind.GLOBAL;\r\n break;\r\n }\r\n case CharCode.i: {\r\n if (nameStr == \"inline\") return DecoratorKind.INLINE;\r\n break;\r\n }\r\n case CharCode.o: {\r\n if (nameStr == \"operator\") return DecoratorKind.OPERATOR;\r\n break;\r\n }\r\n case CharCode.s: {\r\n if (nameStr == \"sealed\") return DecoratorKind.SEALED;\r\n break;\r\n }\r\n case CharCode.u: {\r\n if (nameStr == \"unmanaged\") return DecoratorKind.UNMANAGED;\r\n break;\r\n }\r\n }\r\n } else if (\r\n name.kind == NodeKind.PROPERTYACCESS &&\r\n (name).expression.kind == NodeKind.IDENTIFIER\r\n ) {\r\n let nameStr = ((name).expression).text;\r\n assert(nameStr.length);\r\n let propStr = (name).property.text;\r\n assert(propStr.length);\r\n // @operator.binary, @operator.prefix, @operator.postfix\r\n if (nameStr == \"operator\") {\r\n switch (propStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (propStr == \"binary\") return DecoratorKind.OPERATOR_BINARY;\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (propStr) {\r\n case \"prefix\": return DecoratorKind.OPERATOR_PREFIX;\r\n case \"postfix\": return DecoratorKind.OPERATOR_POSTFIX;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return DecoratorKind.CUSTOM;\r\n}\r\n\r\n/** Represents a decorator. */\r\nexport class DecoratorNode extends Node {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n}\r\n\r\n/** Comment kinds. */\r\nexport enum CommentKind {\r\n /** Line comment. */\r\n LINE,\r\n /** Triple-slash comment. */\r\n TRIPLE,\r\n /** Block comment. */\r\n BLOCK\r\n}\r\n\r\n/** Represents a comment. */\r\nexport class CommentNode extends Node {\r\n kind = NodeKind.COMMENT;\r\n\r\n /** Comment kind. */\r\n commentKind: CommentKind;\r\n /** Comment text. */\r\n text: string;\r\n}\r\n\r\n// expressions\r\n\r\n/** Base class of all expression nodes. */\r\nexport abstract class Expression extends Node { }\r\n\r\n/** Represents an identifier expression. */\r\nexport class IdentifierExpression extends Expression {\r\n kind = NodeKind.IDENTIFIER;\r\n\r\n /** Textual name. */\r\n text: string;\r\n}\r\n\r\n/** Indicates the kind of a literal. */\r\nexport enum LiteralKind {\r\n FLOAT,\r\n INTEGER,\r\n STRING,\r\n REGEXP,\r\n ARRAY,\r\n OBJECT\r\n}\r\n\r\n/** Base class of all literal expressions. */\r\nexport abstract class LiteralExpression extends Expression {\r\n kind = NodeKind.LITERAL;\r\n\r\n /** Specific literal kind. */\r\n literalKind: LiteralKind;\r\n}\r\n\r\n/** Represents an `[]` literal expression. */\r\nexport class ArrayLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.ARRAY;\r\n\r\n /** Nested element expressions. */\r\n elementExpressions: (Expression | null)[];\r\n}\r\n\r\n/** Indicates the kind of an assertion. */\r\nexport enum AssertionKind {\r\n PREFIX,\r\n AS\r\n}\r\n\r\n/** Represents an assertion expression. */\r\nexport class AssertionExpression extends Expression {\r\n kind = NodeKind.ASSERTION;\r\n\r\n /** Specific kind of this assertion. */\r\n assertionKind: AssertionKind;\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Target type. */\r\n toType: CommonTypeNode;\r\n}\r\n\r\n/** Represents a binary expression. */\r\nexport class BinaryExpression extends Expression {\r\n kind = NodeKind.BINARY;\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Left-hand side expression */\r\n left: Expression;\r\n /** Right-hand side expression. */\r\n right: Expression;\r\n}\r\n\r\n/** Represents a call expression. */\r\nexport class CallExpression extends Expression {\r\n kind = NodeKind.CALL;\r\n\r\n /** Called expression. Usually an identifier or property access expression. */\r\n expression: Expression;\r\n /** Provided type arguments. */\r\n typeArguments: CommonTypeNode[] | null;\r\n /** Provided arguments. */\r\n arguments: Expression[];\r\n}\r\n\r\n/** Represents a class expression using the 'class' keyword. */\r\nexport class ClassExpression extends Expression {\r\n kind = NodeKind.CLASS;\r\n\r\n /** Inline class declaration. */\r\n declaration: ClassDeclaration;\r\n}\r\n\r\n/** Represents a comma expression composed of multiple expressions. */\r\nexport class CommaExpression extends Expression {\r\n kind = NodeKind.COMMA;\r\n\r\n /** Sequential expressions. */\r\n expressions: Expression[];\r\n}\r\n\r\n/** Represents a `constructor` expression. */\r\nexport class ConstructorExpression extends IdentifierExpression {\r\n kind = NodeKind.CONSTRUCTOR;\r\n text = \"constructor\";\r\n}\r\n\r\n/** Represents an element access expression, e.g., array access. */\r\nexport class ElementAccessExpression extends Expression {\r\n kind = NodeKind.ELEMENTACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Element of the expression being accessed. */\r\n elementExpression: Expression;\r\n}\r\n\r\n/** Represents a float literal expression. */\r\nexport class FloatLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.FLOAT;\r\n\r\n /** Float value. */\r\n value: f64;\r\n}\r\n\r\n/** Represents a function expression using the 'function' keyword. */\r\nexport class FunctionExpression extends Expression {\r\n kind = NodeKind.FUNCTION;\r\n\r\n /** Inline function declaration. */\r\n declaration: FunctionDeclaration;\r\n}\r\n\r\n/** Represents an `instanceof` expression. */\r\nexport class InstanceOfExpression extends Expression {\r\n kind = NodeKind.INSTANCEOF;\r\n\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Type to test for. */\r\n isType: CommonTypeNode;\r\n}\r\n\r\n/** Represents an integer literal expression. */\r\nexport class IntegerLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.INTEGER;\r\n\r\n /** Integer value. */\r\n value: I64;\r\n}\r\n\r\n/** Represents a `new` expression. Like a call but with its own kind. */\r\nexport class NewExpression extends CallExpression {\r\n kind = NodeKind.NEW;\r\n}\r\n\r\n/** Represents a `null` expression. */\r\nexport class NullExpression extends IdentifierExpression {\r\n kind = NodeKind.NULL;\r\n text = \"null\";\r\n}\r\n\r\n/** Represents an object literal expression. */\r\nexport class ObjectLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.OBJECT;\r\n\r\n /** Field names. */\r\n names: IdentifierExpression[];\r\n /** Field values. */\r\n values: Expression[];\r\n}\r\n\r\n/** Represents a parenthesized expression. */\r\nexport class ParenthesizedExpression extends Expression {\r\n kind = NodeKind.PARENTHESIZED;\r\n\r\n /** Expression in parenthesis. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a property access expression. */\r\nexport class PropertyAccessExpression extends Expression {\r\n kind = NodeKind.PROPERTYACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Property of the expression being accessed. */\r\n property: IdentifierExpression;\r\n}\r\n\r\n/** Represents a regular expression literal expression. */\r\nexport class RegexpLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.REGEXP;\r\n\r\n /** Regular expression pattern. */\r\n pattern: string;\r\n /** Regular expression flags. */\r\n patternFlags: string;\r\n}\r\n\r\n/** Represents a ternary expression, i.e., short if notation. */\r\nexport class TernaryExpression extends Expression {\r\n kind = NodeKind.TERNARY;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Expression executed when condition is `true`. */\r\n ifThen: Expression;\r\n /** Expression executed when condition is `false`. */\r\n ifElse: Expression;\r\n}\r\n\r\n/** Represents a string literal expression. */\r\nexport class StringLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.STRING;\r\n\r\n /** String value without quotes. */\r\n value: string;\r\n}\r\n\r\n/** Represents a `super` expression. */\r\nexport class SuperExpression extends IdentifierExpression {\r\n kind = NodeKind.SUPER;\r\n text = \"super\";\r\n}\r\n\r\n/** Represents a `this` expression. */\r\nexport class ThisExpression extends IdentifierExpression {\r\n kind = NodeKind.THIS;\r\n text = \"this\";\r\n}\r\n\r\n/** Represents a `true` expression. */\r\nexport class TrueExpression extends IdentifierExpression {\r\n kind = NodeKind.TRUE;\r\n text = \"true\";\r\n}\r\n\r\n/** Represents a `false` expression. */\r\nexport class FalseExpression extends IdentifierExpression {\r\n kind = NodeKind.FALSE;\r\n text = \"false\";\r\n}\r\n\r\n/** Base class of all unary expressions. */\r\nexport abstract class UnaryExpression extends Expression {\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Operand expression. */\r\n operand: Expression;\r\n}\r\n\r\n/** Represents a unary postfix expression, e.g. a postfix increment. */\r\nexport class UnaryPostfixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPOSTFIX;\r\n}\r\n\r\n/** Represents a unary prefix expression, e.g. a negation. */\r\nexport class UnaryPrefixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPREFIX;\r\n}\r\n\r\n// statements\r\n\r\nexport function isLastStatement(statement: Statement): bool {\r\n var parent = assert(statement.parent);\r\n if (parent.kind == NodeKind.BLOCK) {\r\n let statements = (parent).statements;\r\n if (statements[statements.length - 1] === statement) {\r\n switch (assert(parent.parent).kind) {\r\n case NodeKind.FUNCTIONDECLARATION:\r\n case NodeKind.METHODDECLARATION: return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all statement nodes. */\r\nexport abstract class Statement extends Node { }\r\n\r\n/** Indicates the specific kind of a source. */\r\nexport enum SourceKind {\r\n /** Default source. Usually imported from an entry file. */\r\n DEFAULT,\r\n /** Entry file. */\r\n ENTRY,\r\n /** Library file. */\r\n LIBRARY\r\n}\r\n\r\n/** A top-level source node. */\r\nexport class Source extends Node {\r\n kind = NodeKind.SOURCE;\r\n parent = null;\r\n\r\n /** Source kind. */\r\n sourceKind: SourceKind;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Path used internally. */\r\n internalPath: string;\r\n /** Simple path (last part without extension). */\r\n simplePath: string;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Full source text. */\r\n text: string;\r\n /** Tokenizer reference. */\r\n tokenizer: Tokenizer | null = null;\r\n /** Source map index. */\r\n debugInfoIndex: i32 = -1;\r\n /** Re-exported sources. */\r\n exportPaths: Set | null = null;\r\n\r\n /** Constructs a new source node. */\r\n constructor(normalizedPath: string, text: string, kind: SourceKind) {\r\n super();\r\n this.sourceKind = kind;\r\n this.normalizedPath = normalizedPath;\r\n var internalPath = mangleInternalPath(this.normalizedPath);\r\n this.internalPath = internalPath;\r\n var pos = internalPath.lastIndexOf(PATH_DELIMITER);\r\n this.simplePath = pos >= 0 ? internalPath.substring(pos + 1) : internalPath;\r\n this.statements = new Array();\r\n this.range = new Range(this, 0, text.length);\r\n this.text = text;\r\n }\r\n\r\n /** Tests if this source is an entry file. */\r\n get isEntry(): bool { return this.sourceKind == SourceKind.ENTRY; }\r\n /** Tests if this source is a stdlib file. */\r\n get isLibrary(): bool { return this.sourceKind == SourceKind.LIBRARY; }\r\n}\r\n\r\n/** Base class of all declaration statements. */\r\nexport abstract class DeclarationStatement extends Statement {\r\n\r\n /** Simple name being declared. */\r\n name: IdentifierExpression;\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null = null;\r\n\r\n protected cachedProgramLevelInternalName: string | null = null;\r\n protected cachedFileLevelInternalName: string | null = null;\r\n\r\n /** Gets the mangled program-level internal name of this declaration. */\r\n get programLevelInternalName(): string {\r\n if (!this.cachedProgramLevelInternalName) {\r\n this.cachedProgramLevelInternalName = mangleInternalName(this, true);\r\n }\r\n return this.cachedProgramLevelInternalName;\r\n }\r\n\r\n /** Gets the mangled file-level internal name of this declaration. */\r\n get fileLevelInternalName(): string {\r\n if (!this.cachedFileLevelInternalName) {\r\n this.cachedFileLevelInternalName = mangleInternalName(this, false);\r\n }\r\n return this.cachedFileLevelInternalName;\r\n }\r\n\r\n /** Tests if this is a top-level declaration within its source file. */\r\n get isTopLevel(): bool {\r\n var parent = this.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent)) {\r\n return false;\r\n }\r\n return parent.kind == NodeKind.SOURCE;\r\n }\r\n\r\n /** Tests if this declaration is a top-level export within its source file. */\r\n get isTopLevelExport(): bool {\r\n var parent = this.parent;\r\n if (!parent || (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent))) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.NAMESPACEDECLARATION) {\r\n return this.is(CommonFlags.EXPORT) && (parent).isTopLevelExport;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return this.is(CommonFlags.STATIC) && (parent).isTopLevelExport;\r\n }\r\n return parent.kind == NodeKind.SOURCE && this.is(CommonFlags.EXPORT);\r\n }\r\n\r\n /** Tests if this declaration needs an explicit export. */\r\n needsExplicitExport(member: ExportMember): bool {\r\n // This is necessary because module-level exports are automatically created\r\n // for top level declarations of all sorts. This function essentially tests\r\n // that there isn't a otherwise duplicate top-level export already.\r\n return (\r\n member.name.text != member.externalName.text || // if aliased\r\n this.range.source != member.range.source || // if a re-export\r\n !this.isTopLevelExport // if not top-level\r\n );\r\n }\r\n}\r\n\r\n/** Base class of all variable-like declaration statements. */\r\nexport abstract class VariableLikeDeclarationStatement extends DeclarationStatement {\r\n\r\n /** Variable type. */\r\n type: CommonTypeNode | null;\r\n /** Variable initializer. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a block statement. */\r\nexport class BlockStatement extends Statement {\r\n kind = NodeKind.BLOCK;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `break` statement. */\r\nexport class BreakStatement extends Statement {\r\n kind = NodeKind.BREAK;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `class` declaration. */\r\nexport class ClassDeclaration extends DeclarationStatement {\r\n kind = NodeKind.CLASSDECLARATION;\r\n\r\n /** Accepted type parameters. */\r\n typeParameters: TypeParameterNode[];\r\n /** Base class type being extended, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n /** Interface types being implemented, if any. */\r\n implementsTypes: TypeNode[] | null; // can't be functions\r\n /** Class member declarations. */\r\n members: DeclarationStatement[];\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents a `continue` statement. */\r\nexport class ContinueStatement extends Statement {\r\n kind = NodeKind.CONTINUE;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `do` statement. */\r\nexport class DoStatement extends Statement {\r\n kind = NodeKind.DO;\r\n\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n /** Condition when to repeat. */\r\n condition: Expression;\r\n}\r\n\r\n/** Represents an empty statement, i.e., a semicolon terminating nothing. */\r\nexport class EmptyStatement extends Statement {\r\n kind = NodeKind.EMPTY;\r\n}\r\n\r\n/** Represents an `enum` declaration. */\r\nexport class EnumDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMDECLARATION;\r\n\r\n /** Enum value declarations. */\r\n values: EnumValueDeclaration[];\r\n}\r\n\r\n/** Represents a value of an `enum` declaration. */\r\nexport class EnumValueDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMVALUEDECLARATION;\r\n // name is inherited\r\n\r\n /** Value expression. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents an `export import` statement of an interface. */\r\nexport class ExportImportStatement extends Node {\r\n kind = NodeKind.EXPORTIMPORT;\r\n\r\n /** Identifier being imported. */\r\n name: IdentifierExpression;\r\n /** Identifier being exported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents a member of an `export` statement. */\r\nexport class ExportMember extends Node {\r\n kind = NodeKind.EXPORTMEMBER;\r\n\r\n /** Identifier being exported. */\r\n name: IdentifierExpression;\r\n /** Identifier seen when imported again. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `export` statement. */\r\nexport class ExportStatement extends Statement {\r\n kind = NodeKind.EXPORT;\r\n\r\n /** Array of members if a set of named exports, or `null` if a filespace export. */\r\n members: ExportMember[] | null;\r\n /** Path being exported from, if applicable. */\r\n path: StringLiteralExpression | null;\r\n /** Normalized path, if `path` is set. */\r\n normalizedPath: string | null;\r\n /** Mangled internal path being referenced, if `path` is set. */\r\n internalPath: string | null;\r\n}\r\n\r\n/** Represents an expression that is used as a statement. */\r\nexport class ExpressionStatement extends Statement {\r\n kind = NodeKind.EXPRESSION;\r\n\r\n /** Expression being used as a statement.*/\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a field declaration within a `class`. */\r\nexport class FieldDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.FIELDDECLARATION;\r\n\r\n /** Parameter index within the constructor, if applicable. */\r\n parameterIndex: i32 = -1;\r\n}\r\n\r\n/** Represents a `for` statement. */\r\nexport class ForStatement extends Statement {\r\n kind = NodeKind.FOR;\r\n\r\n /**\r\n * Initializer statement, if present.\r\n * Either a {@link VariableStatement} or {@link ExpressionStatement}.\r\n */\r\n initializer: Statement | null;\r\n /** Condition expression, if present. */\r\n condition: Expression | null;\r\n /** Incrementor expression, if present. */\r\n incrementor: Expression | null;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Represents a `function` declaration. */\r\nexport class FunctionDeclaration extends DeclarationStatement {\r\n kind = NodeKind.FUNCTIONDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Function signature. */\r\n signature: SignatureNode;\r\n /** Body statement. Usually a block. */\r\n body: Statement | null;\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents an `if` statement. */\r\nexport class IfStatement extends Statement {\r\n kind = NodeKind.IF;\r\n\r\n /** Condition. */\r\n condition: Expression;\r\n /** Statement executed when condition is `true`. */\r\n ifTrue: Statement;\r\n /** Statement executed when condition is `false`. */\r\n ifFalse: Statement | null;\r\n}\r\n\r\n/** Represents an `import` declaration part of an {@link ImportStatement}. */\r\nexport class ImportDeclaration extends DeclarationStatement {\r\n kind = NodeKind.IMPORTDECLARATION;\r\n\r\n /** Identifier being imported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `import` statement. */\r\nexport class ImportStatement extends Statement {\r\n kind = NodeKind.IMPORT;\r\n\r\n /** Array of member declarations or `null` if an asterisk import. */\r\n declarations: ImportDeclaration[] | null;\r\n /** Name of the local namespace, if an asterisk import. */\r\n namespaceName: IdentifierExpression | null;\r\n /** Path being imported from. */\r\n path: StringLiteralExpression;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Mangled internal path being referenced. */\r\n internalPath: string;\r\n}\r\n\r\n/** Represents an `interfarce` declaration. */\r\nexport class InterfaceDeclaration extends ClassDeclaration {\r\n kind = NodeKind.INTERFACEDECLARATION;\r\n}\r\n\r\n/** Represents a method declaration within a `class`. */\r\nexport class MethodDeclaration extends FunctionDeclaration {\r\n kind = NodeKind.METHODDECLARATION;\r\n}\r\n\r\n/** Represents a `namespace` declaration. */\r\nexport class NamespaceDeclaration extends DeclarationStatement {\r\n kind = NodeKind.NAMESPACEDECLARATION;\r\n\r\n /** Array of namespace members. */\r\n members: Statement[];\r\n}\r\n\r\n/** Represents a `return` statement. */\r\nexport class ReturnStatement extends Statement {\r\n kind = NodeKind.RETURN;\r\n\r\n /** Value expression being returned, if present. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents a single `case` within a `switch` statement. */\r\nexport class SwitchCase extends Node {\r\n kind = NodeKind.SWITCHCASE;\r\n\r\n /** Label expression. `null` indicates the default case. */\r\n label: Expression | null;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `switch` statement. */\r\nexport class SwitchStatement extends Statement {\r\n kind = NodeKind.SWITCH;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Contained cases. */\r\n cases: SwitchCase[];\r\n}\r\n\r\n/** Represents a `throw` statement. */\r\nexport class ThrowStatement extends Statement {\r\n kind = NodeKind.THROW;\r\n\r\n /** Value expression being thrown. */\r\n value: Expression;\r\n}\r\n\r\n/** Represents a `try` statement. */\r\nexport class TryStatement extends Statement {\r\n kind = NodeKind.TRY;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Exception variable name, if a `catch` clause is present. */\r\n catchVariable: IdentifierExpression | null;\r\n /** Statements being executed on catch, if a `catch` clause is present. */\r\n catchStatements: Statement[] | null;\r\n /** Statements being executed afterwards, if a `finally` clause is present. */\r\n finallyStatements: Statement[] | null;\r\n}\r\n\r\n/** Represents a `type` declaration. */\r\nexport class TypeDeclaration extends DeclarationStatement {\r\n kind = NodeKind.TYPEDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Type being aliased. */\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents a variable declaration part of a {@link VariableStatement}. */\r\nexport class VariableDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.VARIABLEDECLARATION;\r\n}\r\n\r\n/** Represents a variable statement wrapping {@link VariableDeclaration}s. */\r\nexport class VariableStatement extends Statement {\r\n kind = NodeKind.VARIABLE;\r\n\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null;\r\n /** Array of member declarations. */\r\n declarations: VariableDeclaration[];\r\n}\r\n\r\n/** Represents a void statement dropping an expression's value. */\r\nexport class VoidStatement extends Statement {\r\n kind = NodeKind.VOID;\r\n\r\n /** Expression being dropped. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a `while` statement. */\r\nexport class WhileStatement extends Statement {\r\n kind = NodeKind.WHILE;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Finds the first decorator matching the specified kind. */\r\nexport function findDecorator(kind: DecoratorKind, decorators: DecoratorNode[] | null): DecoratorNode | null {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n if (decorator.decoratorKind == kind) return decorator;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Mangles a declaration's name to an internal name. */\r\nexport function mangleInternalName(declaration: DeclarationStatement, asGlobal: bool = false): string {\r\n var name = declaration.name.text;\r\n var parent = declaration.parent;\r\n if (!parent) return name;\r\n if (\r\n declaration.kind == NodeKind.VARIABLEDECLARATION &&\r\n parent.kind == NodeKind.VARIABLE\r\n ) { // skip over\r\n if (!(parent = parent.parent)) return name;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) + (\r\n declaration.is(CommonFlags.STATIC)\r\n ? STATIC_DELIMITER\r\n : INSTANCE_DELIMITER\r\n ) + name;\r\n }\r\n if (\r\n parent.kind == NodeKind.NAMESPACEDECLARATION ||\r\n parent.kind == NodeKind.ENUMDECLARATION\r\n ) {\r\n return mangleInternalName(parent, asGlobal) +\r\n STATIC_DELIMITER + name;\r\n }\r\n return asGlobal\r\n ? name\r\n : declaration.range.source.internalPath + PATH_DELIMITER + name;\r\n}\r\n\r\n/** Mangles an external to an internal path. */\r\nexport function mangleInternalPath(path: string): string {\r\n if (path.endsWith(\".ts\")) path = path.substring(0, path.length - 3);\r\n return path;\r\n}\r\n\r\n// Helpers\r\n\r\n/** Sets the parent node on an array of nodes. */\r\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\n/** Sets the parent node on an array of nullable nodes. */\r\nfunction setParentIfNotNull(nodes: (Node | null)[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n let node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\r\n}\r\n","/**\r\n * 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 = memory.allocate(16);\r\n return module;\r\n }\r\n\r\n static createFrom(buffer: Uint8Array): Module {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.cachedByValue = memory.allocate(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n memory.free(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n removeFunctionType(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunctionType(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocPtrArray(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, numNames, cStr, condition, value);\r\n } finally {\r\n memory.free(cStr);\r\n memory.free(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) memory.free(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createCallImport(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCallImport(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocPtrArray(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[] | null,\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes ? varTypes.length : 0, body);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n private cachedTemporaryName: usize = 0;\r\n private hasTemporaryFunction: bool = false;\r\n\r\n addTemporaryFunction(result: NativeType, paramTypes: NativeType[] | null, body: ExpressionRef): FunctionRef {\r\n this.hasTemporaryFunction = assert(!this.hasTemporaryFunction);\r\n var tempName = this.cachedTemporaryName;\r\n if (!tempName) this.cachedTemporaryName = tempName = allocString(\"\"); // works because strings are interned\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n let typeRef = _BinaryenAddFunctionType(this.ref, tempName, result, cArr, paramTypes ? paramTypes.length : 0);\r\n return _BinaryenAddFunction(this.ref, tempName, typeRef, 0, 0, body);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n removeTemporaryFunction(): void {\r\n this.hasTemporaryFunction = !assert(this.hasTemporaryFunction);\r\n var tempName = assert(this.cachedTemporaryName);\r\n _BinaryenRemoveFunction(this.ref, tempName);\r\n _BinaryenRemoveFunctionType(this.ref, tempName);\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n removeImport(internalName: string): void {\r\n var cStr = allocString(internalName);\r\n try {\r\n _BinaryenRemoveImport(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n memory.free(cArr3);\r\n memory.free(cArr2);\r\n memory.free(cArr1);\r\n for (let i = k - 1; i >= 0; --i) memory.free(segs[i]);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(funcs: FunctionRef[]): void {\r\n var cArr = allocPtrArray(funcs);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, funcs.length);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n getOptimizeLevel(): i32 {\r\n return _BinaryenGetOptimizeLevel();\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n getShrinkLevel(): i32 {\r\n return _BinaryenGetShrinkLevel();\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n memory.free(cArr);\r\n for (let i = numNames; i >= 0; --i) memory.free(names[i]);\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0; // for free'ing\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeExpression(expr: ExpressionRef): ExpressionRef {\r\n // remember the previous optimize levels and set to max instead, to be sure\r\n var previousOptimizeLevel = _BinaryenGetOptimizeLevel();\r\n var previousShrinkLevel = _BinaryenGetShrinkLevel();\r\n var previousDebugInfo = _BinaryenGetDebugInfo();\r\n _BinaryenSetOptimizeLevel(4);\r\n _BinaryenSetShrinkLevel(0);\r\n _BinaryenSetDebugInfo(false);\r\n\r\n // wrap the expression in a temp. function and run the precompute pass on it\r\n var type = _BinaryenExpressionGetType(expr);\r\n var func = this.addTemporaryFunction(type, null, expr);\r\n var names = this.cachedPrecomputeNames;\r\n if (!names) {\r\n let name = allocString(\"precompute\");\r\n this.cachedPrecomputeName = name;\r\n this.cachedPrecomputeNames = names = allocI32Array([ name ]);\r\n }\r\n _BinaryenFunctionRunPasses(func, this.ref, names, 1);\r\n expr = _BinaryenFunctionGetBody(func);\r\n this.removeTemporaryFunction();\r\n\r\n // reset optimize levels to previous\r\n _BinaryenSetOptimizeLevel(previousOptimizeLevel);\r\n _BinaryenSetShrinkLevel(previousShrinkLevel);\r\n _BinaryenSetDebugInfo(previousDebugInfo);\r\n return expr;\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): BinaryModule {\r\n var out = this.cachedByValue;\r\n var cStr = allocString(sourceMapUrl);\r\n var binaryPtr: usize = 0;\r\n var sourceMapPtr: usize = 0;\r\n try {\r\n _BinaryenModuleAllocateAndWrite(out, this.ref, cStr);\r\n binaryPtr = readInt(out);\r\n let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let ret = new BinaryModule();\r\n ret.output = readBuffer(binaryPtr, binaryBytes);\r\n ret.sourceMap = readString(sourceMapPtr);\r\n return ret;\r\n } finally {\r\n if (cStr) memory.free(cStr);\r\n if (binaryPtr) memory.free(binaryPtr);\r\n if (sourceMapPtr) memory.free(sourceMapPtr);\r\n }\r\n }\r\n\r\n toText(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n toAsmjs(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n dispose(): void {\r\n assert(this.ref);\r\n memory.free(this.cachedByValue);\r\n memory.free(this.cachedTemporaryName);\r\n memory.free(this.cachedPrecomputeName);\r\n memory.free(this.cachedPrecomputeNames);\r\n _BinaryenModuleDispose(this.ref);\r\n this.ref = 0;\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(\r\n expr: ExpressionRef,\r\n noSideEffects: bool = false,\r\n maxDepth: i32 = i32.MAX_VALUE\r\n ): ExpressionRef { // currently supports side effect free expressions only\r\n if (maxDepth < 0) return 0;\r\n maxDepth -= 1;\r\n\r\n var nested1: ExpressionRef,\r\n nested2: ExpressionRef;\r\n\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n }\r\n case ExpressionId.GetLocal: {\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n }\r\n case ExpressionId.GetGlobal: {\r\n let globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n }\r\n case ExpressionId.Load: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return (\r\n _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n );\r\n }\r\n case ExpressionId.Unary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n }\r\n case ExpressionId.Binary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\n// expressions\r\n\r\nexport function getExpressionId(expr: ExpressionRef): ExpressionId {\r\n return _BinaryenExpressionGetId(expr);\r\n}\r\n\r\nexport function getExpressionType(expr: ExpressionRef): NativeType {\r\n return _BinaryenExpressionGetType(expr);\r\n}\r\n\r\nexport function getConstValueI32(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI32(expr);\r\n}\r\n\r\nexport function getConstValueI64Low(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64Low(expr);\r\n}\r\n\r\nexport function getConstValueI64High(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64High(expr);\r\n}\r\n\r\nexport function getConstValueF32(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF32(expr);\r\n}\r\n\r\nexport function getConstValueF64(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF64(expr);\r\n}\r\n\r\nexport function getGetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenGetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenSetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSetLocalGetValue(expr);\r\n}\r\n\r\nexport function isTeeLocal(expr: ExpressionRef): bool {\r\n return _BinaryenSetLocalIsTee(expr);\r\n}\r\n\r\nexport function getBinaryOp(expr: ExpressionRef): BinaryOp {\r\n return _BinaryenBinaryGetOp(expr);\r\n}\r\n\r\nexport function getBinaryLeft(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetLeft(expr);\r\n}\r\n\r\nexport function getBinaryRight(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetRight(expr);\r\n}\r\n\r\nexport function getUnaryOp(expr: ExpressionRef): UnaryOp {\r\n return _BinaryenUnaryGetOp(expr);\r\n}\r\n\r\nexport function getUnaryValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenUnaryGetValue(expr);\r\n}\r\n\r\nexport function getLoadBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetBytes(expr);\r\n}\r\n\r\nexport function getLoadOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetOffset(expr);\r\n}\r\n\r\nexport function getLoadPtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoadGetPtr(expr);\r\n}\r\n\r\nexport function isLoadSigned(expr: ExpressionRef): bool {\r\n return _BinaryenLoadIsSigned(expr);\r\n}\r\n\r\nexport function getStoreBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetBytes(expr);\r\n}\r\n\r\nexport function getStoreOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetOffset(expr);\r\n}\r\n\r\nexport function getStorePtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetPtr(expr);\r\n}\r\n\r\nexport function getStoreValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetValue(expr);\r\n}\r\n\r\nexport function getBlockName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBlockGetName(expr));\r\n}\r\n\r\nexport function getBlockChildCount(expr: ExpressionRef): Index {\r\n return _BinaryenBlockGetNumChildren(expr);\r\n}\r\n\r\nexport function getBlockChild(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenBlockGetChild(expr, index);\r\n}\r\n\r\nexport function getIfCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetCondition(expr);\r\n}\r\n\r\nexport function getIfTrue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfTrue(expr);\r\n}\r\n\r\nexport function getIfFalse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfFalse(expr);\r\n}\r\n\r\nexport function getLoopName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenLoopGetName(expr));\r\n}\r\n\r\nexport function getLoopBody(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoopGetBody(expr);\r\n}\r\n\r\nexport function getBreakName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBreakGetName(expr));\r\n}\r\n\r\nexport function getBreakCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBreakGetCondition(expr);\r\n}\r\n\r\nexport function getSelectThen(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfTrue(expr);\r\n}\r\n\r\nexport function getSelectElse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfFalse(expr);\r\n}\r\n\r\nexport function getSelectCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetCondition(expr);\r\n}\r\n\r\nexport function getDropValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenDropGetValue(expr);\r\n}\r\n\r\nexport function getReturnValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenReturnGetValue(expr);\r\n}\r\n\r\nexport function getCallTarget(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenCallGetTarget(expr));\r\n}\r\n\r\nexport function getHostOp(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenHostGetOp(expr);\r\n}\r\n\r\nexport function getHostOperandCount(expr: ExpressionRef): Index {\r\n return _BinaryenHostGetNumOperands(expr);\r\n}\r\n\r\nexport function getHostOperand(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenHostGetOperand(expr, index);\r\n}\r\n\r\nexport function getHostName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenHostGetNameOperand(expr));\r\n}\r\n\r\n// functions\r\n\r\nexport function getFunctionBody(func: FunctionRef): ExpressionRef {\r\n return _BinaryenFunctionGetBody(func);\r\n}\r\n\r\nexport function getFunctionName(func: FunctionRef): string | null {\r\n return readString(_BinaryenFunctionGetName(func));\r\n}\r\n\r\nexport function getFunctionParamCount(func: FunctionRef): Index {\r\n return _BinaryenFunctionGetNumParams(func);\r\n}\r\n\r\nexport function getFunctionParamType(func: FunctionRef, index: Index): NativeType {\r\n return _BinaryenFunctionGetParam(func, index);\r\n}\r\n\r\nexport function getFunctionResultType(func: FunctionRef): NativeType {\r\n return _BinaryenFunctionGetResult(func);\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n }\r\n\r\n private constructor() {}\r\n\r\n addBlock(code: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlock(this.ref, code);\r\n }\r\n\r\n addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void {\r\n _RelooperAddBranch(from, to, condition, code);\r\n }\r\n\r\n addBlockWithSwitch(code: ExpressionRef, condition: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n }\r\n\r\n addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n }\r\n}\r\n\r\n// export function hasSideEffects(expr: ExpressionRef): bool {\r\n// switch (_BinaryenExpressionGetId(expr = getPtr(expr))) {\r\n// case ExpressionId.GetLocal:\r\n// case ExpressionId.GetGlobal:\r\n// case ExpressionId.Const:\r\n// case ExpressionId.Nop:\r\n// case ExpressionId.Unreachable: {\r\n// return false;\r\n// }\r\n// case ExpressionId.Block: {\r\n// for (let i = 0, k = _BinaryenBlockGetNumChildren(expr); i < k; ++i) {\r\n// if (hasSideEffects(_BinaryenBlockGetChild(expr, i))) return true;\r\n// }\r\n// return false;\r\n// }\r\n// case ExpressionId.If: {\r\n// return hasSideEffects(_BinaryenIfGetCondition(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfFalse(expr));\r\n// }\r\n// case ExpressionId.Unary: {\r\n// return hasSideEffects(_BinaryenUnaryGetValue(expr));\r\n// }\r\n// case ExpressionId.Binary: {\r\n// return hasSideEffects(_BinaryenBinaryGetLeft(expr))\r\n// || hasSideEffects(_BinaryenBinaryGetRight(expr));\r\n// }\r\n// case ExpressionId.Drop: {\r\n// return hasSideEffects(_BinaryenDropGetValue(expr));\r\n// }\r\n// case ExpressionId.Select: {\r\n// return hasSideEffects(_BinaryenSelectGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenSelectGetIfFalse(expr))\r\n// || hasSideEffects(_BinaryenSelectGetCondition(expr));\r\n// }\r\n// }\r\n// return true;\r\n// }\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var numValues = u8s.length;\r\n var ptr = memory.allocate(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = memory.allocate(i32s.length << 2);\r\n var idx = ptr;\r\n for (let i = 0, k = i32s.length; i < k; ++i) {\r\n let val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocPtrArray(ptrs: usize[] | null): usize {\r\n return allocI32Array(ptrs); // TODO: WASM64 one day\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = memory.allocate(stringLengthUTF8(str) + 1);\r\n // the following is based on Emscripten's stringToUTF8Array\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\nfunction readInt(ptr: usize): i32 {\r\n return (\r\n load(ptr ) |\r\n (load(ptr + 1) << 8) |\r\n (load(ptr + 2) << 16) |\r\n (load(ptr + 3) << 24)\r\n );\r\n}\r\n\r\nfunction readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (let i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n arr.push(cp);\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\nexport class BinaryModule {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n","/**\r\n * AssemblyScript's intermediate representation describing a program's elements.\r\n * @module program\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX,\r\n GETTER_PREFIX,\r\n SETTER_PREFIX,\r\n FILESPACE_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Options,\r\n Feature\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n Signature\r\n} from \"./types\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n CommonTypeNode,\r\n TypeParameterNode,\r\n DecoratorNode,\r\n DecoratorKind,\r\n\r\n Expression,\r\n IdentifierExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n StringLiteralExpression,\r\n\r\n ClassDeclaration,\r\n DeclarationStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportMember,\r\n ExportStatement,\r\n FieldDeclaration,\r\n FunctionDeclaration,\r\n ImportDeclaration,\r\n ImportStatement,\r\n InterfaceDeclaration,\r\n MethodDeclaration,\r\n NamespaceDeclaration,\r\n TypeDeclaration,\r\n VariableDeclaration,\r\n VariableLikeDeclarationStatement,\r\n VariableStatement,\r\n\r\n decoratorNameToKind,\r\n findDecorator\r\n} from \"./ast\";\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionRef,\r\n ExpressionId,\r\n BinaryOp,\r\n UnaryOp,\r\n\r\n getExpressionId,\r\n getGetLocalIndex,\r\n isTeeLocal,\r\n getSetLocalValue,\r\n getBinaryOp,\r\n getConstValueI32,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getUnaryOp,\r\n getExpressionType,\r\n getLoadBytes,\r\n isLoadSigned,\r\n getIfTrue,\r\n getIfFalse,\r\n getSelectThen,\r\n getSelectElse,\r\n getCallTarget,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getConstValueI64Low\r\n} from \"./module\";\r\n\r\nimport {\r\n CharCode\r\n} from \"./util\";\r\n\r\nimport {\r\n Resolver\r\n} from \"./resolver\";\r\n\r\n/** Represents a yet unresolved import. */\r\nclass QueuedImport {\r\n localName: string;\r\n externalName: string;\r\n externalNameAlt: string;\r\n declaration: ImportDeclaration | null; // not set if a filespace\r\n}\r\n\r\n/** Represents a yet unresolved export. */\r\nclass QueuedExport {\r\n externalName: string;\r\n isReExport: bool;\r\n member: ExportMember;\r\n}\r\n\r\n/** Represents a type alias. */\r\nclass TypeAlias {\r\n typeParameters: TypeParameterNode[] | null;\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents a module-level export. */\r\nclass ModuleExport {\r\n element: Element;\r\n identifier: IdentifierExpression;\r\n}\r\n\r\n/** Represents the kind of an operator overload. */\r\nexport enum OperatorKind {\r\n INVALID,\r\n\r\n // indexed access\r\n INDEXED_GET, // a[]\r\n INDEXED_SET, // a[]=b\r\n UNCHECKED_INDEXED_GET, // unchecked(a[])\r\n UNCHECKED_INDEXED_SET, // unchecked(a[]=b)\r\n\r\n // binary\r\n ADD, // a + b\r\n SUB, // a - b\r\n MUL, // a * b\r\n DIV, // a / b\r\n REM, // a % b\r\n POW, // a ** b\r\n BITWISE_AND, // a & b\r\n BITWISE_OR, // a | b\r\n BITWISE_XOR, // a ^ b\r\n BITWISE_SHL, // a << b\r\n BITWISE_SHR, // a >> b\r\n BITWISE_SHR_U, // a >>> b\r\n EQ, // a == b\r\n NE, // a != b\r\n GT, // a > b\r\n GE, // a >= b\r\n LT, // a < b\r\n LE, // a <= b\r\n\r\n // unary prefix\r\n PLUS, // +a\r\n MINUS, // -a\r\n NOT, // !a\r\n BITWISE_NOT, // ~a\r\n PREFIX_INC, // ++a\r\n PREFIX_DEC, // --a\r\n\r\n // unary postfix\r\n POSTFIX_INC, // a++\r\n POSTFIX_DEC // a--\r\n\r\n // not overridable:\r\n // IDENTITY // a === b\r\n // LOGICAL_AND // a && b\r\n // LOGICAL_OR // a || b\r\n}\r\n\r\n/** Returns the operator kind represented by the specified decorator and string argument. */\r\nfunction operatorKindFromDecorator(decoratorKind: DecoratorKind, arg: string): OperatorKind {\r\n assert(arg.length);\r\n switch (decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.OPENBRACKET: {\r\n if (arg == \"[]\") return OperatorKind.INDEXED_GET;\r\n if (arg == \"[]=\") return OperatorKind.INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.OPENBRACE: {\r\n if (arg == \"{}\") return OperatorKind.UNCHECKED_INDEXED_GET;\r\n if (arg == \"{}=\") return OperatorKind.UNCHECKED_INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.ADD;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.SUB;\r\n break;\r\n }\r\n case CharCode.ASTERISK: {\r\n if (arg == \"*\") return OperatorKind.MUL;\r\n if (arg == \"**\") return OperatorKind.POW;\r\n break;\r\n }\r\n case CharCode.SLASH: {\r\n if (arg == \"/\") return OperatorKind.DIV;\r\n break;\r\n }\r\n case CharCode.PERCENT: {\r\n if (arg == \"%\") return OperatorKind.REM;\r\n break;\r\n }\r\n case CharCode.AMPERSAND: {\r\n if (arg == \"&\") return OperatorKind.BITWISE_AND;\r\n break;\r\n }\r\n case CharCode.BAR: {\r\n if (arg == \"|\") return OperatorKind.BITWISE_OR;\r\n break;\r\n }\r\n case CharCode.CARET: {\r\n if (arg == \"^\") return OperatorKind.BITWISE_XOR;\r\n break;\r\n }\r\n case CharCode.EQUALS: {\r\n if (arg == \"==\") return OperatorKind.EQ;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!=\") return OperatorKind.NE;\r\n break;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n if (arg == \">\") return OperatorKind.GT;\r\n if (arg == \">=\") return OperatorKind.GE;\r\n if (arg == \">>\") return OperatorKind.BITWISE_SHR;\r\n if (arg == \">>>\") return OperatorKind.BITWISE_SHR_U;\r\n break;\r\n }\r\n case CharCode.LESSTHAN: {\r\n if (arg == \"<\") return OperatorKind.LT;\r\n if (arg == \"<=\") return OperatorKind.LE;\r\n if (arg == \"<<\") return OperatorKind.BITWISE_SHL;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_PREFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.PLUS;\r\n if (arg == \"++\") return OperatorKind.PREFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.MINUS;\r\n if (arg == \"--\") return OperatorKind.PREFIX_DEC;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!\") return OperatorKind.NOT;\r\n break;\r\n }\r\n case CharCode.TILDE: {\r\n if (arg == \"~\") return OperatorKind.BITWISE_NOT;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"++\") return OperatorKind.POSTFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"--\") return OperatorKind.POSTFIX_DEC;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n return OperatorKind.INVALID;\r\n}\r\n\r\nconst noTypesYet = new Map();\r\n\r\n/** Represents an AssemblyScript program. */\r\nexport class Program extends DiagnosticEmitter {\r\n\r\n /** Array of source files. */\r\n sources: Source[];\r\n /** Resolver instance. */\r\n resolver: Resolver;\r\n /** Diagnostic offset used where successively obtaining the next diagnostic. */\r\n diagnosticsOffset: i32 = 0;\r\n /** Compiler options. */\r\n options: Options;\r\n\r\n /** Elements by internal name. */\r\n elementsLookup: Map = new Map();\r\n /** Class and function instances by internal name. */\r\n instancesLookup: Map = new Map();\r\n /** Types by internal name. */\r\n typesLookup: Map = noTypesYet;\r\n /** Declared type aliases. */\r\n typeAliases: Map = new Map();\r\n /** File-level exports by exported name. */\r\n fileLevelExports: Map = new Map();\r\n /** Module-level exports by exported name. */\r\n moduleLevelExports: Map = new Map();\r\n\r\n /** Array prototype reference. */\r\n arrayPrototype: ClassPrototype | null = null;\r\n /** String instance reference. */\r\n stringInstance: Class | null = null;\r\n /** Start function reference. */\r\n startFunction: FunctionPrototype;\r\n /** Main function reference, if present. */\r\n mainFunction: FunctionPrototype | null = null;\r\n /** Abort function reference, if present. */\r\n abortInstance: Function | null = null;\r\n /** Memory allocation function. */\r\n memoryAllocateInstance: Function | null = null;\r\n\r\n /** 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 {\r\n let globalAliases = options.globalAliases;\r\n if (globalAliases) {\r\n for (let [alias, name] of globalAliases) {\r\n if (!name.length) continue; // explicitly disabled\r\n let element = this.elementsLookup.get(name);\r\n if (element) this.elementsLookup.set(alias, element);\r\n else throw new Error(\"element not found: \" + name);\r\n }\r\n }\r\n }\r\n\r\n // register 'Array'\r\n if (this.elementsLookup.has(\"Array\")) {\r\n let element = assert(this.elementsLookup.get(\"Array\"));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayPrototype = element;\r\n }\r\n\r\n // register 'String'\r\n if (this.elementsLookup.has(\"String\")) {\r\n let element = assert(this.elementsLookup.get(\"String\"));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n let instance = resolver.resolveClass(element, null);\r\n if (instance) {\r\n if (this.typesLookup.has(\"string\")) {\r\n let declaration = (element).declaration;\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n } else {\r\n this.stringInstance = instance;\r\n this.typesLookup.set(\"string\", instance.type);\r\n }\r\n }\r\n }\r\n\r\n // register 'start'\r\n {\r\n let element = assert(this.elementsLookup.get(\"start\"));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.startFunction = element;\r\n }\r\n\r\n // register 'main' if present\r\n if (this.moduleLevelExports.has(\"main\")) {\r\n let element = (this.moduleLevelExports.get(\"main\")).element;\r\n if (\r\n element.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n !(element).isAny(CommonFlags.GENERIC | CommonFlags.AMBIENT)\r\n ) {\r\n (element).set(CommonFlags.MAIN);\r\n this.mainFunction = element;\r\n }\r\n }\r\n\r\n // register 'abort' if present\r\n if (this.elementsLookup.has(\"abort\")) {\r\n let element = this.elementsLookup.get(\"abort\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let instance = this.resolver.resolveFunction(element, null);\r\n if (instance) this.abortInstance = instance;\r\n }\r\n\r\n // register 'memory.allocate' if present\r\n if (this.elementsLookup.has(\"memory\")) {\r\n let element = this.elementsLookup.get(\"memory\");\r\n let members = element.members;\r\n if (members) {\r\n if (members.has(\"allocate\")) {\r\n element = assert(members.get(\"allocate\"));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let instance = this.resolver.resolveFunction(element, null);\r\n if (instance) this.memoryAllocateInstance = instance;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Sets a constant integer value. */\r\n setConstantInteger(globalName: string, type: Type, value: I64): void {\r\n assert(type.is(TypeFlags.INTEGER));\r\n this.elementsLookup.set(globalName,\r\n new Global(this, globalName, globalName, type, null, DecoratorFlags.NONE)\r\n .withConstantIntegerValue(value)\r\n );\r\n }\r\n\r\n /** Sets a constant float value. */\r\n setConstantFloat(globalName: string, type: Type, value: f64): void {\r\n assert(type.is(TypeFlags.FLOAT));\r\n this.elementsLookup.set(globalName,\r\n new Global(this, globalName, globalName, type, null, DecoratorFlags.NONE)\r\n .withConstantFloatValue(value)\r\n );\r\n }\r\n\r\n /** Tries to locate an import by traversing exports and queued exports. */\r\n private tryLocateImport(\r\n externalName: string,\r\n queuedNamedExports: Map\r\n ): Element | null {\r\n var element: Element | null;\r\n var fileLevelExports = this.fileLevelExports;\r\n do {\r\n if (element = fileLevelExports.get(externalName)) return element;\r\n let queuedExport = queuedNamedExports.get(externalName);\r\n if (!queuedExport) break;\r\n if (queuedExport.isReExport) {\r\n externalName = queuedExport.externalName;\r\n continue;\r\n }\r\n return this.elementsLookup.get(queuedExport.externalName);\r\n } while (true);\r\n return null;\r\n }\r\n\r\n /** Checks that only supported decorators are present. */\r\n private checkDecorators(\r\n decorators: DecoratorNode[],\r\n acceptedFlags: DecoratorFlags\r\n ): DecoratorFlags {\r\n var presentFlags = DecoratorFlags.NONE;\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n let kind = decoratorNameToKind(decorator.name);\r\n let flag = decoratorKindToFlag(kind);\r\n if (flag) {\r\n if (flag == DecoratorFlags.BUILTIN) {\r\n if (decorator.range.source.isLibrary) {\r\n presentFlags |= flag;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n }\r\n } else if (!(acceptedFlags & flag)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else if (presentFlags & flag) {\r\n this.error(\r\n DiagnosticCode.Duplicate_decorator,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else {\r\n presentFlags |= flag;\r\n }\r\n }\r\n }\r\n return presentFlags;\r\n }\r\n\r\n /** Checks and sets up global options of an element. */\r\n private checkGlobal(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var parentNode = declaration.parent;\r\n // alias globally if explicitly annotated @global or exported from a top-level library file\r\n if (\r\n (element.hasDecorator(DecoratorFlags.GLOBAL)) ||\r\n (\r\n declaration.range.source.isLibrary &&\r\n element.is(CommonFlags.EXPORT) &&\r\n (\r\n assert(parentNode).kind == NodeKind.SOURCE ||\r\n (\r\n parentNode).kind == NodeKind.VARIABLE &&\r\n assert((parentNode).parent).kind == NodeKind.SOURCE\r\n )\r\n )\r\n ) {\r\n let globalName = declaration.programLevelInternalName;\r\n if (this.elementsLookup.has(globalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, element.internalName\r\n );\r\n } else {\r\n this.elementsLookup.set(globalName, element);\r\n }\r\n }\r\n // builtins use the global name directly\r\n if (element.hasDecorator(DecoratorFlags.BUILTIN)) {\r\n element.internalName = declaration.programLevelInternalName;\r\n }\r\n }\r\n\r\n /** Initializes a class declaration. */\r\n private initializeClass(\r\n declaration: ClassDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new ClassPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.SEALED |\r\n DecoratorFlags.UNMANAGED\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n var implementsTypes = declaration.implementsTypes;\r\n if (implementsTypes) {\r\n let numImplementsTypes = implementsTypes.length;\r\n if (prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (numImplementsTypes) {\r\n this.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_implement_interfaces,\r\n Range.join(\r\n declaration.name.range,\r\n implementsTypes[numImplementsTypes - 1].range\r\n )\r\n );\r\n }\r\n\r\n // remember classes that implement interfaces\r\n } else if (numImplementsTypes) {\r\n for (let i = 0; i < numImplementsTypes; ++i) {\r\n this.warning( // TODO\r\n DiagnosticCode.Operation_not_supported,\r\n implementsTypes[i].range\r\n );\r\n }\r\n queuedImplements.push(prototype);\r\n }\r\n }\r\n\r\n // remember classes that extend another one\r\n if (declaration.extendsType) queuedExtends.push(prototype);\r\n\r\n // add as namespace member if applicable\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // otherwise add to file-level exports if exported\r\n } else if (prototype.is(CommonFlags.EXPORT)) {\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (prototype.is(CommonFlags.EXPORT) && declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n // initialize members\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false); // should have been reported while parsing\r\n return;\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n /** Initializes a field of a class or interface. */\r\n private initializeField(\r\n declaration: FieldDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var decorators = declaration.decorators;\r\n var isInterface = classPrototype.kind == ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n // static fields become global variables\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n if (isInterface) {\r\n // should have been reported while parsing\r\n assert(false);\r\n }\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n let staticField = new Global(\r\n this,\r\n name,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators, DecoratorFlags.INLINE)\r\n : DecoratorFlags.NONE\r\n );\r\n staticField.parent = classPrototype;\r\n classPrototype.members.set(name, staticField);\r\n this.elementsLookup.set(internalName, staticField);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n staticField.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n if (staticField.hasDecorator(DecoratorFlags.INLINE) && !staticField.is(CommonFlags.READONLY)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n assert(findDecorator(DecoratorKind.INLINE, decorators)).range, \"inline\"\r\n );\r\n }\r\n\r\n // instance fields are remembered until resolved\r\n } else {\r\n if (isInterface) {\r\n // should have been reported while parsing\r\n assert(!declaration.isAny(CommonFlags.ABSTRACT | CommonFlags.GET | CommonFlags.SET));\r\n }\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instanceField = new FieldPrototype(\r\n classPrototype,\r\n name,\r\n internalName,\r\n declaration\r\n );\r\n if (decorators) this.checkDecorators(decorators, DecoratorFlags.NONE);\r\n classPrototype.instanceMembers.set(name, instanceField);\r\n }\r\n }\r\n\r\n /** Initializes a method of a class or interface. */\r\n private initializeMethod(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var prototype: FunctionPrototype | null = null;\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.checkDecorators(decorators,\r\n DecoratorFlags.OPERATOR_BINARY |\r\n DecoratorFlags.OPERATOR_PREFIX |\r\n DecoratorFlags.OPERATOR_POSTFIX |\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n // static methods become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n assert(declaration.name.kind != NodeKind.CONSTRUCTOR);\r\n\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0, declaration.name.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n classPrototype.members.set(simpleName, prototype);\r\n this.elementsLookup.set(internalName, prototype);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance methods are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n // if (classPrototype.isUnmanaged && instancePrototype.isAbstract) {\r\n // this.error( Unmanaged classes cannot declare abstract methods. );\r\n // }\r\n if (declaration.name.kind == NodeKind.CONSTRUCTOR) {\r\n if (classPrototype.constructorPrototype) {\r\n this.error(\r\n DiagnosticCode.Multiple_constructor_implementations_are_not_allowed,\r\n declaration.name.range\r\n );\r\n } else {\r\n prototype.set(CommonFlags.CONSTRUCTOR);\r\n classPrototype.constructorPrototype = prototype;\r\n }\r\n } else {\r\n classPrototype.instanceMembers.set(simpleName, prototype);\r\n }\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n this.checkOperatorOverloads(declaration.decorators, prototype, classPrototype);\r\n }\r\n\r\n private checkOperatorOverloads(\r\n decorators: DecoratorNode[] | null,\r\n prototype: FunctionPrototype,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n switch (decorator.decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY:\r\n case DecoratorKind.OPERATOR_PREFIX:\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n let numArgs = decorator.arguments && decorator.arguments.length || 0;\r\n if (numArgs == 1) {\r\n let firstArg = (decorator.arguments)[0];\r\n if (\r\n firstArg.kind == NodeKind.LITERAL &&\r\n (firstArg).literalKind == LiteralKind.STRING\r\n ) {\r\n let kind = operatorKindFromDecorator(\r\n decorator.decoratorKind,\r\n (firstArg).value\r\n );\r\n if (kind == OperatorKind.INVALID) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n firstArg.range\r\n );\r\n } else {\r\n let overloads = classPrototype.overloadPrototypes;\r\n if (overloads.has(kind)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_function_implementation,\r\n firstArg.range\r\n );\r\n } else {\r\n prototype.operatorKind = kind;\r\n overloads.set(kind, prototype);\r\n }\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n firstArg.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"1\", numArgs.toString(0)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeAccessor(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalPropertyName = declaration.fileLevelInternalName;\r\n var propertyElement = this.elementsLookup.get(internalPropertyName);\r\n var isGetter = declaration.is(CommonFlags.GET);\r\n var isNew = false;\r\n if (propertyElement) {\r\n if (\r\n propertyElement.kind != ElementKind.PROPERTY ||\r\n (isGetter\r\n ? (propertyElement).getterPrototype\r\n : (propertyElement).setterPrototype\r\n ) != null\r\n ) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n propertyElement = new Property(\r\n this,\r\n simpleName,\r\n internalPropertyName,\r\n classPrototype\r\n );\r\n isNew = true;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.checkDecorators(decorators,\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n var baseName = (isGetter ? GETTER_PREFIX : SETTER_PREFIX) + simpleName;\r\n\r\n // static accessors become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n let staticName = classPrototype.internalName + STATIC_DELIMITER + baseName;\r\n if (this.elementsLookup.has(staticName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n let staticPrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n staticName,\r\n declaration,\r\n null,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = staticPrototype;\r\n } else {\r\n (propertyElement).setterPrototype = staticPrototype;\r\n }\r\n if (isNew) {\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n classPrototype.members.set(simpleName, propertyElement); // check above\r\n } else {\r\n assert(classPrototype.members && classPrototype.members.has(simpleName));\r\n }\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance accessors are remembered until resolved\r\n } else {\r\n let instanceName = classPrototype.internalName + INSTANCE_DELIMITER + baseName;\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(baseName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instancePrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n instanceName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = instancePrototype;\r\n } else {\r\n (propertyElement).setterPrototype = instancePrototype;\r\n }\r\n classPrototype.instanceMembers.set(baseName, propertyElement);\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n instancePrototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n }\r\n\r\n private initializeEnum(\r\n declaration: EnumDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var element = new Enum(this, simpleName, internalName, declaration);\r\n element.parent = namespace;\r\n this.elementsLookup.set(internalName, element);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, element);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && element.is(CommonFlags.EXPORT)) {\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (element.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, element);\r\n this.currentFilespace.members.set(simpleName, element);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n var values = declaration.values;\r\n for (let i = 0, k = values.length; i < k; ++i) {\r\n this.initializeEnumValue(values[i], element);\r\n }\r\n\r\n this.checkGlobal(element, declaration);\r\n }\r\n\r\n private initializeEnumValue(\r\n declaration: EnumValueDeclaration,\r\n enm: Enum\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n if (enm.members) {\r\n if (enm.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n enm.members = new Map();\r\n }\r\n var value = new EnumValue(enm, this, name, internalName, declaration);\r\n enm.members.set(name, value);\r\n if (enm.is(CommonFlags.MODULE_EXPORT)) {\r\n value.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n private initializeExports(\r\n statement: ExportStatement,\r\n queuedExports: Map\r\n ): void {\r\n var members = statement.members;\r\n if (members) { // named\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n this.initializeExport(members[i], statement.internalPath, queuedExports);\r\n }\r\n } else { // TODO: filespace\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n }\r\n }\r\n\r\n private setExportAndCheckLibrary(\r\n internalName: string,\r\n element: Element,\r\n externalIdentifier: IdentifierExpression\r\n ): void {\r\n // add to file-level exports\r\n this.fileLevelExports.set(internalName, element);\r\n\r\n // add to filespace\r\n var internalPath = externalIdentifier.range.source.internalPath;\r\n var prefix = FILESPACE_PREFIX + internalPath;\r\n var filespace = this.elementsLookup.get(prefix);\r\n if (!filespace) filespace = assert(this.elementsLookup.get(prefix + PATH_DELIMITER + \"index\"));\r\n assert(filespace.kind == ElementKind.FILESPACE);\r\n var simpleName = externalIdentifier.text;\r\n (filespace).members.set(simpleName, element);\r\n\r\n // add global alias if a top-level export of a library file\r\n var source = externalIdentifier.range.source;\r\n if (source.isLibrary) {\r\n if (this.elementsLookup.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n externalIdentifier.range, simpleName\r\n );\r\n } else {\r\n element.internalName = simpleName;\r\n this.elementsLookup.set(simpleName, element);\r\n }\r\n\r\n // add module level export if a top-level export of an entry file\r\n } else if (source.isEntry) {\r\n this.moduleLevelExports.set(externalIdentifier.text, {\r\n element,\r\n identifier: externalIdentifier\r\n });\r\n }\r\n }\r\n\r\n private initializeExport(\r\n member: ExportMember,\r\n internalPath: string | null,\r\n queuedExports: Map\r\n ): void {\r\n var externalName = member.range.source.internalPath + PATH_DELIMITER + member.externalName.text;\r\n if (this.fileLevelExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n var referencedName: string;\r\n var referencedElement: Element | null;\r\n var queuedExport: QueuedExport | null;\r\n\r\n // export local element\r\n if (internalPath == null) {\r\n referencedName = member.range.source.internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the element exists\r\n if (this.elementsLookup.has(referencedName)) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n this.elementsLookup.get(referencedName),\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = false;\r\n queuedExport.externalName = referencedName; // -> here: local name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n\r\n // export external element\r\n } else {\r\n referencedName = internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the export exists\r\n referencedElement = this.elementsLookup.get(referencedName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // walk already known queued exports\r\n let seen = new Set();\r\n while (queuedExport = queuedExports.get(referencedName)) {\r\n if (queuedExport.isReExport) {\r\n referencedElement = this.fileLevelExports.get(queuedExport.externalName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n referencedName = queuedExport.externalName;\r\n if (seen.has(queuedExport)) break;\r\n seen.add(queuedExport);\r\n } else {\r\n referencedElement = this.elementsLookup.get(queuedExport.externalName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = true;\r\n queuedExport.externalName = referencedName; // -> here: external name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n }\r\n }\r\n\r\n private initializeFunction(\r\n declaration: FunctionDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var decorators = declaration.decorators;\r\n var prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n null,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE |\r\n DecoratorFlags.EXTERNAL\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.parent = namespace;\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n private initializeImports(\r\n statement: ImportStatement,\r\n queuedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var declarations = statement.declarations;\r\n if (declarations) {\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n this.initializeImport(\r\n declarations[i],\r\n statement.internalPath,\r\n queuedExports, queuedImports\r\n );\r\n }\r\n } else if (statement.namespaceName) { // import * as simpleName from \"file\"\r\n let simpleName = statement.namespaceName.text;\r\n let internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n simpleName\r\n );\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n statement.namespaceName.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n\r\n // resolve right away if the exact filespace exists\r\n let filespace = this.elementsLookup.get(statement.internalPath);\r\n if (filespace) {\r\n this.elementsLookup.set(internalName, filespace);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n let queuedImport = new QueuedImport();\r\n queuedImport.localName = internalName;\r\n let externalName = FILESPACE_PREFIX + statement.internalPath;\r\n queuedImport.externalName = externalName;\r\n queuedImport.externalNameAlt = externalName + PATH_DELIMITER + \"index\";\r\n queuedImport.declaration = null; // filespace\r\n queuedImports.push(queuedImport);\r\n }\r\n }\r\n\r\n private initializeImport(\r\n declaration: ImportDeclaration,\r\n internalPath: string,\r\n queuedNamedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var localName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(localName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, localName\r\n );\r\n return;\r\n }\r\n\r\n var externalName = internalPath + PATH_DELIMITER + declaration.externalName.text;\r\n\r\n // resolve right away if the exact export exists\r\n var element: Element | null;\r\n if (element = this.fileLevelExports.get(externalName)) {\r\n this.elementsLookup.set(localName, element);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n const indexPart = PATH_DELIMITER + \"index\";\r\n var queuedImport = new QueuedImport();\r\n queuedImport.localName = localName;\r\n if (internalPath.endsWith(indexPart)) {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath.substring(0, internalPath.length - indexPart.length + 1) +\r\n declaration.externalName.text\r\n );\r\n } else {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath +\r\n indexPart +\r\n PATH_DELIMITER +\r\n declaration.externalName.text\r\n );\r\n }\r\n queuedImport.declaration = declaration; // named\r\n queuedImports.push(queuedImport);\r\n }\r\n\r\n private initializeInterface(declaration: InterfaceDeclaration, namespace: Element | null = null): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new InterfacePrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators, DecoratorFlags.GLOBAL)\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(prototype.internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(prototype.internalName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"interface member expected\");\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n private initializeNamespace(\r\n declaration: NamespaceDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n parentNamespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n var simpleName = declaration.name.text;\r\n var namespace = this.elementsLookup.get(internalName);\r\n if (!namespace) {\r\n namespace = new Namespace(this, simpleName, internalName, declaration);\r\n namespace.parent = parentNamespace;\r\n this.elementsLookup.set(internalName, namespace);\r\n this.checkGlobal(namespace, declaration);\r\n }\r\n\r\n if (parentNamespace) {\r\n if (parentNamespace.members) {\r\n if (parentNamespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n parentNamespace.members = new Map();\r\n }\r\n parentNamespace.members.set(simpleName, namespace);\r\n if (parentNamespace.is(CommonFlags.MODULE_EXPORT) && namespace.is(CommonFlags.EXPORT)) {\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (namespace.is(CommonFlags.EXPORT)) { // no parent namespace\r\n let existingExport = this.fileLevelExports.get(internalName);\r\n if (existingExport) {\r\n if (!existingExport.is(CommonFlags.EXPORT)) {\r\n this.error(\r\n DiagnosticCode.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local,\r\n declaration.name.range, namespace.internalName\r\n ); // recoverable\r\n }\r\n namespace = existingExport; // join\r\n } else {\r\n this.fileLevelExports.set(internalName, namespace);\r\n }\r\n this.currentFilespace.members.set(simpleName, namespace);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n if (existingExport.element !== namespace) { // not merged\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n this.moduleLevelExports.set(simpleName, {\r\n element: namespace,\r\n identifier: declaration.name\r\n });\r\n }\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n var members = declaration.members;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n switch (members[i].kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(members[i], queuedExtends, queuedImplements, namespace);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(members[i], queuedExtends, queuedImplements, namespace);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // this.initializeTypeAlias(members[i], namespace);\r\n // TODO: what about namespaced types?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n members[i].range\r\n );\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(members[i], namespace);\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"namespace member expected\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeTypeAlias(declaration: TypeDeclaration, namespace: Element | null = null): void {\r\n // type aliases are program globals\r\n // TODO: what about namespaced types?\r\n var name = declaration.name.text;\r\n if (this.typesLookup.has(name) || this.typeAliases.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return;\r\n }\r\n var alias = new TypeAlias();\r\n alias.typeParameters = declaration.typeParameters;\r\n alias.type = declaration.type;\r\n this.typeAliases.set(name, alias);\r\n }\r\n\r\n private initializeVariables(statement: VariableStatement, namespace: Element | null = null): void {\r\n var declarations = statement.declarations;\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n let declaration = declarations[i];\r\n let decorators = declaration.decorators;\r\n let internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n let simpleName = declaration.name.text;\r\n let global = new Global(\r\n this,\r\n simpleName,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE |\r\n DecoratorFlags.EXTERNAL\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n global.parent = namespace;\r\n this.elementsLookup.set(internalName, global);\r\n\r\n if (global.hasDecorator(DecoratorFlags.INLINE) && !global.is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n assert(findDecorator(DecoratorKind.INLINE, decorators)).range, \"inline\"\r\n );\r\n }\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, global);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && global.is(CommonFlags.EXPORT)) {\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (global.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n } else {\r\n this.fileLevelExports.set(internalName, global);\r\n }\r\n this.currentFilespace.members.set(simpleName, global);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n continue;\r\n }\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: global,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n this.checkGlobal(global, declaration);\r\n }\r\n }\r\n}\r\n\r\n/** Indicates the specific kind of an {@link Element}. */\r\nexport enum ElementKind {\r\n /** A {@link Global}. */\r\n GLOBAL,\r\n /** A {@link Local}. */\r\n LOCAL,\r\n /** An {@link Enum}. */\r\n ENUM,\r\n /** An {@link EnumValue}. */\r\n ENUMVALUE,\r\n /** A {@link FunctionPrototype}. */\r\n FUNCTION_PROTOTYPE,\r\n /** A {@link Function}. */\r\n FUNCTION,\r\n /** A {@link FunctionTarget}. */\r\n FUNCTION_TARGET,\r\n /** A {@link ClassPrototype}. */\r\n CLASS_PROTOTYPE,\r\n /** A {@link Class}. */\r\n CLASS,\r\n /** An {@link InterfacePrototype}. */\r\n INTERFACE_PROTOTYPE,\r\n /** An {@link Interface}. */\r\n INTERFACE,\r\n /** A {@link FieldPrototype}. */\r\n FIELD_PROTOTYPE,\r\n /** A {@link Field}. */\r\n FIELD,\r\n /** A {@link Property}. */\r\n PROPERTY,\r\n /** A {@link Namespace}. */\r\n NAMESPACE,\r\n /** A {@link Filespace}. */\r\n FILESPACE,\r\n}\r\n\r\nexport enum DecoratorFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n /** Is a program global. */\r\n GLOBAL = 1 << 0,\r\n /** Is a binary operator overload. */\r\n OPERATOR_BINARY = 1 << 1,\r\n /** Is a unary prefix operator overload. */\r\n OPERATOR_PREFIX = 1 << 2,\r\n /** Is a unary postfix operator overload. */\r\n OPERATOR_POSTFIX = 1 << 3,\r\n /** Is an unmanaged class. */\r\n UNMANAGED = 1 << 4,\r\n /** Is a sealed class. */\r\n SEALED = 1 << 5,\r\n /** Is always inlined. */\r\n INLINE = 1 << 6,\r\n /** Is using a different external name. */\r\n EXTERNAL = 1 << 7,\r\n /** Is a builtin. */\r\n BUILTIN = 1 << 8\r\n}\r\n\r\nexport function decoratorKindToFlag(kind: DecoratorKind): DecoratorFlags {\r\n switch (kind) {\r\n case DecoratorKind.GLOBAL: return DecoratorFlags.GLOBAL;\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY: return DecoratorFlags.OPERATOR_BINARY;\r\n case DecoratorKind.OPERATOR_PREFIX: return DecoratorFlags.OPERATOR_PREFIX;\r\n case DecoratorKind.OPERATOR_POSTFIX: return DecoratorFlags.OPERATOR_POSTFIX;\r\n case DecoratorKind.UNMANAGED: return DecoratorFlags.UNMANAGED;\r\n case DecoratorKind.SEALED: return DecoratorFlags.SEALED;\r\n case DecoratorKind.INLINE: return DecoratorFlags.INLINE;\r\n case DecoratorKind.EXTERNAL: return DecoratorFlags.EXTERNAL;\r\n case DecoratorKind.BUILTIN: return DecoratorFlags.BUILTIN;\r\n default: return DecoratorFlags.NONE;\r\n }\r\n}\r\n\r\n/** Base class of all program elements. */\r\nexport abstract class Element {\r\n\r\n /** Specific element kind. */\r\n kind: ElementKind;\r\n /** Containing {@link Program}. */\r\n program: Program;\r\n /** Simple name. */\r\n simpleName: string;\r\n /** Internal name referring to this element. */\r\n internalName: string;\r\n /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n /** Decorator flags indicating annotated traits. */\r\n decoratorFlags: DecoratorFlags = DecoratorFlags.NONE;\r\n /** Namespaced member elements. */\r\n members: Map | null = null;\r\n /** Parent element, if applicable. */\r\n parent: Element | null = null;\r\n\r\n /** Constructs a new element, linking it to its containing {@link Program}. */\r\n protected constructor(program: Program, simpleName: string, internalName: string) {\r\n this.program = program;\r\n this.simpleName = simpleName;\r\n this.internalName = internalName;\r\n }\r\n\r\n /** Tests if this element has a specific flag or flags. */\r\n is(flag: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this element has any of the specified flags. */\r\n isAny(flags: CommonFlags): bool { return (this.flags & flags) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n /** Tests if this element has a specific decorator flag or flags. */\r\n hasDecorator(flag: DecoratorFlags): bool { return (this.decoratorFlags & flag) == flag; }\r\n}\r\n\r\n/** A filespace representing the implicit top-level namespace of a source. */\r\nexport class Filespace extends Element {\r\n\r\n kind = ElementKind.FILESPACE;\r\n\r\n /** File members (externally visible only). */\r\n members: Map; // more specific\r\n\r\n /** Constructs a new filespace. */\r\n constructor(\r\n program: Program,\r\n source: Source\r\n ) {\r\n super(program, source.internalPath, FILESPACE_PREFIX + source.internalPath);\r\n this.members = new Map();\r\n }\r\n}\r\n\r\n/** A namespace that differs from a filespace in being user-declared with a name. */\r\nexport class Namespace extends Element {\r\n\r\n // All elements have namespace semantics. This is an explicitly declared one.\r\n kind = ElementKind.NAMESPACE;\r\n\r\n /** Declaration reference. */\r\n declaration: NamespaceDeclaration; // more specific\r\n\r\n /** Constructs a new namespace. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: NamespaceDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** An enum. */\r\nexport class Enum extends Element {\r\n\r\n kind = ElementKind.ENUM;\r\n\r\n /** Declaration reference. */\r\n declaration: EnumDeclaration;\r\n\r\n /** Constructs a new enum. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: EnumDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** An enum value. */\r\nexport class EnumValue extends Element {\r\n\r\n kind = ElementKind.ENUMVALUE;\r\n\r\n /** Declaration reference. */\r\n declaration: EnumValueDeclaration;\r\n /** Constant value, if applicable. */\r\n constantValue: i32 = 0;\r\n\r\n constructor(\r\n enm: Enum,\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: EnumValueDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = enm;\r\n this.declaration = declaration;\r\n }\r\n}\r\n\r\nexport const enum ConstantValueKind {\r\n NONE,\r\n INTEGER,\r\n FLOAT\r\n}\r\n\r\nexport class VariableLikeElement extends Element {\r\n\r\n // kind varies\r\n\r\n /** Declaration reference. */\r\n declaration: VariableLikeDeclarationStatement | null;\r\n /** Variable type. Is {@link Type.void} for type-inferred {@link Global}s before compilation. */\r\n type: Type;\r\n /** Constant value kind. */\r\n constantValueKind: ConstantValueKind = ConstantValueKind.NONE;\r\n /** Constant integer value, if applicable. */\r\n constantIntegerValue: I64;\r\n /** Constant float value, if applicable. */\r\n constantFloatValue: f64;\r\n\r\n protected constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.type = type;\r\n this.declaration = declaration;\r\n }\r\n\r\n withConstantIntegerValue(value: I64): this {\r\n this.constantValueKind = ConstantValueKind.INTEGER;\r\n this.constantIntegerValue = value;\r\n this.set(CommonFlags.CONST | CommonFlags.INLINED);\r\n return this;\r\n }\r\n\r\n withConstantFloatValue(value: f64): this {\r\n this.constantValueKind = ConstantValueKind.FLOAT;\r\n this.constantFloatValue = value;\r\n this.set(CommonFlags.CONST | CommonFlags.INLINED);\r\n return this;\r\n }\r\n}\r\n\r\n/** A global variable. */\r\nexport class Global extends VariableLikeElement {\r\n\r\n kind = ElementKind.GLOBAL;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, type, declaration);\r\n this.flags = declaration ? declaration.flags : CommonFlags.NONE;\r\n this.decoratorFlags = decoratorFlags;\r\n this.type = type; // resolved later if `void`\r\n }\r\n}\r\n\r\n/** A function parameter. */\r\nexport class Parameter {\r\n\r\n // not an Element on its own\r\n\r\n /** Parameter name. */\r\n name: string;\r\n /** Parameter type. */\r\n type: Type;\r\n /** Parameter initializer. */\r\n initializer: Expression | null;\r\n\r\n /** Constructs a new function parameter. */\r\n constructor(name: string, type: Type, initializer: Expression | null = null) {\r\n this.name = name;\r\n this.type = type;\r\n this.initializer = initializer;\r\n }\r\n}\r\n\r\n/** A function local. */\r\nexport class Local extends VariableLikeElement {\r\n\r\n kind = ElementKind.LOCAL;\r\n\r\n /** Local index. */\r\n index: i32;\r\n /** Respective scoped global, if any. */\r\n scopedGlobal: Global | null = null;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n index: i32,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null = null\r\n ) {\r\n super(program, simpleName, simpleName, type, declaration);\r\n this.index = index;\r\n }\r\n}\r\n\r\n/** A yet unresolved function prototype. */\r\nexport class FunctionPrototype extends Element {\r\n\r\n kind = ElementKind.FUNCTION_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FunctionDeclaration;\r\n /** If an instance method, the class prototype reference. */\r\n classPrototype: ClassPrototype | null;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Class type arguments, if a partially resolved method of a generic class. Not set otherwise. */\r\n classTypeArguments: Type[] | null = null;\r\n /** Operator kind, if an overload. */\r\n operatorKind: OperatorKind = OperatorKind.INVALID;\r\n\r\n /** Constructs a new function prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FunctionDeclaration,\r\n classPrototype: ClassPrototype | null = null,\r\n decoratorFlags: DecoratorFlags = DecoratorFlags.NONE\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.classPrototype = classPrototype;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n toString(): string { return this.simpleName; }\r\n}\r\n\r\n/** A resolved function. */\r\nexport class Function extends Element {\r\n\r\n kind = ElementKind.FUNCTION;\r\n\r\n /** Prototype reference. */\r\n prototype: FunctionPrototype;\r\n /** Function signature. */\r\n signature: Signature;\r\n /** Map of locals by name. */\r\n localsByName: Map = new Map();\r\n /** Array of locals by index. */\r\n localsByIndex: Local[] = [];\r\n /** List of additional non-parameter locals. */\r\n additionalLocals: Type[] = [];\r\n /** Current break context label. */\r\n breakContext: string | null = null;\r\n /** Contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Current control flow. */\r\n flow: Flow;\r\n /** Remembered debug locations. */\r\n debugLocations: Range[] = [];\r\n /** Function reference, if compiled. */\r\n ref: FunctionRef = 0;\r\n /** Function table index, if any. */\r\n functionTableIndex: i32 = -1;\r\n /** Trampoline function for calling with omitted arguments. */\r\n trampoline: Function | null = null;\r\n /** The outer scope, if a function expression. */\r\n outerScope: Flow | null = null;\r\n\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\r\n nextInlineId: i32 = 0;\r\n\r\n /** Constructs a new concrete function. */\r\n constructor(\r\n prototype: FunctionPrototype,\r\n internalName: string,\r\n signature: Signature,\r\n parent: Element | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.signature = signature;\r\n this.parent = parent;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.contextualTypeArguments = contextualTypeArguments;\r\n if (!(prototype.is(CommonFlags.AMBIENT))) {\r\n let localIndex = 0;\r\n if (parent && parent.kind == ElementKind.CLASS) {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let local = new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n );\r\n this.localsByName.set(\"this\", local);\r\n this.localsByIndex[local.index] = local;\r\n let inheritedTypeArguments = (parent).contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments.has(inheritedName)) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n }\r\n } else {\r\n assert(!this.is(CommonFlags.INSTANCE)); // internal error\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n let parameterType = parameterTypes[i];\r\n let parameterName = signature.getParameterName(i);\r\n let local = new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n // FIXME: declaration?\r\n );\r\n this.localsByName.set(parameterName, local);\r\n this.localsByIndex[local.index] = local;\r\n }\r\n }\r\n this.flow = Flow.create(this);\r\n }\r\n\r\n /** Adds a local of the specified type, with an optional name. */\r\n addLocal(type: Type, name: string | null = null, declaration: VariableDeclaration | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = this.signature.parameterTypes.length + this.additionalLocals.length;\r\n if (this.is(CommonFlags.INSTANCE)) ++localIndex;\r\n var local = new Local(\r\n this.prototype.program,\r\n name\r\n ? name\r\n : \"var$\" + localIndex.toString(10),\r\n localIndex,\r\n type,\r\n declaration\r\n );\r\n if (name) {\r\n if (this.localsByName.has(name)) throw new Error(\"duplicate local name\");\r\n this.localsByName.set(name, local);\r\n }\r\n this.localsByIndex[local.index] = local;\r\n this.additionalLocals.push(type);\r\n return local;\r\n }\r\n\r\n private tempI32s: Local[] | null = null;\r\n private tempI64s: Local[] | null = null;\r\n private tempF32s: Local[] | null = null;\r\n private tempF64s: Local[] | null = null;\r\n\r\n /** Gets a free temporary local of the specified type. */\r\n getTempLocal(type: Type, wrapped: bool = false): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s;\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps && temps.length) {\r\n local = temps.pop();\r\n local.type = type;\r\n local.flags = CommonFlags.NONE;\r\n } else {\r\n local = this.addLocal(type);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n if (local.is(CommonFlags.INLINED)) return;\r\n assert(local.index >= 0);\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n assert(local.index >= 0);\r\n temps.push(local);\r\n }\r\n\r\n /** Gets and immediately frees a temporary local of the specified type. */\r\n getAndFreeTempLocal(type: Type, wrapped: bool): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps.length) {\r\n local = temps[temps.length - 1];\r\n local.type = type;\r\n } else {\r\n local = this.addLocal(type);\r\n temps.push(local);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Enters a(nother) break context. */\r\n enterBreakContext(): string {\r\n var id = this.nextBreakId++;\r\n if (!this.breakStack) this.breakStack = [ id ];\r\n else this.breakStack.push(id);\r\n return this.breakContext = id.toString(10);\r\n }\r\n\r\n /** Leaves the current break context. */\r\n leaveBreakContext(): void {\r\n assert(this.breakStack != null);\r\n var length = (this.breakStack).length;\r\n assert(length > 0);\r\n (this.breakStack).pop();\r\n if (length > 1) {\r\n this.breakContext = (this.breakStack)[length - 2].toString(10);\r\n } else {\r\n this.breakContext = null;\r\n this.breakStack = null;\r\n }\r\n }\r\n\r\n /** Finalizes the function once compiled, releasing no longer needed resources. */\r\n finalize(module: Module, ref: FunctionRef): void {\r\n this.ref = ref;\r\n assert(!this.breakStack || !this.breakStack.length); // internal error\r\n this.breakStack = null;\r\n this.breakContext = null;\r\n this.tempI32s = this.tempI64s = this.tempF32s = this.tempF64s = null;\r\n if (this.program.options.sourceMap) {\r\n let debugLocations = this.debugLocations;\r\n for (let i = 0, k = debugLocations.length; i < k; ++i) {\r\n let debugLocation = debugLocations[i];\r\n module.setDebugLocation(\r\n ref,\r\n debugLocation.debugInfoRef,\r\n debugLocation.source.debugInfoIndex,\r\n debugLocation.line,\r\n debugLocation.column\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n}\r\n\r\n/** A resolved function target, that is a function called indirectly by an index and signature. */\r\nexport class FunctionTarget extends Element {\r\n\r\n kind = ElementKind.FUNCTION_TARGET;\r\n\r\n /** Underlying signature. */\r\n signature: Signature;\r\n /** Function type. */\r\n type: Type;\r\n\r\n /** Constructs a new function target. */\r\n constructor(program: Program, signature: Signature) {\r\n super(program, \"\", \"\");\r\n var simpleName = signature.toSignatureString();\r\n this.simpleName = simpleName;\r\n this.internalName = simpleName;\r\n this.signature = signature;\r\n this.type = Type.u32.asFunction(signature);\r\n }\r\n}\r\n\r\n/** A yet unresolved instance field prototype. */\r\nexport class FieldPrototype extends Element {\r\n\r\n kind = ElementKind.FIELD_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FieldDeclaration;\r\n /** Parent class prototype. */\r\n classPrototype: ClassPrototype;\r\n\r\n /** Constructs a new field prototype. */\r\n constructor(\r\n classPrototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FieldDeclaration\r\n ) {\r\n super(classPrototype.program, simpleName, internalName);\r\n this.classPrototype = classPrototype;\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** A resolved instance field. */\r\nexport class Field extends VariableLikeElement {\r\n\r\n kind = ElementKind.FIELD;\r\n\r\n /** Field prototype reference. */\r\n prototype: FieldPrototype;\r\n /** Field memory offset, if an instance field. */\r\n memoryOffset: i32 = -1;\r\n\r\n /** Constructs a new field. */\r\n constructor(\r\n prototype: FieldPrototype,\r\n internalName: string,\r\n type: Type,\r\n declaration: FieldDeclaration,\r\n parent: Class\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName, type, declaration);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.type = type;\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A property comprised of a getter and a setter function. */\r\nexport class Property extends Element {\r\n\r\n kind = ElementKind.PROPERTY;\r\n\r\n /** Parent class prototype. */\r\n parent: ClassPrototype;\r\n /** Getter prototype. */\r\n getterPrototype: FunctionPrototype | null = null;\r\n /** Setter prototype. */\r\n setterPrototype: FunctionPrototype | null = null;\r\n\r\n /** Constructs a new property prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n parent: ClassPrototype\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A yet unresolved class prototype. */\r\nexport class ClassPrototype extends Element {\r\n\r\n kind = ElementKind.CLASS_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: ClassDeclaration;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Instance member prototypes. */\r\n instanceMembers: Map | null = null;\r\n /** Base class prototype, if applicable. */\r\n basePrototype: ClassPrototype | null = null; // set in Program#initialize\r\n /** Constructor prototype. */\r\n constructorPrototype: FunctionPrototype | null = null;\r\n /** Operator overload prototypes. */\r\n overloadPrototypes: Map = new Map();\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A resolved class. */\r\nexport class Class extends Element {\r\n\r\n kind = ElementKind.CLASS;\r\n\r\n /** Prototype reference. */\r\n prototype: ClassPrototype;\r\n /** Resolved type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Resolved class type. */\r\n type: Type;\r\n /** Base class, if applicable. */\r\n base: Class | null;\r\n /** Contextual type arguments for fields and methods. */\r\n contextualTypeArguments: Map | null = null;\r\n /** Current member memory offset. */\r\n currentMemoryOffset: u32 = 0;\r\n /** Constructor instance. */\r\n constructorInstance: Function | null = null;\r\n /** Operator overloads. */\r\n overloads: Map | null = null;\r\n\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","/**\r\n * Resolve infrastructure to obtain types and elements.\r\n * @module resolver\r\n *//***/\r\n\r\nimport {\r\n DiagnosticEmitter,\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Program,\r\n ElementKind,\r\n OperatorKind,\r\n FlowFlags,\r\n\r\n Element,\r\n Class,\r\n ClassPrototype,\r\n Function,\r\n FunctionTarget,\r\n FunctionPrototype,\r\n VariableLikeElement,\r\n Property,\r\n DecoratorFlags,\r\n FieldPrototype,\r\n Field\r\n} from \"./program\";\r\n\r\nimport {\r\n SignatureNode,\r\n ParameterKind,\r\n CommonTypeNode,\r\n NodeKind,\r\n TypeNode,\r\n TypeParameterNode,\r\n Node,\r\n Range,\r\n IdentifierExpression,\r\n CallExpression,\r\n ElementAccessExpression,\r\n PropertyAccessExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n ParenthesizedExpression,\r\n AssertionExpression,\r\n Expression\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n Signature,\r\n typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n PATH_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n CommonFlags\r\n} from \"./common\";\r\n\r\n/** Indicates whether errors are reported or not. */\r\nexport enum ReportMode {\r\n /** Report errors. */\r\n REPORT,\r\n /** Swallow errors. */\r\n SWALLOW\r\n}\r\n\r\n/** Provides tools to resolve types and expressions. */\r\nexport class Resolver extends DiagnosticEmitter {\r\n\r\n /** The program this resolver belongs to. */\r\n program: Program;\r\n\r\n /** Target expression of the previously resolved property or element access. */\r\n currentThisExpression: Expression | null = null;\r\n /** Element expression of the previously resolved element access. */\r\n currentElementExpression : Expression | null = null;\r\n\r\n /** Constructs the resolver for the specified program. */\r\n constructor(program: Program) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n }\r\n\r\n /** Resolves a {@link CommonTypeNode} to a concrete {@link Type}. */\r\n resolveType(\r\n node: CommonTypeNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode = ReportMode.REPORT\r\n ): Type | null {\r\n\r\n // handle signatures specifically\r\n if (node.kind == NodeKind.SIGNATURE) {\r\n let signature = this.resolveSignature(node, contextualTypeArguments, reportMode);\r\n if (!signature) return null;\r\n return node.isNullable ? signature.type.asNullable() : signature.type;\r\n }\r\n\r\n // now dealing with TypeNode\r\n assert(node.kind == NodeKind.TYPE);\r\n var typeNode = node;\r\n var simpleName = typeNode.name.text;\r\n var globalName = simpleName;\r\n var localName = typeNode.range.source.internalPath + PATH_DELIMITER + simpleName; // TODO cache\r\n\r\n // check file-global / program-global enum or class\r\n {\r\n let elementsLookup = this.program.elementsLookup;\r\n let element: Element | null;\r\n if (\r\n (element = elementsLookup.get(localName)) || // file-global\r\n (element = elementsLookup.get(globalName)) // program-global\r\n ) {\r\n switch (element.kind) {\r\n case ElementKind.ENUM: {\r\n if (typeNode.typeArguments !== null && typeNode.typeArguments.length) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n node.range, element.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n return Type.i32;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n let instance = this.resolveClassInclTypeArguments(\r\n element,\r\n typeNode.typeArguments,\r\n contextualTypeArguments,\r\n node\r\n ); // reports\r\n if (!instance) return null;\r\n return node.isNullable ? instance.type.asNullable() : instance.type;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // check (global) type alias\r\n {\r\n let alias = this.program.typeAliases.get(simpleName);\r\n if (alias) return this.resolveType(alias.type, contextualTypeArguments, reportMode);\r\n }\r\n\r\n // resolve parameters\r\n {\r\n let typeArgumentNodes = typeNode.typeArguments;\r\n if (typeArgumentNodes) {\r\n let numTypeArguments = typeArgumentNodes.length;\r\n let paramTypes = new Array(numTypeArguments);\r\n for (let i = 0; i < numTypeArguments; ++i) {\r\n let paramType = this.resolveType( // reports\r\n typeArgumentNodes[i],\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!paramType) return null;\r\n paramTypes[i] = paramType;\r\n }\r\n if (numTypeArguments) { // can't be a placeholder if it has parameters\r\n let instanceKey = typesToString(paramTypes);\r\n if (instanceKey.length) {\r\n localName += \"<\" + instanceKey + \">\";\r\n globalName += \"<\" + instanceKey + \">\";\r\n }\r\n } else if (contextualTypeArguments) {\r\n let placeholderType = contextualTypeArguments.get(globalName);\r\n if (placeholderType) return placeholderType;\r\n }\r\n }\r\n }\r\n\r\n // check file-global / program-global type\r\n {\r\n let typesLookup = this.program.typesLookup;\r\n let type: Type | null;\r\n if (\r\n (type = typesLookup.get(localName)) ||\r\n (type = typesLookup.get(globalName))\r\n ) {\r\n return type;\r\n }\r\n }\r\n\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n typeNode.name.range, globalName\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves a {@link SignatureNode} to a concrete {@link Signature}. */\r\n resolveSignature(\r\n node: SignatureNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Signature | null {\r\n var explicitThisType = node.explicitThisType;\r\n var thisType: Type | null = null;\r\n if (explicitThisType) {\r\n thisType = this.resolveType(explicitThisType, contextualTypeArguments, reportMode);\r\n if (!thisType) return null;\r\n }\r\n var parameterTypeNodes = node.parameters;\r\n var numParameters = parameterTypeNodes.length;\r\n var parameterTypes = new Array(numParameters);\r\n var parameterNames = new Array(numParameters);\r\n var requiredParameters = 0;\r\n var hasRest = false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let parameterTypeNode = parameterTypeNodes[i];\r\n switch (parameterTypeNode.parameterKind) {\r\n case ParameterKind.DEFAULT: {\r\n requiredParameters = i + 1;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n assert(i == numParameters);\r\n hasRest = true;\r\n break;\r\n }\r\n }\r\n let parameterType = this.resolveType(\r\n assert(parameterTypeNode.type),\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterTypeNode.name.text;\r\n }\r\n var returnTypeNode = node.returnType;\r\n var returnType: Type | null;\r\n if (returnTypeNode) {\r\n returnType = this.resolveType(returnTypeNode, contextualTypeArguments, reportMode);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Type.void;\r\n }\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n signature.hasRest = hasRest;\r\n return signature;\r\n }\r\n\r\n /** Resolves an array of type arguments to concrete types. */\r\n resolveTypeArguments(\r\n typeParameters: TypeParameterNode[],\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Type[] | null {\r\n var parameterCount = typeParameters.length;\r\n var argumentCount = typeArgumentNodes ? typeArgumentNodes.length : 0;\r\n if (parameterCount != argumentCount) {\r\n if (argumentCount) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n Range.join(\r\n (typeArgumentNodes)[0].range,\r\n (typeArgumentNodes)[argumentCount - 1].range\r\n ),\r\n parameterCount.toString(10), argumentCount.toString(10)\r\n );\r\n } else if (alternativeReportNode) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n alternativeReportNode.range.atEnd, parameterCount.toString(10), \"0\"\r\n );\r\n }\r\n return null;\r\n }\r\n var typeArguments = new Array(parameterCount);\r\n for (let i = 0; i < parameterCount; ++i) {\r\n let type = this.resolveType( // reports\r\n (typeArgumentNodes)[i],\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!type) return null;\r\n // TODO: check extendsType\r\n typeArguments[i] = type;\r\n }\r\n return typeArguments;\r\n }\r\n\r\n /** Resolves an identifier to the element it refers to. */\r\n resolveIdentifier(\r\n identifier: IdentifierExpression,\r\n context: Element | null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n var name = identifier.text;\r\n var element: Element | null;\r\n\r\n if (context) {\r\n\r\n switch (context.kind) {\r\n case ElementKind.FUNCTION: { // search locals, use prototype\r\n element = (context).flow.getScopedLocal(name);\r\n if (element) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element;\r\n }\r\n context = (context).prototype.parent;\r\n break;\r\n }\r\n case ElementKind.CLASS: { // use prototype\r\n context = (context).prototype.parent;\r\n break;\r\n }\r\n }\r\n\r\n // search context\r\n while (context) {\r\n let members = context.members;\r\n if (members) {\r\n if (element = members.get(name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element;\r\n }\r\n }\r\n context = context.parent;\r\n }\r\n }\r\n\r\n // search current file\r\n var elementsLookup = this.program.elementsLookup;\r\n if (element = elementsLookup.get(identifier.range.source.internalPath + PATH_DELIMITER + name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n // search global scope\r\n if (element = elementsLookup.get(name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n identifier.range, name\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves a property access to the element it refers to. */\r\n resolvePropertyAccess(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualFunction: Function,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = propertyAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction, reportMode); // reports\r\n if (!target) return null;\r\n\r\n // at this point we know exactly what the target is, so look up the element within\r\n var propertyName = propertyAccess.property.text;\r\n\r\n // Resolve variable-likes to the class type they reference first\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let 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.currentElementExpression;\r\n if (elementExpression) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementExpression.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (!(target = returnType.classReference)) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, returnType.toString()\r\n );\r\n return null;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // Look up the member within\r\n switch (target.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n case ElementKind.CLASS: {\r\n do {\r\n let members = target.members;\r\n let member: Element | null;\r\n if (members && (member = members.get(propertyName))) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = null;\r\n return member; // instance FIELD, static GLOBAL, FUNCTION_PROTOTYPE...\r\n }\r\n // traverse inherited static members on the base prototype if target is a class prototype\r\n if (target.kind == ElementKind.CLASS_PROTOTYPE) {\r\n if ((target).basePrototype) {\r\n target = (target).basePrototype;\r\n } else {\r\n break;\r\n }\r\n // traverse inherited instance members on the base class if target is a class instance\r\n } else if (target.kind == ElementKind.CLASS) {\r\n if ((target).base) {\r\n target = (target).base;\r\n } else {\r\n break;\r\n }\r\n } else {\r\n break;\r\n }\r\n } while (true);\r\n break;\r\n }\r\n default: { // enums or other namespace-like elements\r\n let members = target.members;\r\n if (members) {\r\n let member = members.get(propertyName);\r\n if (member) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = null;\r\n return member; // static ENUMVALUE, static GLOBAL, static FUNCTION_PROTOTYPE...\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveElementAccess(\r\n elementAccess: ElementAccessExpression,\r\n contextualFunction: Function,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n var targetExpression = elementAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction, reportMode);\r\n if (!target) return null;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (target = type.classReference) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS: { // element access on element access\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementAccess.range, (target).internalName\r\n );\r\n }\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (target = returnType.classReference) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n targetExpression.range\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n resolveExpression(\r\n expression: Expression,\r\n contextualFunction: Function,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n while (expression.kind == NodeKind.PARENTHESIZED) {\r\n expression = (expression).expression;\r\n }\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n let type = this.resolveType(\r\n (expression).toType,\r\n contextualFunction.flow.contextualTypeArguments,\r\n reportMode\r\n );\r\n if (type) {\r\n let classType = type.classReference;\r\n if (classType) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return classType;\r\n }\r\n }\r\n return null;\r\n }\r\n case NodeKind.BINARY: { // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n }\r\n case NodeKind.THIS: { // -> Class / ClassPrototype\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"this\");\r\n if (explicitLocal) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return parent;\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n }\r\n return null;\r\n }\r\n case NodeKind.SUPER: { // -> Class\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"super\");\r\n if (explicitLocal) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent && parent.kind == ElementKind.CLASS && (parent = (parent).base)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return parent;\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n }\r\n return null;\r\n }\r\n case NodeKind.IDENTIFIER: {\r\n return this.resolveIdentifier(expression, contextualFunction, reportMode);\r\n }\r\n case NodeKind.LITERAL: {\r\n switch ((expression).literalKind) {\r\n case LiteralKind.STRING: {\r\n this.currentThisExpression = expression;\r\n this.currentElementExpression = null;\r\n return this.program.stringInstance;\r\n }\r\n // case LiteralKind.ARRAY: // TODO\r\n }\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n return this.resolvePropertyAccess(\r\n expression,\r\n contextualFunction,\r\n reportMode\r\n );\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n return this.resolveElementAccess(\r\n expression,\r\n contextualFunction,\r\n reportMode\r\n );\r\n }\r\n case NodeKind.CALL: {\r\n let targetExpression = (expression).expression;\r\n let target = this.resolveExpression(targetExpression, contextualFunction, reportMode);\r\n if (!target) return null;\r\n if (target.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n let instance = this.resolveFunctionInclTypeArguments(\r\n target,\r\n (expression).typeArguments,\r\n contextualFunction.flow.contextualTypeArguments,\r\n expression,\r\n reportMode\r\n );\r\n if (!instance) return null;\r\n let returnType = instance.signature.returnType;\r\n let classType = returnType.classReference;\r\n if (classType) {\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return classType;\r\n } else {\r\n let signature = returnType.signatureReference;\r\n if (signature) {\r\n let functionTarget = signature.cachedFunctionTarget;\r\n if (!functionTarget) {\r\n functionTarget = new FunctionTarget(this.program, signature);\r\n signature.cachedFunctionTarget = functionTarget;\r\n }\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return functionTarget;\r\n }\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n targetExpression.range, target.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n break;\r\n }\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves a function prototype to an instance using the specified concrete type arguments. */\r\n resolveFunction(\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Function | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n var instance = prototype.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n var declaration = prototype.declaration;\r\n var isInstance = prototype.is(CommonFlags.INSTANCE);\r\n var classPrototype = prototype.classPrototype;\r\n\r\n // inherit contextual type arguments as provided. might be overridden.\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(\r\n inheritedName,\r\n inheritedType\r\n );\r\n }\r\n }\r\n\r\n // override with class type arguments if a partially resolved instance method\r\n var classTypeArguments = prototype.classTypeArguments;\r\n if (classTypeArguments) { // set only if partially resolved\r\n assert(prototype.is(CommonFlags.INSTANCE));\r\n let classDeclaration = assert(classPrototype).declaration;\r\n let classTypeParameters = classDeclaration.typeParameters;\r\n let numClassTypeParameters = classTypeParameters.length;\r\n assert(numClassTypeParameters == classTypeArguments.length);\r\n for (let i = 0; i < numClassTypeParameters; ++i) {\r\n contextualTypeArguments.set(\r\n classTypeParameters[i].name.text,\r\n classTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!classTypeArguments);\r\n }\r\n\r\n // override with function specific type arguments\r\n var signatureNode = declaration.signature;\r\n var functionTypeParameters = declaration.typeParameters;\r\n var numFunctionTypeArguments: i32;\r\n if (typeArguments && (numFunctionTypeArguments = typeArguments.length)) {\r\n assert(functionTypeParameters && numFunctionTypeArguments == functionTypeParameters.length);\r\n for (let i = 0; i < numFunctionTypeArguments; ++i) {\r\n contextualTypeArguments.set(\r\n (functionTypeParameters)[i].name.text,\r\n typeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!functionTypeParameters || functionTypeParameters.length == 0);\r\n }\r\n\r\n // resolve class if an instance method\r\n var classInstance: Class | null = null;\r\n var thisType: Type | null = null;\r\n if (isInstance) {\r\n classInstance = this.resolveClass(\r\n assert(classPrototype),\r\n classTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!classInstance) return null;\r\n thisType = classInstance.type;\r\n contextualTypeArguments.set(\"this\", thisType);\r\n }\r\n\r\n // resolve signature node\r\n var signatureParameters = signatureNode.parameters;\r\n var signatureParameterCount = signatureParameters.length;\r\n var parameterTypes = new Array(signatureParameterCount);\r\n var parameterNames = new Array(signatureParameterCount);\r\n var requiredParameters = 0;\r\n for (let i = 0; i < signatureParameterCount; ++i) {\r\n let parameterDeclaration = signatureParameters[i];\r\n if (parameterDeclaration.parameterKind == ParameterKind.DEFAULT) {\r\n requiredParameters = i + 1;\r\n }\r\n let typeNode = assert(parameterDeclaration.type);\r\n let parameterType = this.resolveType(typeNode, contextualTypeArguments, reportMode);\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterDeclaration.name.text;\r\n }\r\n\r\n var returnType: Type;\r\n if (prototype.is(CommonFlags.SET)) {\r\n returnType = Type.void; // not annotated\r\n } else if (prototype.is(CommonFlags.CONSTRUCTOR)) {\r\n returnType = assert(classInstance).type; // not annotated\r\n } else {\r\n let typeNode = assert(signatureNode.returnType);\r\n let type = this.resolveType(typeNode, contextualTypeArguments, reportMode);\r\n if (!type) return null;\r\n returnType = type;\r\n }\r\n\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n\r\n var internalName = prototype.internalName;\r\n if (instanceKey.length) internalName += \"<\" + instanceKey + \">\";\r\n instance = new Function(\r\n prototype,\r\n internalName,\r\n signature,\r\n classInstance\r\n ? classInstance\r\n : classPrototype,\r\n contextualTypeArguments\r\n );\r\n prototype.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n return instance;\r\n }\r\n\r\n /** Resolves a function prototype partially by applying the specified type arguments. */\r\n resolveFunctionPartially(\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): FunctionPrototype | null {\r\n assert(prototype.is(CommonFlags.INSTANCE));\r\n var classPrototype = assert(prototype.classPrototype);\r\n\r\n if (!(typeArguments && typeArguments.length)) return prototype; // no need to clone\r\n\r\n var simpleName = prototype.simpleName;\r\n var partialKey = typesToString(typeArguments);\r\n var partialPrototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n classPrototype.internalName + \"<\" + partialKey + \">\" + INSTANCE_DELIMITER + simpleName,\r\n prototype.declaration,\r\n classPrototype,\r\n prototype.decoratorFlags\r\n );\r\n partialPrototype.flags = prototype.flags;\r\n partialPrototype.operatorKind = prototype.operatorKind;\r\n partialPrototype.classTypeArguments = typeArguments;\r\n return partialPrototype;\r\n }\r\n\r\n /** Resolves a function prototype to an instance by first resolving the specified type arguments. */\r\n resolveFunctionInclTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Function | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (prototype.is(CommonFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.resolveTypeArguments( // reports\r\n assert(prototype.declaration.typeParameters),\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode,\r\n reportMode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n }\r\n return this.resolveFunction(\r\n prototype,\r\n resolvedTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n\r\n /** Resolves a class prototype using the specified concrete type arguments. */\r\n resolveClass(\r\n prototype: ClassPrototype,\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Class | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n\r\n // Check if this exact instance has already been resolved\r\n var instance = prototype.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n // Copy contextual type arguments so we don't pollute the original map\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n\r\n // Insert contextual type arguments for this operation. Internally, this method is always\r\n // called with matching type parameter / argument counts.\r\n var declaration = prototype.declaration;\r\n if (typeArguments) {\r\n let typeParameters = declaration.typeParameters;\r\n let expectedTypeArguments = typeParameters.length;\r\n let actualTypeArguments = typeArguments.length;\r\n assert(actualTypeArguments == expectedTypeArguments);\r\n for (let i = 0; i < actualTypeArguments; ++i) {\r\n contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n } else {\r\n assert(declaration.typeParameters.length == 0);\r\n }\r\n\r\n // Resolve base class if applicable\r\n var baseClass: Class | null = null;\r\n if (declaration.extendsType) {\r\n let baseClassType = this.resolveType(\r\n declaration.extendsType,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.classReference)) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.program.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n declaration.extendsType.range\r\n );\r\n }\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.SEALED)) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.program.error(\r\n DiagnosticCode.Class_0_is_sealed_and_cannot_be_extended,\r\n declaration.extendsType.range, baseClass.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.UNMANAGED) != prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.program.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa,\r\n Range.join(declaration.name.range, declaration.extendsType.range)\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n\r\n // Construct the instance and remember that it has been resolved already\r\n var simpleName = prototype.simpleName;\r\n var internalName = prototype.internalName;\r\n if (instanceKey.length) {\r\n simpleName += \"<\" + instanceKey + \">\";\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n instance = new Class(prototype, simpleName, internalName, typeArguments, baseClass);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n prototype.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n\r\n // Inherit base class members and set up the initial memory offset for own fields\r\n var memoryOffset: u32 = 0;\r\n if (baseClass) {\r\n if (baseClass.members) {\r\n if (!instance.members) instance.members = new Map();\r\n for (let inheritedMember of baseClass.members.values()) {\r\n instance.members.set(inheritedMember.simpleName, inheritedMember);\r\n }\r\n }\r\n memoryOffset = baseClass.currentMemoryOffset;\r\n }\r\n\r\n // Resolve constructor by first applying the class type arguments\r\n if (prototype.constructorPrototype) {\r\n let constructorPartial = this.resolveFunctionPartially(\r\n prototype.constructorPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!constructorPartial) return null;\r\n instance.constructorInstance = this.resolveFunction(constructorPartial, null, null, reportMode);\r\n }\r\n\r\n // Resolve instance members\r\n if (prototype.instanceMembers) {\r\n for (let member of prototype.instanceMembers.values()) {\r\n switch (member.kind) {\r\n\r\n // Lay out fields in advance\r\n case ElementKind.FIELD_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let fieldDeclaration = (member).declaration;\r\n let fieldType: Type | null = null;\r\n // TODO: handle duplicate non-private fields\r\n if (!fieldDeclaration.type) {\r\n if (baseClass !== null && baseClass.members !== null) {\r\n let baseField = baseClass.members.get((member).simpleName);\r\n if (baseField && !baseField.is(CommonFlags.PRIVATE)) {\r\n assert(baseField.kind == ElementKind.FIELD);\r\n fieldType = (baseField).type;\r\n }\r\n }\r\n if (!fieldType) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n fieldDeclaration.name.range.atEnd\r\n );\r\n }\r\n }\r\n } else {\r\n fieldType = this.resolveType(\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n if (!fieldType) break;\r\n let fieldInstance = new Field(\r\n member,\r\n internalName + INSTANCE_DELIMITER + (member).simpleName,\r\n fieldType,\r\n fieldDeclaration,\r\n instance\r\n );\r\n switch (fieldType.byteSize) { // align\r\n case 1: break;\r\n case 2: { if (memoryOffset & 1) ++memoryOffset; break; }\r\n case 4: { if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1; break; }\r\n case 8: { if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1; break; }\r\n default: assert(false);\r\n }\r\n fieldInstance.memoryOffset = memoryOffset;\r\n memoryOffset += fieldType.byteSize;\r\n instance.members.set(member.simpleName, fieldInstance);\r\n break;\r\n }\r\n\r\n // Partially resolve methods as these might have type arguments on their own\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let partialPrototype = this.resolveFunctionPartially(\r\n member,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialPrototype) return null;\r\n partialPrototype.internalName = internalName + INSTANCE_DELIMITER + partialPrototype.simpleName;\r\n instance.members.set(member.simpleName, partialPrototype);\r\n break;\r\n }\r\n\r\n // Clone properties and partially resolve the wrapped accessors for consistence with other methods\r\n case ElementKind.PROPERTY: {\r\n if (!instance.members) instance.members = new Map();\r\n let getterPrototype = assert((member).getterPrototype); // must be present\r\n let setterPrototype = (member).setterPrototype; // might be present\r\n let instanceProperty = new Property(\r\n this.program,\r\n member.simpleName,\r\n internalName + INSTANCE_DELIMITER + member.simpleName,\r\n prototype\r\n );\r\n let partialGetterPrototype = this.resolveFunctionPartially(\r\n getterPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialGetterPrototype) return null;\r\n partialGetterPrototype\r\n .internalName = internalName + INSTANCE_DELIMITER + partialGetterPrototype.simpleName;\r\n instanceProperty.getterPrototype = partialGetterPrototype;\r\n if (setterPrototype) {\r\n let partialSetterPrototype = this.resolveFunctionPartially(\r\n setterPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialSetterPrototype) return null;\r\n partialSetterPrototype\r\n .internalName = internalName + INSTANCE_DELIMITER + partialSetterPrototype.simpleName;\r\n instanceProperty.setterPrototype = partialSetterPrototype;\r\n }\r\n instance.members.set(member.simpleName, instanceProperty);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n // Finalize memory offset\r\n instance.currentMemoryOffset = memoryOffset;\r\n\r\n // Fully resolve operator overloads (don't have type parameters on their own)\r\n for (let [kind, overloadPrototype] of prototype.overloadPrototypes) {\r\n assert(kind != OperatorKind.INVALID);\r\n let operatorInstance: Function | null;\r\n if (overloadPrototype.is(CommonFlags.INSTANCE)) {\r\n let operatorPartial = this.resolveFunctionPartially(\r\n overloadPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!operatorPartial) continue;\r\n operatorInstance = this.resolveFunction(operatorPartial, null, null, reportMode);\r\n } else {\r\n operatorInstance = this.resolveFunction(overloadPrototype, null, null, reportMode);\r\n }\r\n if (!operatorInstance) continue;\r\n let overloads = instance.overloads;\r\n if (!overloads) instance.overloads = overloads = new Map();\r\n overloads.set(kind, operatorInstance);\r\n }\r\n return instance;\r\n }\r\n\r\n /** Resolves a class prototype by first resolving the specified type arguments. */\r\n resolveClassInclTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Class | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n\r\n // Resolve type arguments if generic\r\n if (prototype.is(CommonFlags.GENERIC)) {\r\n let typeParameterNodes = prototype.declaration.typeParameters;\r\n let expectedTypeArguments = typeParameterNodes.length;\r\n assert(expectedTypeArguments > 0);\r\n let actualTypeArguments = typeArgumentNodes !== null ? typeArgumentNodes.length : 0;\r\n if (expectedTypeArguments != actualTypeArguments) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, expectedTypeArguments.toString(10), actualTypeArguments.toString(10)\r\n );\r\n }\r\n return null;\r\n }\r\n resolvedTypeArguments = this.resolveTypeArguments(\r\n typeParameterNodes,\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode,\r\n reportMode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n\r\n // Otherwise make sure that no type arguments have been specified\r\n } else {\r\n if (typeArgumentNodes !== null && typeArgumentNodes.length) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n\r\n // Continue with concrete types\r\n return this.resolveClass(\r\n prototype,\r\n resolvedTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n}\r\n","/**\r\n * Generated from diagnosticsMessages.json. Do not edit.\r\n * @module diagnostics\r\n *//***/\r\n\r\n/* tslint:disable:max-line-length */\r\n\r\n/** Enum of available diagnostic codes. */\r\nexport enum DiagnosticCode {\r\n Operation_not_supported = 100,\r\n Operation_is_unsafe = 101,\r\n User_defined_0 = 102,\r\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\r\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\r\n Type_0_cannot_be_changed_to_type_1 = 202,\r\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\r\n Basic_type_0_cannot_be_nullable = 204,\r\n Cannot_export_a_mutable_global = 205,\r\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\r\n Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa = 207,\r\n Unmanaged_classes_cannot_implement_interfaces = 208,\r\n Invalid_regular_expression_flags = 209,\r\n Implementation_0_must_match_the_signature_1 = 210,\r\n Class_0_is_sealed_and_cannot_be_extended = 211,\r\n Decorator_0_is_not_valid_here = 212,\r\n Duplicate_decorator = 213,\r\n An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf = 214,\r\n Optional_parameter_must_have_an_initializer = 215,\r\n Constructor_of_class_0_must_not_require_any_arguments = 216,\r\n Function_0_cannot_be_inlined_into_itself = 217,\r\n Unterminated_string_literal = 1002,\r\n Identifier_expected = 1003,\r\n _0_expected = 1005,\r\n A_file_cannot_have_a_reference_to_itself = 1006,\r\n Trailing_comma_not_allowed = 1009,\r\n Unexpected_token = 1012,\r\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\r\n Parameter_cannot_have_question_mark_and_initializer = 1015,\r\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\r\n Statements_are_not_allowed_in_ambient_contexts = 1036,\r\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\r\n _0_modifier_cannot_be_used_here = 1042,\r\n A_rest_parameter_cannot_be_optional = 1047,\r\n A_rest_parameter_cannot_have_an_initializer = 1048,\r\n A_set_accessor_must_have_exactly_one_parameter = 1049,\r\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\r\n A_get_accessor_cannot_have_parameters = 1054,\r\n Enum_member_must_have_initializer = 1061,\r\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\r\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\r\n An_accessor_cannot_have_type_parameters = 1094,\r\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\r\n Type_parameter_list_cannot_be_empty = 1098,\r\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\r\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\r\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\r\n Expression_expected = 1109,\r\n Type_expected = 1110,\r\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\r\n Duplicate_label_0 = 1114,\r\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\r\n Digit_expected = 1124,\r\n Hexadecimal_digit_expected = 1125,\r\n Unexpected_end_of_text = 1126,\r\n Invalid_character = 1127,\r\n _case_or_default_expected = 1130,\r\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\r\n Type_argument_expected = 1140,\r\n String_literal_expected = 1141,\r\n Line_break_not_permitted_here = 1142,\r\n Declaration_expected = 1146,\r\n _const_declarations_must_be_initialized = 1155,\r\n Unterminated_regular_expression_literal = 1161,\r\n Interface_declaration_cannot_have_implements_clause = 1176,\r\n Binary_digit_expected = 1177,\r\n Octal_digit_expected = 1178,\r\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\r\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\r\n Unterminated_Unicode_escape_sequence = 1199,\r\n Decorators_are_not_valid_here = 1206,\r\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\r\n Method_0_cannot_have_an_implementation_because_it_is_marked_abstract = 1245,\r\n A_class_may_only_extend_another_class = 1311,\r\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\r\n Duplicate_identifier_0 = 2300,\r\n Cannot_find_name_0 = 2304,\r\n Module_0_has_no_exported_member_1 = 2305,\r\n Generic_type_0_requires_1_type_argument_s = 2314,\r\n Type_0_is_not_generic = 2315,\r\n Type_0_is_not_assignable_to_type_1 = 2322,\r\n Index_signature_is_missing_in_type_0 = 2329,\r\n _this_cannot_be_referenced_in_current_location = 2332,\r\n _super_can_only_be_referenced_in_a_derived_class = 2335,\r\n Property_0_does_not_exist_on_type_1 = 2339,\r\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\r\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\r\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\r\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\r\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\r\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\r\n _get_and_set_accessor_must_have_the_same_type = 2380,\r\n Constructor_implementation_is_missing = 2390,\r\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\r\n Multiple_constructor_implementations_are_not_allowed = 2392,\r\n Duplicate_function_implementation = 2393,\r\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\r\n Type_0_has_no_property_1 = 2460,\r\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\r\n In_const_enum_declarations_member_initializer_must_be_constant_expression = 2474,\r\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\r\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\r\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\r\n Index_signature_in_type_0_only_permits_reading = 2542,\r\n Expected_0_arguments_but_got_1 = 2554,\r\n Expected_at_least_0_arguments_but_got_1 = 2555,\r\n Expected_0_type_arguments_but_got_1 = 2558,\r\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\r\n Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration = 2673,\r\n Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration = 2674,\r\n Namespace_0_has_no_exported_member_1 = 2694,\r\n File_0_not_found = 6054,\r\n Numeric_separators_are_not_allowed_here = 6188,\r\n Multiple_consecutive_numeric_separators_are_not_permitted = 6189\r\n}\r\n\r\n/** Translates a diagnostic code to its respective string. */\r\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\r\n switch (code) {\r\n case 100: return \"Operation not supported.\";\r\n case 101: return \"Operation is unsafe.\";\r\n case 102: return \"User-defined: {0}\";\r\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\r\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\r\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\r\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\r\n case 204: return \"Basic type '{0}' cannot be nullable.\";\r\n case 205: return \"Cannot export a mutable global.\";\r\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\r\n case 207: return \"Unmanaged classes cannot extend managed classes and vice-versa.\";\r\n case 208: return \"Unmanaged classes cannot implement interfaces.\";\r\n case 209: return \"Invalid regular expression flags.\";\r\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\r\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\r\n case 212: return \"Decorator '{0}' is not valid here.\";\r\n case 213: return \"Duplicate decorator.\";\r\n case 214: return \"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.\";\r\n case 215: return \"Optional parameter must have an initializer.\";\r\n case 216: return \"Constructor of class '{0}' must not require any arguments.\";\r\n case 217: return \"Function '{0}' cannot be inlined into itself.\";\r\n case 1002: return \"Unterminated string literal.\";\r\n case 1003: return \"Identifier expected.\";\r\n case 1005: return \"'{0}' expected.\";\r\n case 1006: return \"A file cannot have a reference to itself.\";\r\n case 1009: return \"Trailing comma not allowed.\";\r\n case 1012: return \"Unexpected token.\";\r\n case 1014: return \"A rest parameter must be last in a parameter list.\";\r\n case 1015: return \"Parameter cannot have question mark and initializer.\";\r\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\r\n case 1036: return \"Statements are not allowed in ambient contexts.\";\r\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\r\n case 1042: return \"'{0}' modifier cannot be used here.\";\r\n case 1047: return \"A rest parameter cannot be optional.\";\r\n case 1048: return \"A rest parameter cannot have an initializer.\";\r\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\r\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\r\n case 1054: return \"A 'get' accessor cannot have parameters.\";\r\n case 1061: return \"Enum member must have initializer.\";\r\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\r\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\r\n case 1094: return \"An accessor cannot have type parameters.\";\r\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\r\n case 1098: return \"Type parameter list cannot be empty.\";\r\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\r\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\r\n case 1108: return \"A 'return' statement can only be used within a function body.\";\r\n case 1109: return \"Expression expected.\";\r\n case 1110: return \"Type expected.\";\r\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\r\n case 1114: return \"Duplicate label '{0}'.\";\r\n case 1121: return \"Octal literals are not allowed in strict mode.\";\r\n case 1124: return \"Digit expected.\";\r\n case 1125: return \"Hexadecimal digit expected.\";\r\n case 1126: return \"Unexpected end of text.\";\r\n case 1127: return \"Invalid character.\";\r\n case 1130: return \"'case' or 'default' expected.\";\r\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\r\n case 1140: return \"Type argument expected.\";\r\n case 1141: return \"String literal expected.\";\r\n case 1142: return \"Line break not permitted here.\";\r\n case 1146: return \"Declaration expected.\";\r\n case 1155: return \"'const' declarations must be initialized.\";\r\n case 1161: return \"Unterminated regular expression literal.\";\r\n case 1176: return \"Interface declaration cannot have 'implements' clause.\";\r\n case 1177: return \"Binary digit expected.\";\r\n case 1178: return \"Octal digit expected.\";\r\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\r\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\r\n case 1199: return \"Unterminated Unicode escape sequence.\";\r\n case 1206: return \"Decorators are not valid here.\";\r\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\r\n case 1245: return \"Method '{0}' cannot have an implementation because it is marked abstract.\";\r\n case 1311: return \"A class may only extend another class.\";\r\n case 1317: return \"A parameter property cannot be declared using a rest parameter.\";\r\n case 2300: return \"Duplicate identifier '{0}'.\";\r\n case 2304: return \"Cannot find name '{0}'.\";\r\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\r\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\r\n case 2315: return \"Type '{0}' is not generic.\";\r\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\r\n case 2329: return \"Index signature is missing in type '{0}'.\";\r\n case 2332: return \"'this' cannot be referenced in current location.\";\r\n case 2335: return \"'super' can only be referenced in a derived class.\";\r\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\r\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\r\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\r\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\r\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\r\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\r\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\r\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\r\n case 2390: return \"Constructor implementation is missing.\";\r\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\r\n case 2392: return \"Multiple constructor implementations are not allowed.\";\r\n case 2393: return \"Duplicate function implementation.\";\r\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\r\n case 2460: return \"Type '{0}' has no property '{1}'.\";\r\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\r\n case 2474: return \"In 'const' enum declarations member initializer must be constant expression.\";\r\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\r\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\r\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\r\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\r\n case 2554: return \"Expected {0} arguments, but got {1}.\";\r\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\r\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\r\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\r\n case 2673: return \"Constructor of class '{0}' is private and only accessible within the class declaration.\";\r\n case 2674: return \"Constructor of class '{0}' is protected and only accessible within the class declaration.\";\r\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\r\n case 6054: return \"File '{0}' not found.\";\r\n case 6188: return \"Numeric separators are not allowed here.\";\r\n case 6189: return \"Multiple consecutive numeric separators are not permitted.\";\r\n default: return \"\";\r\n }\r\n}\r\n","/**\r\n * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileAllocate,\r\n compileAbort,\r\n compileIterateRoots\r\n} from \"./builtins\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module,\r\n MemorySegment,\r\n ExpressionRef,\r\n UnaryOp,\r\n BinaryOp,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionId,\r\n FunctionTypeRef,\r\n GlobalRef,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getGetLocalIndex,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName\r\n} 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 inline functions stack. */\r\n currentInlineFunctions: Function[] = [];\r\n /** Current enum in compilation. */\r\n currentEnum: Enum | null = null;\r\n /** Current type in compilation. */\r\n currentType: Type = Type.void;\r\n /** Start function being compiled. */\r\n startFunctionInstance: Function;\r\n /** Start function statements. */\r\n startFunctionBody: ExpressionRef[];\r\n /** Counting memory offset. */\r\n memoryOffset: I64;\r\n /** Memory segments being compiled. */\r\n memorySegments: MemorySegment[] = [];\r\n /** Map of already compiled static string segments. */\r\n stringSegments: Map = new Map();\r\n /** Function table being compiled. */\r\n functionTable: 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 /** Indicates whether the iterateRoots function must be generated. */\r\n needsIterateRoots: bool = false;\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n this.resolver = program.resolver;\r\n if (!options) options = new Options();\r\n this.options = options;\r\n this.memoryOffset = i64_new(\r\n // leave space for `null`. also functions as a sentinel for erroneous stores at offset 0.\r\n // note that Binaryen's asm.js output utilizes the first 8 bytes for reinterpretations (#1547)\r\n max(options.memoryBase, 8)\r\n );\r\n this.module = Module.create();\r\n }\r\n\r\n /** Performs compilation of the underlying {@link Program} to a {@link Module}. */\r\n compile(): Module {\r\n var options = this.options;\r\n var module = this.module;\r\n var program = this.program;\r\n\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n program.initialize(options);\r\n\r\n // set up the start function\r\n var startFunctionInstance = new Function(program.startFunction, \"start\", new Signature([], Type.void));\r\n this.startFunctionInstance = startFunctionInstance;\r\n var startFunctionBody = new Array();\r\n this.startFunctionBody = startFunctionBody;\r\n this.currentFunction = startFunctionInstance;\r\n\r\n // compile entry file(s) while traversing reachable elements\r\n var sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].isEntry) this.compileSource(sources[i]);\r\n }\r\n\r\n // compile the start function if not empty or called by main\r\n if (startFunctionBody.length || program.mainFunction !== null) {\r\n let signature = startFunctionInstance.signature;\r\n let funcRef = module.addFunction(\r\n startFunctionInstance.internalName,\r\n this.ensureFunctionType(\r\n signature.parameterTypes,\r\n signature.returnType,\r\n signature.thisType\r\n ),\r\n typesToNativeTypes(startFunctionInstance.additionalLocals),\r\n module.createBlock(null, startFunctionBody)\r\n );\r\n startFunctionInstance.finalize(module, funcRef);\r\n if (!program.mainFunction) module.setStart(funcRef);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n var memoryOffset = this.memoryOffset;\r\n memoryOffset = i64_align(memoryOffset, options.usizeType.byteSize);\r\n this.memoryOffset = memoryOffset;\r\n if (options.isWasm64) {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I64,\r\n false,\r\n module.createI64(i64_low(memoryOffset), i64_high(memoryOffset))\r\n );\r\n } else {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I32,\r\n false,\r\n module.createI32(i64_low(memoryOffset))\r\n );\r\n }\r\n\r\n // determine initial page size\r\n var numPages = this.memorySegments.length\r\n ? i64_low(i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0)))\r\n : 0;\r\n module.setMemory(\r\n numPages,\r\n this.options.isWasm64\r\n ? Module.MAX_MEMORY_WASM64\r\n : Module.MAX_MEMORY_WASM32,\r\n this.memorySegments,\r\n options.target,\r\n \"memory\"\r\n );\r\n\r\n // import memory if requested (default memory is named '0' by Binaryen)\r\n if (options.importMemory) module.addMemoryImport(\"0\", \"env\", \"memory\");\r\n\r\n // set up function table\r\n var functionTable = this.functionTable;\r\n var functionTableSize = functionTable.length;\r\n var functionTableExported = false;\r\n if (functionTableSize) {\r\n 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 // set up module exports\r\n for (let [name, moduleExport] of program.moduleLevelExports) {\r\n this.makeModuleExport(name, moduleExport.element);\r\n }\r\n\r\n // set up gc\r\n if (this.needsIterateRoots) compileIterateRoots(this);\r\n\r\n return module;\r\n }\r\n\r\n /** Applies the respective module export(s) for the specified element. */\r\n private makeModuleExport(name: string, element: Element, prefix: string = \"\"): void {\r\n\r\n // traverse members\r\n var members = element.members;\r\n if (members) {\r\n let subPrefix = prefix + name + (element.kind == ElementKind.CLASS\r\n ? INSTANCE_DELIMITER\r\n : STATIC_DELIMITER\r\n );\r\n if (element.kind == ElementKind.NAMESPACE) {\r\n for (let member of members.values()) {\r\n if (!member.is(CommonFlags.EXPORT)) continue;\r\n this.makeModuleExport(member.simpleName, member, subPrefix);\r\n }\r\n } else {\r\n for (let member of members.values()) {\r\n if (member.is(CommonFlags.PRIVATE)) continue;\r\n this.makeModuleExport(member.simpleName, member, subPrefix);\r\n }\r\n }\r\n }\r\n\r\n switch (element.kind) {\r\n\r\n // export global\r\n case ElementKind.GLOBAL: {\r\n let isConst = element.is(CommonFlags.CONST) || element.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n if (!isConst && !this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n let declaration = (element).declaration;\r\n if (declaration) {\r\n this.error(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n this.module.addGlobalExport(element.internalName, prefix + name);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUMVALUE: {\r\n if (!assert(element.parent).is(CommonFlags.CONST) && !this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n let declaration = (element).declaration;\r\n if (declaration) {\r\n this.error(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n this.module.addGlobalExport(element.internalName, prefix + name);\r\n }\r\n break;\r\n }\r\n\r\n // export function\r\n case ElementKind.FUNCTION: {\r\n let instance = element;\r\n let signature = instance.signature;\r\n if (signature.requiredParameters < signature.parameterTypes.length) {\r\n // utilize trampoline to fill in omitted arguments\r\n instance = this.ensureTrampoline(instance);\r\n this.ensureArgcSet();\r\n }\r\n if (instance.is(CommonFlags.COMPILED)) this.module.addFunctionExport(instance.internalName, prefix + name);\r\n break;\r\n }\r\n\r\n // export getter and setter\r\n case ElementKind.PROPERTY: {\r\n let getter = assert((element).getterPrototype);\r\n this.makeModuleExport(GETTER_PREFIX + name, getter, prefix);\r\n let setter = (element).setterPrototype;\r\n if (setter) this.makeModuleExport(SETTER_PREFIX + name, setter, prefix);\r\n break;\r\n }\r\n\r\n // export a getter and a setter\r\n case ElementKind.FIELD: {\r\n let module = this.module;\r\n let type = (element).type;\r\n let nativeType = type.toNativeType();\r\n let offset = (element).memoryOffset;\r\n let usizeType = this.options.usizeType;\r\n let nativeSizeType = this.options.nativeSizeType;\r\n\r\n // make a getter\r\n let getterName = prefix + GETTER_PREFIX + name;\r\n module.addFunction(\r\n getterName,\r\n this.ensureFunctionType(null, type, usizeType),\r\n null,\r\n module.createLoad(\r\n type.byteSize,\r\n type.is(TypeFlags.SIGNED),\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(getterName, getterName);\r\n\r\n // make a setter\r\n if (!element.is(CommonFlags.READONLY)) {\r\n let setterName = prefix + SETTER_PREFIX + name;\r\n module.addFunction(\r\n setterName,\r\n this.ensureFunctionType([ type ], Type.void, usizeType),\r\n null,\r\n module.createStore(\r\n type.byteSize,\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createGetLocal(1, nativeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(setterName, setterName);\r\n }\r\n break;\r\n }\r\n\r\n // skip prototype and export instances\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n let instanceName = name;\r\n if (instance.is(CommonFlags.GENERIC)) {\r\n let fullName = instance.internalName;\r\n instanceName += fullName.substring(fullName.lastIndexOf(\"<\"));\r\n }\r\n this.makeModuleExport(instanceName, instance, prefix);\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n let instanceName = name;\r\n if (instance.is(CommonFlags.GENERIC)) {\r\n let fullName = instance.internalName;\r\n instanceName += fullName.substring(fullName.lastIndexOf(\"<\"));\r\n }\r\n let ctor = instance.constructorInstance;\r\n if (ctor) this.makeModuleExport(instanceName + INSTANCE_DELIMITER + ctor.simpleName, ctor, prefix);\r\n this.makeModuleExport(instanceName, instance, prefix);\r\n }\r\n break;\r\n }\r\n\r\n // all possible members already handled above\r\n case ElementKind.ENUM:\r\n case ElementKind.CLASS:\r\n case ElementKind.NAMESPACE: break;\r\n\r\n default: assert(false);\r\n }\r\n }\r\n\r\n // sources\r\n\r\n /** Compiles a source by looking it up by path first. */\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var source = this.program.lookupSourceByPath(normalizedPathWithoutExtension);\r\n if (source) this.compileSource(source);\r\n else {\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n }\r\n\r\n /** Compiles a source. */\r\n compileSource(source: Source): void {\r\n if (source.is(CommonFlags.COMPILED)) return;\r\n source.set(CommonFlags.COMPILED);\r\n\r\n // compile top-level statements\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var startFunctionInstance = this.startFunctionInstance;\r\n var startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let statement = statements[i];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileClassDeclaration(statement, [], null);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: break;\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileEnumDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(statement, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileNamespaceDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: { // global, always compiled as initializers might have side effects\r\n let variableInit = this.compileVariableStatement(statement);\r\n if (variableInit) startFunctionBody.push(variableInit);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n if ((statement).normalizedPath != null) {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n }\r\n if (noTreeShaking || isEntry) {\r\n this.compileExportStatement(statement);\r\n }\r\n break;\r\n }\r\n default: { // otherwise a top-level statement that is part of the start function's body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = startFunctionInstance;\r\n startFunctionBody.push(this.compileStatement(statement));\r\n this.currentFunction = previousFunction;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // globals\r\n\r\n compileGlobalDeclaration(declaration: VariableDeclaration): Global | null {\r\n // look up the initialized program element\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.GLOBAL);\r\n if (!this.compileGlobal(element)) return null; // reports\r\n return element;\r\n }\r\n\r\n compileGlobal(global: Global): bool {\r\n if (global.is(CommonFlags.COMPILED)) return true;\r\n global.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n var declaration = global.declaration;\r\n var initExpr: ExpressionRef = 0;\r\n\r\n if (global.type == Type.void) { // type is void if not yet resolved or not annotated\r\n if (declaration) {\r\n\r\n // resolve now if annotated\r\n if (declaration.type) {\r\n let resolvedType = this.resolver.resolveType(declaration.type); // reports\r\n if (!resolvedType) return false;\r\n if (resolvedType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.type.range\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n\r\n // infer from initializer if not annotated\r\n } else if (declaration.initializer) { // infer type using void/NONE for literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.WRAP\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.initializer.range, this.currentType.toString(), \"\"\r\n );\r\n return false;\r\n }\r\n global.type = this.currentType;\r\n\r\n // must either be annotated or have an initializer\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n return false;\r\n }\r\n } else {\r\n assert(false); // must have a declaration if 'void' (and thus resolved later on)\r\n }\r\n }\r\n\r\n // ambient builtins like 'HEAP_BASE' need to be resolved but are added explicitly\r\n if (global.is(CommonFlags.AMBIENT) && global.hasDecorator(DecoratorFlags.BUILTIN)) return true;\r\n\r\n var nativeType = global.type.toNativeType();\r\n var isDeclaredConstant = global.is(CommonFlags.CONST) || global.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n\r\n // handle imports\r\n if (global.is(CommonFlags.AMBIENT)) {\r\n\r\n // constant global\r\n if (isDeclaredConstant || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n global.set(CommonFlags.MODULE_IMPORT);\r\n if (declaration) {\r\n mangleImportName(global, declaration, global.parent);\r\n } else {\r\n mangleImportName_moduleName = \"env\";\r\n mangleImportName_elementName = global.simpleName;\r\n }\r\n module.addGlobalImport(\r\n global.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n nativeType\r\n );\r\n global.set(CommonFlags.COMPILED);\r\n return true;\r\n\r\n // importing mutable globals is not supported in the MVP\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n assert(declaration).range\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n // the MVP does not yet support initializer expressions other than constant values (and constant\r\n // get_globals), hence such initializations must be performed in the start function for now.\r\n var initializeInStart = false;\r\n\r\n // evaluate initializer if present\r\n if (declaration !== null && declaration.initializer !== null) {\r\n if (!initExpr) {\r\n initExpr = this.compileExpression(\r\n declaration.initializer,\r\n global.type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n }\r\n\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (isDeclaredConstant) {\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n initializeInStart = true;\r\n }\r\n } else {\r\n initializeInStart = true;\r\n }\r\n }\r\n\r\n // explicitly inline if annotated\r\n if (global.hasDecorator(DecoratorFlags.INLINE)) {\r\n if (!initializeInStart) { // reported above\r\n assert(getExpressionId(initExpr) == ExpressionId.Const);\r\n let exprType = getExpressionType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(getConstValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return false;\r\n }\r\n }\r\n global.set(CommonFlags.INLINED); // inline the value from now on\r\n }\r\n }\r\n\r\n // initialize to zero if there's no initializer\r\n } else {\r\n initExpr = global.type.toNativeZero(module);\r\n }\r\n\r\n var internalName = global.internalName;\r\n\r\n if (initializeInStart) { // initialize to mutable zero and set the actual value in start\r\n module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(module));\r\n this.startFunctionBody.push(module.createSetGlobal(internalName, initExpr));\r\n\r\n } else { // compile normally\r\n module.addGlobal(internalName, nativeType, !isDeclaredConstant, initExpr);\r\n }\r\n return true;\r\n }\r\n\r\n // enums\r\n\r\n compileEnumDeclaration(declaration: EnumDeclaration): Enum | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(element)) return null;\r\n return element;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(CommonFlags.COMPILED)) return true;\r\n element.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n var previousValueIsMut = false;\r\n\r\n if (element.members) {\r\n for (let member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n let initInStart = false;\r\n let val = member;\r\n let valueDeclaration = val.declaration;\r\n val.set(CommonFlags.COMPILED);\r\n let initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(\r\n valueDeclaration.value,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.error(\r\n DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,\r\n valueDeclaration.value.range\r\n );\r\n initInStart = true;\r\n }\r\n } else {\r\n initInStart = true;\r\n }\r\n }\r\n } else if (previousValue == null) {\r\n initExpr = module.createI32(0);\r\n } else {\r\n if (previousValueIsMut) {\r\n this.error(\r\n DiagnosticCode.Enum_member_must_have_initializer,\r\n valueDeclaration.range\r\n );\r\n }\r\n initExpr = module.createBinary(BinaryOp.AddI32,\r\n module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n module.createI32(1)\r\n );\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n }\r\n if (initInStart) {\r\n module.addGlobal(val.internalName, NativeType.I32, true, module.createI32(0));\r\n this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr));\r\n previousValueIsMut = true;\r\n } else {\r\n module.addGlobal(val.internalName, NativeType.I32, !element.is(CommonFlags.CONST), initExpr);\r\n previousValueIsMut = false;\r\n }\r\n previousValue = val;\r\n }\r\n }\r\n this.currentEnum = null;\r\n return true;\r\n }\r\n\r\n // functions\r\n\r\n /** Compiles a top-level function given its declaration. */\r\n compileFunctionDeclaration(\r\n declaration: FunctionDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n null, // no outer scope (is top level)\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n /** Resolves the specified type arguments prior to compiling the resulting function instance. */\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n outerScope: Flow | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!instance) return null;\r\n instance.outerScope = outerScope;\r\n if (!this.compileFunction(instance)) return null; // reports\r\n return instance;\r\n }\r\n\r\n /** Either reuses or creates the function type matching the specified signature. */\r\n ensureFunctionType(\r\n parameterTypes: Type[] | null,\r\n returnType: Type,\r\n thisType: Type | null = null\r\n ): FunctionTypeRef {\r\n var numParameters = parameterTypes ? parameterTypes.length : 0;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n if (parameterTypes) {\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = parameterTypes[i].toNativeType();\r\n }\r\n }\r\n var resultType = returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n let name = Signature.makeSignatureString(parameterTypes, returnType, thisType);\r\n typeRef = module.addFunctionType(name, resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n assert(!(instance.is(CommonFlags.AMBIENT) && instance.hasDecorator(DecoratorFlags.BUILTIN)));\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n // check that modifiers are matching\r\n var declaration = instance.prototype.declaration;\r\n var body = declaration.body;\r\n if (body) {\r\n if (instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n if (!instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n declaration.name.range\r\n );\r\n }\r\n }\r\n\r\n var ref: FunctionRef;\r\n var signature = instance.signature;\r\n var typeRef = this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n if (body) {\r\n let isConstructor = instance.is(CommonFlags.CONSTRUCTOR);\r\n let returnType = instance.signature.returnType;\r\n\r\n // compile body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n let flow = instance.flow;\r\n let stmt: ExpressionRef;\r\n if (body.kind == NodeKind.EXPRESSION) { // () => expression\r\n assert(!instance.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.GET | CommonFlags.SET | CommonFlags.MAIN));\r\n assert(instance.is(CommonFlags.ARROW));\r\n stmt = this.compileExpression(\r\n (body).expression,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n flow.set(FlowFlags.RETURNS);\r\n if (!flow.canOverflow(stmt, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n flow.finalize();\r\n } else {\r\n assert(body.kind == NodeKind.BLOCK);\r\n let stmts = this.compileStatements((body).statements);\r\n if (instance.is(CommonFlags.MAIN)) {\r\n module.addGlobal(\"~started\", NativeType.I32, true, module.createI32(0));\r\n stmts.unshift(\r\n module.createIf(\r\n module.createUnary(\r\n UnaryOp.EqzI32,\r\n module.createGetGlobal(\"~started\", NativeType.I32)\r\n ),\r\n module.createBlock(null, [\r\n module.createCall(\"start\", null, NativeType.None),\r\n module.createSetGlobal(\"~started\", module.createI32(1))\r\n ])\r\n )\r\n );\r\n }\r\n flow.finalize();\r\n if (isConstructor) {\r\n let nativeSizeType = this.options.nativeSizeType;\r\n assert(instance.is(CommonFlags.INSTANCE));\r\n\r\n // implicitly return `this` if the constructor doesn't always return on its own\r\n if (!flow.is(FlowFlags.RETURNS)) {\r\n\r\n // if all branches are guaranteed to allocate, skip the final conditional allocation\r\n if (flow.is(FlowFlags.ALLOCATES)) {\r\n stmts.push(module.createGetLocal(0, nativeSizeType));\r\n\r\n // if not all branches are guaranteed to allocate, also append a conditional allocation\r\n } else {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n stmts.push(module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, declaration.name)\r\n ));\r\n }\r\n }\r\n\r\n // make sure all branches return\r\n } else if (returnType != Type.void && !flow.is(FlowFlags.RETURNS)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n }\r\n stmt = !stmts.length\r\n ? module.createNop()\r\n : stmts.length == 1\r\n ? stmts[0]\r\n : module.createBlock(null, stmts, returnType.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n\r\n // create the function\r\n ref = module.addFunction(\r\n instance.internalName,\r\n typeRef,\r\n typesToNativeTypes(instance.additionalLocals),\r\n stmt\r\n );\r\n\r\n // concrete functions cannot have an annotated external name\r\n if (instance.hasDecorator(DecoratorFlags.EXTERNAL)) {\r\n let decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n }\r\n\r\n } else {\r\n instance.set(CommonFlags.MODULE_IMPORT);\r\n mangleImportName(instance, declaration, instance.prototype.parent); // TODO: check for duplicates\r\n\r\n // create the function import\r\n ref = module.addFunctionImport(\r\n instance.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n typeRef\r\n );\r\n }\r\n\r\n instance.finalize(module, ref);\r\n return true;\r\n }\r\n\r\n // namespaces\r\n\r\n compileNamespaceDeclaration(declaration: NamespaceDeclaration): void {\r\n var members = declaration.members;\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n switch (member.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n let variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n compileNamespace(ns: Namespace): void {\r\n if (!ns.members) return;\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let element of ns.members.values()) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking || (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n if (element.hasDecorator(DecoratorFlags.BUILTIN)) break;\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var fileLevelExports = this.program.fileLevelExports;\r\n var members = statement.members;\r\n if (!members) return; // filespace\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n let element = fileLevelExports.get(\r\n statement.range.source.internalPath + PATH_DELIMITER + member.externalName.text\r\n );\r\n if (!element) continue; // reported in Program#initialize\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (!(element).is(CommonFlags.GENERIC)) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // classes\r\n\r\n compileClassDeclaration(\r\n declaration: ClassDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): void {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.compileClassUsingTypeArguments(\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n declaration\r\n );\r\n }\r\n\r\n compileClassUsingTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var instance = this.resolver.resolveClassInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode || prototype.declaration\r\n );\r\n if (!instance) return;\r\n this.compileClass(instance);\r\n }\r\n\r\n compileClass(instance: Class): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n var staticMembers = instance.prototype.members;\r\n if (staticMembers) {\r\n for (let element of staticMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [], null, null,\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], null, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], null, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n var ctorInstance = instance.constructorInstance;\r\n if (ctorInstance) this.compileFunction(ctorInstance);\r\n var instanceMembers = instance.members;\r\n if (instanceMembers) {\r\n for (let element of instanceMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n instance.contextualTypeArguments,\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n element.set(CommonFlags.COMPILED);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], instance.contextualTypeArguments, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], instance.contextualTypeArguments, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n compileInterfaceDeclaration(\r\n declaration: InterfaceDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n // TODO\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n }\r\n\r\n // memory\r\n\r\n /** Adds a static memory segment with the specified data. */\r\n addMemorySegment(buffer: Uint8Array, alignment: i32 = 8): MemorySegment {\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n }\r\n\r\n // function table\r\n\r\n /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(CommonFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var functionTable = this.functionTable;\r\n var index = functionTable.length;\r\n if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) {\r\n // insert the trampoline if the function has optional parameters\r\n func = this.ensureTrampoline(func);\r\n }\r\n functionTable.push(func);\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 = module.precomputeExpression(condExpr);\r\n if (getExpressionId(condPre) == ExpressionId.Const) {\r\n assert(getExpressionType(condPre) == NativeType.I32);\r\n if (getConstValueI32(condPre) != 0) alwaysTrue = true;\r\n // TODO: could skip compilation if the condition is always false here, but beware that the\r\n // initializer could still declare new 'var's that are used later on.\r\n }\r\n // recompile to original\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n } else {\r\n // omitted condition is always true\r\n condExpr = module.createI32(1);\r\n alwaysTrue = true;\r\n }\r\n var incrExpr = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : 0;\r\n var 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 = module.precomputeExpression(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileStatement(ifTrue)\r\n : ifFalse\r\n ? this.compileStatement(ifFalse)\r\n : module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Each arm initiates a branch\r\n var parentFlow = currentFunction.flow;\r\n var ifTrueFlow = parentFlow.fork();\r\n currentFunction.flow = ifTrueFlow;\r\n var ifTrueExpr = this.compileStatement(ifTrue);\r\n currentFunction.flow = ifTrueFlow.free();\r\n\r\n var ifFalseExpr: ExpressionRef = 0;\r\n if (ifFalse) {\r\n let ifFalseFlow = parentFlow.fork();\r\n currentFunction.flow = ifFalseFlow;\r\n ifFalseExpr = this.compileStatement(ifFalse);\r\n currentFunction.flow = ifFalseFlow.free();\r\n parentFlow.inheritMutual(ifTrueFlow, ifFalseFlow);\r\n } else {\r\n parentFlow.inheritConditional(ifTrueFlow);\r\n }\r\n return module.createIf(condExpr, ifTrueExpr, ifFalseExpr);\r\n }\r\n\r\n compileReturnStatement(statement: ReturnStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var expr: ExpressionRef = 0;\r\n var flow = currentFunction.flow;\r\n\r\n // Remember that this flow returns\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n if (statement.value) {\r\n let returnType = flow.returnType;\r\n if (returnType == Type.void) {\r\n this.compileExpressionRetainType(statement.value, returnType, WrapMode.NONE);\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n statement.value.range, this.currentType.toString(), returnType.toString()\r\n );\r\n this.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n expr = this.compileExpression(\r\n statement.value,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n currentFunction.is(CommonFlags.MODULE_EXPORT)\r\n ? WrapMode.WRAP\r\n : WrapMode.NONE\r\n );\r\n\r\n // Remember whether returning a properly wrapped value\r\n if (!flow.canOverflow(expr, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n }\r\n\r\n // If the last statement anyway, make it the block's return value\r\n if (isLastStatement(statement)) return expr ? expr : module.createNop();\r\n\r\n // When inlining, break to the end of the inlined function's block (no need to wrap)\r\n return flow.is(FlowFlags.INLINE_CONTEXT)\r\n ? module.createBreak(assert(flow.returnLabel), 0, expr)\r\n : module.createReturn(expr);\r\n }\r\n\r\n compileSwitchStatement(statement: SwitchStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n var cases = statement.cases;\r\n var numCases = cases.length;\r\n if (!numCases) {\r\n return this.compileExpression(statement.condition, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n\r\n // Everything within a switch uses the same break context\r\n var context = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n\r\n // introduce a local for evaluating the condition (exactly once)\r\n var tempLocal = currentFunction.getTempLocal(Type.u32, false);\r\n var tempLocalIndex = tempLocal.index;\r\n\r\n // Prepend initializer to inner block. Does not initiate a new branch, yet.\r\n var breaks = new Array(1 + numCases);\r\n breaks[0] = module.createSetLocal( // initializer\r\n tempLocalIndex,\r\n this.compileExpression(statement.condition, Type.u32, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n );\r\n\r\n // make one br_if per (possibly dynamic) labeled case (binaryen optimizes to br_table where possible)\r\n var breakIndex = 1;\r\n var defaultIndex = -1;\r\n for (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let label = case_.label;\r\n if (label) {\r\n breaks[breakIndex++] = module.createBreak(\"case\" + i.toString(10) + \"|\" + context,\r\n module.createBinary(BinaryOp.EqI32,\r\n module.createGetLocal(tempLocalIndex, NativeType.I32),\r\n this.compileExpression(label, Type.u32, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n )\r\n );\r\n } else {\r\n defaultIndex = i;\r\n }\r\n }\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n\r\n // otherwise br to default respectively out of the switch if there is no default case\r\n breaks[breakIndex] = module.createBreak((defaultIndex >= 0\r\n ? \"case\" + defaultIndex.toString(10)\r\n : \"break\"\r\n ) + \"|\" + context);\r\n\r\n // nest blocks in order\r\n var currentBlock = module.createBlock(\"case0|\" + context, breaks, NativeType.None);\r\n var alwaysReturns = true;\r\n var alwaysReturnsWrapped = true;\r\n var alwaysThrows = true;\r\n var alwaysAllocates = true;\r\n for (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let statements = case_.statements;\r\n let numStatements = statements.length;\r\n\r\n // Each switch case initiates a new branch\r\n let flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n let breakLabel = \"break|\" + context;\r\n flow.breakLabel = breakLabel;\r\n\r\n let isLast = i == numCases - 1;\r\n let nextLabel = isLast ? breakLabel : \"case\" + (i + 1).toString(10) + \"|\" + context;\r\n let stmts = new Array(1 + numStatements);\r\n stmts[0] = currentBlock;\r\n let count = 1;\r\n let terminated = false;\r\n for (let j = 0; j < numStatements; ++j) {\r\n let stmt = this.compileStatement(statements[j]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n stmts[count++] = stmt;\r\n if (flow.isAny(FlowFlags.ANY_TERMINATING)) {\r\n terminated = true;\r\n break;\r\n }\r\n }\r\n }\r\n stmts.length = count;\r\n if (terminated || isLast) {\r\n if (!flow.is(FlowFlags.RETURNS)) alwaysReturns = false;\r\n if (!flow.is(FlowFlags.RETURNS_WRAPPED)) alwaysReturnsWrapped = false;\r\n if (!flow.is(FlowFlags.THROWS)) alwaysThrows = false;\r\n if (!flow.is(FlowFlags.ALLOCATES)) alwaysAllocates = false;\r\n }\r\n\r\n // Switch back to the parent flow\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS\r\n );\r\n currentFunction.flow = flow.free();\r\n currentBlock = module.createBlock(nextLabel, stmts, NativeType.None); // must be a labeled block\r\n }\r\n currentFunction.leaveBreakContext();\r\n\r\n // If the switch has a default (guaranteed to handle any value), propagate common flags\r\n if (defaultIndex >= 0) {\r\n if (alwaysReturns) parentFlow.set(FlowFlags.RETURNS);\r\n if (alwaysReturnsWrapped) parentFlow.set(FlowFlags.RETURNS_WRAPPED);\r\n if (alwaysThrows) parentFlow.set(FlowFlags.THROWS);\r\n if (alwaysAllocates) parentFlow.set(FlowFlags.ALLOCATES);\r\n }\r\n return currentBlock;\r\n }\r\n\r\n compileThrowStatement(statement: ThrowStatement): ExpressionRef {\r\n var flow = this.currentFunction.flow;\r\n\r\n // Remember that this branch throws\r\n flow.set(FlowFlags.THROWS);\r\n\r\n // FIXME: without try-catch it is safe to assume RETURNS as well for now\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n // TODO: requires exception-handling spec.\r\n return compileAbort(this, null, statement);\r\n }\r\n\r\n compileTryStatement(statement: TryStatement): ExpressionRef {\r\n // TODO\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n /**\r\n * Compiles a variable statement. Returns `0` if an initializer is not\r\n * necessary.\r\n */\r\n compileVariableStatement(statement: VariableStatement, isKnownGlobal: bool = false): ExpressionRef {\r\n var program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var declarations = statement.declarations;\r\n var numDeclarations = declarations.length;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n currentFunction == this.startFunctionInstance &&\r\n statement.parent && statement.parent.kind == NodeKind.SOURCE\r\n )) {\r\n // NOTE that the above condition also covers top-level variables declared with 'let', even\r\n // though such variables could also become start function locals if, and only if, not used\r\n // within any function declared in the same source, which is unknown at this point. the only\r\n // efficient way to deal with this would be to keep track of all occasions it is used and\r\n // replace these instructions afterwards, dynamically. (TOOD: what about a Binaryen pass?)\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n this.compileGlobalDeclaration(declarations[i]);\r\n }\r\n return 0;\r\n }\r\n\r\n // other variables become locals\r\n var initializers = new Array();\r\n var flow = this.currentFunction.flow;\r\n var resolver = this.resolver;\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n let declaration = declarations[i];\r\n let name = declaration.name.text;\r\n let type: Type | null = null;\r\n let initExpr: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = resolver.resolveType( // reports\r\n declaration.type,\r\n flow.contextualTypeArguments\r\n );\r\n if (!type) continue;\r\n if (declaration.initializer) {\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n } else if (declaration.initializer) { // infer type using void/NONE for proper literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.NONE\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.range, this.currentType.toString(), \"\"\r\n );\r\n continue;\r\n }\r\n type = this.currentType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n continue;\r\n }\r\n let isInlined = false;\r\n if (declaration.is(CommonFlags.CONST)) {\r\n if (initExpr) {\r\n initExpr = this.module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) == ExpressionId.Const) {\r\n let local = new Local(program, name, -1, type);\r\n switch (getExpressionType(initExpr)) {\r\n case NativeType.I32: {\r\n local = local.withConstantIntegerValue(\r\n i64_new(\r\n getConstValueI32(initExpr),\r\n 0\r\n )\r\n );\r\n break;\r\n }\r\n case NativeType.I64: {\r\n local = local.withConstantIntegerValue(\r\n i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n )\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n local = local.withConstantFloatValue(getConstValueF32(initExpr));\r\n break;\r\n }\r\n case NativeType.F64: {\r\n local = local.withConstantFloatValue(getConstValueF64(initExpr));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n // Create a virtual local that doesn't actually exist in WebAssembly\r\n let scopedLocals = currentFunction.flow.scopedLocals;\r\n if (!scopedLocals) currentFunction.flow.scopedLocals = scopedLocals = new Map();\r\n else if (scopedLocals.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n scopedLocals.set(name, local);\r\n isInlined = true;\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n declaration.range\r\n );\r\n }\r\n }\r\n if (!isInlined) {\r\n let local: Local;\r\n if (\r\n declaration.isAny(CommonFlags.LET | CommonFlags.CONST) ||\r\n flow.is(FlowFlags.INLINE_CONTEXT)\r\n ) { // here: not top-level\r\n local = flow.addScopedLocal(type, name, false, declaration); // reports\r\n } else {\r\n local = currentFunction.addLocal(type, name, declaration); // reports\r\n }\r\n if (initExpr) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, initExpr));\r\n if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, !flow.canOverflow(initExpr, type));\r\n }\r\n } else if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, true); // zero\r\n }\r\n }\r\n }\r\n return initializers.length // we can unwrap these here because the\r\n ? initializers.length == 1 // source didn't tell us exactly what to do\r\n ? initializers[0]\r\n : this.module.createBlock(null, initializers, NativeType.None)\r\n : 0;\r\n }\r\n\r\n compileVoidStatement(statement: VoidStatement): ExpressionRef {\r\n return this.compileExpression(statement.expression, Type.void, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n compileWhileStatement(statement: WhileStatement): ExpressionRef {\r\n var module = this.module;\r\n\r\n // The condition does not yet initialize a branch\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary loops if the condition is constant\r\n let condExprPrecomp = module.precomputeExpression(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n if (!getConstValueI32(condExprPrecomp)) return module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Statements initiate a new branch with its own break context\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n var breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysTrue = false; // TODO\r\n var 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 // monkey-patch for converting built-in floats to f32 implicitly\r\n if (!(element.hasDecorator(DecoratorFlags.BUILTIN) && contextualType == Type.f32)) {\r\n return this.module.createF64((element).constantFloatValue);\r\n }\r\n // otherwise fall-through: basically precomputes f32.demote/f64 of NaN / Infinity\r\n this.currentType = Type.f32;\r\n }\r\n case TypeKind.F32: {\r\n return this.module.createF32((element).constantFloatValue);\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n\r\n compileExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n this.currentType = contextualType;\r\n\r\n var expr: ExpressionRef;\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n expr = this.compileAssertionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.BINARY: {\r\n expr = this.compileBinaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.CALL: {\r\n expr = this.compileCallExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.COMMA: {\r\n expr = this.compileCommaExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n expr = this.compileElementAccessExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.FUNCTION: {\r\n expr = this.compileFunctionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.FALSE:\r\n case NodeKind.NULL:\r\n case NodeKind.THIS:\r\n case NodeKind.SUPER:\r\n case NodeKind.TRUE: {\r\n expr = this.compileIdentifierExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.INSTANCEOF: {\r\n expr = this.compileInstanceOfExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.LITERAL: {\r\n expr = this.compileLiteralExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.NEW: {\r\n expr = this.compileNewExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PARENTHESIZED: {\r\n expr = this.compileParenthesizedExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n expr = this.compilePropertyAccessExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.TERNARY: {\r\n expr = this.compileTernaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.UNARYPOSTFIX: {\r\n expr = this.compileUnaryPostfixExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.UNARYPREFIX: {\r\n expr = this.compileUnaryPrefixExpression(expression, contextualType);\r\n break;\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n\r\n var currentType = this.currentType;\r\n if (conversionKind != ConversionKind.NONE && currentType != contextualType) {\r\n expr = this.convertExpression(expr, currentType, contextualType, conversionKind, wrapMode, expression);\r\n this.currentType = contextualType;\r\n } else if (wrapMode == WrapMode.WRAP) {\r\n expr = this.ensureSmallIntegerWrap(expr, currentType);\r\n }\r\n\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(\r\n expression: Expression,\r\n contextualType: Type,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.compileExpression(\r\n expression,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n wrapMode\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.module.precomputeExpression(\r\n this.compileExpression(expression, contextualType, conversionKind, wrapMode)\r\n );\r\n }\r\n\r\n convertExpression(\r\n expr: ExpressionRef,\r\n fromType: Type,\r\n toType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n assert(conversionKind != ConversionKind.NONE);\r\n var module = this.module;\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.VOID) {\r\n assert(toType.kind != TypeKind.VOID); // convertExpression should not be called with void -> void\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) return module.createDrop(expr);\r\n\r\n if (!fromType.isAssignableTo(toType)) {\r\n if (conversionKind == ConversionKind.IMPLICIT) {\r\n this.error(\r\n DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (fromType.is(TypeFlags.FLOAT)) {\r\n\r\n // float to float\r\n if (toType.is(TypeFlags.FLOAT)) {\r\n if (fromType.kind == TypeKind.F32) {\r\n\r\n // f32 to f64\r\n if (toType.kind == TypeKind.F64) {\r\n expr = module.createUnary(UnaryOp.PromoteF32, expr);\r\n }\r\n\r\n // otherwise f32 to f32\r\n\r\n // f64 to f32\r\n } else if (toType.kind == TypeKind.F32) {\r\n expr = module.createUnary(UnaryOp.DemoteF64, expr);\r\n }\r\n\r\n // otherwise f64 to f64\r\n\r\n // float to int\r\n } else if (toType.is(TypeFlags.INTEGER)) {\r\n\r\n // f32 to int\r\n if (fromType.kind == TypeKind.F32) {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU32, expr);\r\n }\r\n }\r\n\r\n // f64 to int\r\n } else {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU32, expr);\r\n }\r\n }\r\n }\r\n\r\n // float to void\r\n } else {\r\n assert(toType.flags == TypeFlags.NONE, \"void type expected\");\r\n expr = module.createDrop(expr);\r\n }\r\n\r\n // int to float\r\n } else if (fromType.is(TypeFlags.INTEGER) && toType.is(TypeFlags.FLOAT)) {\r\n\r\n // int to f32\r\n if (toType.kind == TypeKind.F32) {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF32\r\n : UnaryOp.ConvertU64ToF32,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF32\r\n : UnaryOp.ConvertU32ToF32,\r\n expr\r\n );\r\n }\r\n\r\n // int to f64\r\n } else {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF64\r\n : UnaryOp.ConvertU64ToF64,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF64\r\n : UnaryOp.ConvertU32ToF64,\r\n expr\r\n );\r\n }\r\n }\r\n\r\n // int to int\r\n } else {\r\n // i64 to ...\r\n if (fromType.is(TypeFlags.LONG)) {\r\n\r\n // i64 to i32 or smaller\r\n if (!toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits\r\n }\r\n\r\n // i32 or smaller to i64\r\n } else if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n 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.currentElementExpression) { // indexed access\r\n let isUnchecked = currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, (target).internalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (target).internalName\r\n );\r\n }\r\n return this.module.createUnreachable();\r\n }\r\n assert(indexedSet.signature.parameterTypes.length == 2); // parser must guarantee this\r\n targetType = indexedSet.signature.parameterTypes[1]; // 2nd parameter is the element\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n // compile the value and do the assignment\r\n assert(targetType != Type.void);\r\n var valueExpr = this.compileExpression(valueExpression, targetType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n return this.compileAssignmentWithValue(\r\n expression,\r\n valueExpr,\r\n contextualType != Type.void\r\n );\r\n }\r\n\r\n compileAssignmentWithValue(\r\n expression: Expression,\r\n valueWithCorrectType: ExpressionRef,\r\n tee: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var target = this.resolver.resolveExpression(expression, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = this.currentFunction.flow;\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped((target).index, !flow.canOverflow(valueWithCorrectType, type));\r\n }\r\n return tee\r\n ? module.createTeeLocal((target).index, valueWithCorrectType)\r\n : module.createSetLocal((target).index, valueWithCorrectType);\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) return module.createUnreachable();\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range,\r\n target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type); // guaranteed\r\n if (tee) {\r\n let nativeType = type.toNativeType();\r\n let internalName = target.internalName;\r\n return module.createBlock(null, [ // emulated teeGlobal\r\n module.createSetGlobal(internalName, valueWithCorrectType),\r\n module.createGetGlobal(internalName, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createSetGlobal(target.internalName, valueWithCorrectType);\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n const declaration = (target).declaration;\r\n if (\r\n (target).is(CommonFlags.READONLY) &&\r\n !(\r\n this.currentFunction.is(CommonFlags.CONSTRUCTOR) ||\r\n declaration == null ||\r\n declaration.initializer != null\r\n )\r\n ) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (target).internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let type = (target).type;\r\n this.currentType = tee ? type : Type.void;\r\n let nativeType = type.toNativeType();\r\n if (type.kind == TypeKind.BOOL) {\r\n // make sure bools are wrapped (usually are) when storing as 8 bits\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type);\r\n }\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let flow = currentFunction.flow;\r\n let tempLocal = currentFunction.getAndFreeTempLocal(\r\n type,\r\n !flow.canOverflow(valueWithCorrectType, type)\r\n );\r\n let tempLocalIndex = tempLocal.index;\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n 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.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n return this.makeCallDirect(setterInstance, [ thisExpr, valueWithCorrectType ]);\r\n } else {\r\n return this.makeCallDirect(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n\r\n // otherwise call the setter first, then the getter\r\n let getterPrototype = (target).getterPrototype;\r\n assert(getterPrototype != null); // must have one if there is a setter\r\n let getterInstance = this.resolver.resolveFunction(getterPrototype, null);\r\n if (!getterInstance) return module.createUnreachable();\r\n let returnType = getterInstance.signature.returnType;\r\n let nativeReturnType = returnType.toNativeType();\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(returnType, false);\r\n let tempLocalIndex = tempLocal.index;\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ // set and remember the target\r\n module.createTeeLocal(tempLocalIndex, thisExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [ // get from remembered target\r\n module.createGetLocal(tempLocalIndex, nativeReturnType)\r\n ])\r\n ], nativeReturnType);\r\n } else {\r\n // note that this must be performed here because `resolved` is shared\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCallDirect(getterInstance)\r\n ], nativeReturnType);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, target.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.resolver.currentElementExpression;\r\n if (elementExpression) {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, target.internalName\r\n );\r\n this.currentType = tee ? indexedGet.signature.returnType : Type.void;\r\n return module.createUnreachable();\r\n }\r\n let targetType = (target).type;\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let elementExpr = this.compileExpression(\r\n elementExpression,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let tempLocalTarget = currentFunction.getTempLocal(targetType, false);\r\n let tempLocalElement = currentFunction.getAndFreeTempLocal(this.currentType, false);\r\n let returnType = indexedGet.signature.returnType;\r\n this.currentFunction.freeTempLocal(tempLocalTarget);\r\n return module.createBlock(null, [\r\n this.makeCallDirect(indexedSet, [\r\n module.createTeeLocal(tempLocalTarget.index, thisExpr),\r\n module.createTeeLocal(tempLocalElement.index, elementExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(indexedGet, [\r\n module.createGetLocal(tempLocalTarget.index, tempLocalTarget.type.toNativeType()),\r\n module.createGetLocal(tempLocalElement.index, tempLocalElement.type.toNativeType())\r\n ])\r\n ], returnType.toNativeType());\r\n } else {\r\n return this.makeCallDirect(indexedSet, [\r\n thisExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n }\r\n // fall-through\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var target = this.resolver.resolveExpression(expression.expression, currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n var signature: Signature | null;\r\n var indexArg: ExpressionRef;\r\n switch (target.kind) {\r\n\r\n // direct call: concrete function\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let prototype = target;\r\n let typeArguments = expression.typeArguments;\r\n\r\n // builtins handle present respectively omitted type arguments on their own\r\n if (prototype.hasDecorator(DecoratorFlags.BUILTIN)) {\r\n return this.compileCallExpressionBuiltin(prototype, expression, contextualType);\r\n }\r\n\r\n let instance: Function | null = null;\r\n\r\n // resolve generic call if type arguments have been provided\r\n if (typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.expression.range, prototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n instance = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n\r\n // infer generic call if type arguments have been omitted\r\n } else if (prototype.is(CommonFlags.GENERIC)) {\r\n let inferredTypes = new Map();\r\n let typeParameters = assert(prototype.declaration.typeParameters);\r\n let numTypeParameters = typeParameters.length;\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n inferredTypes.set(typeParameters[i].name.text, null);\r\n }\r\n // let numInferred = 0;\r\n let parameterTypes = prototype.declaration.signature.parameters;\r\n let numParameterTypes = parameterTypes.length;\r\n let argumentExpressions = expression.arguments;\r\n let numArguments = argumentExpressions.length;\r\n let argumentExprs = new Array(numArguments);\r\n for (let i = 0; i < numParameterTypes; ++i) {\r\n let typeNode = parameterTypes[i].type;\r\n let name = typeNode.kind == NodeKind.TYPE ? (typeNode).name.text : null;\r\n let argumentExpression = i < numArguments\r\n ? argumentExpressions[i]\r\n : prototype.declaration.signature.parameters[i].initializer;\r\n if (!argumentExpression) { // missing initializer -> too few arguments\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n expression.range, numParameterTypes.toString(10), numArguments.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (name !== null && inferredTypes.has(name)) {\r\n let inferredType = inferredTypes.get(name);\r\n if (inferredType) {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, inferredType, WrapMode.NONE);\r\n let commonType: Type | null;\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, true))) {\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, false))) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n parameterTypes[i].type.range, this.currentType.toString(), inferredType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n inferredType = commonType;\r\n } else {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, Type.i32, WrapMode.NONE);\r\n inferredType = this.currentType;\r\n // ++numInferred;\r\n }\r\n inferredTypes.set(name, inferredType);\r\n } else {\r\n let concreteType = this.resolver.resolveType(\r\n parameterTypes[i].type,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!concreteType) return module.createUnreachable();\r\n argumentExprs[i] = this.compileExpression(\r\n argumentExpression,\r\n concreteType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n let resolvedTypeArguments = new Array(numTypeParameters);\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n let inferredType = assert(inferredTypes.get(typeParameters[i].name.text)); // TODO\r\n resolvedTypeArguments[i] = inferredType;\r\n }\r\n instance = this.resolver.resolveFunction(\r\n prototype,\r\n resolvedTypeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n return this.makeCallDirect(instance, argumentExprs);\r\n // TODO: this skips inlining because inlining requires compiling its temporary locals in\r\n // the scope of the inlined flow. might need another mechanism to lock temp. locals early,\r\n // so inlining can be performed in `makeCallDirect` instead?\r\n\r\n // otherwise resolve the non-generic call as usual\r\n } else {\r\n instance = this.resolver.resolveFunction(\r\n prototype,\r\n null,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n }\r\n if (!instance) return this.module.createUnreachable();\r\n\r\n // compile 'this' expression if an instance method\r\n let thisExpr: ExpressionRef = 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n thisExpr = this.compileExpressionRetainType(\r\n assert(this.resolver.currentThisExpression),\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n return this.compileCallDirect(\r\n instance,\r\n expression.arguments,\r\n expression,\r\n thisExpr,\r\n instance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n // indirect call: index argument with signature (non-generic, can't be inlined)\r\n case ElementKind.LOCAL: {\r\n if (signature = (target).type.signatureReference) {\r\n 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.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n indexArg = module.createLoad(\r\n 4,\r\n false,\r\n thisExpr,\r\n NativeType.I32,\r\n (target).memoryOffset\r\n );\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (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 if (this.currentInlineFunctions.includes(instance)) {\r\n this.warning(\r\n DiagnosticCode.Function_0_cannot_be_inlined_into_itself,\r\n reportNode.range, instance.internalName\r\n );\r\n } else {\r\n this.currentInlineFunctions.push(instance);\r\n let expr = this.compileCallInlineUnchecked(instance, argumentExpressions, reportNode, thisArg);\r\n this.currentInlineFunctions.pop();\r\n return expr;\r\n }\r\n }\r\n\r\n // Otherwise compile to just a call\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallDirect(instance, operands);\r\n }\r\n\r\n // Depends on being pre-checked in compileCallDirect\r\n private compileCallInlineUnchecked(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n var declaration = instance.prototype.declaration;\r\n\r\n // Create an empty child flow with its own scope and mark it for inlining\r\n var previousFlow = currentFunction.flow;\r\n var returnLabel = instance.internalName + \"|inlined.\" + (instance.nextInlineId++).toString(10);\r\n var returnType = instance.signature.returnType;\r\n var flow = Flow.create(currentFunction);\r\n flow.set(FlowFlags.INLINE_CONTEXT);\r\n flow.returnLabel = returnLabel;\r\n flow.returnType = returnType;\r\n flow.contextualTypeArguments = instance.contextualTypeArguments;\r\n\r\n // Convert provided call arguments to temporary locals. It is important that these are compiled\r\n // here, with their respective locals being blocked. There is no 'makeCallInline'.\r\n var body = [];\r\n if (thisArg) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n if (getExpressionId(thisArg) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(thisArg),\r\n (parent).type,\r\n \"this\"\r\n );\r\n } else {\r\n let thisLocal = flow.addScopedLocal((parent).type, \"this\", false);\r\n body.push(\r\n module.createSetLocal(thisLocal.index, thisArg)\r\n );\r\n }\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i) {\r\n let paramExpr = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(paramExpr) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(paramExpr),\r\n parameterTypes[i],\r\n signature.getParameterName(i)\r\n );\r\n // inherits wrap status\r\n } else {\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(paramExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, paramExpr)\r\n );\r\n }\r\n }\r\n\r\n // Compile optional parameter initializers in the scope of the inlined flow\r\n currentFunction.flow = flow;\r\n var numParameters = signature.parameterTypes.length;\r\n for (let i = numArguments; i < numParameters; ++i) {\r\n let initExpr = this.compileExpression(\r\n assert(declaration.signature.parameters[i].initializer),\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(initExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, initExpr)\r\n );\r\n }\r\n\r\n // Compile the called function's body in the scope of the inlined flow\r\n var bodyStatement = assert(declaration.body);\r\n if (bodyStatement.kind == NodeKind.BLOCK) {\r\n let statements = (bodyStatement).statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let stmt = this.compileStatement(statements[i]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n body.push(stmt);\r\n if (flow.isAny(FlowFlags.ANY_TERMINATING)) break;\r\n }\r\n }\r\n } else {\r\n body.push(this.compileStatement(bodyStatement));\r\n }\r\n\r\n // Free any new scoped locals and reset to the original flow\r\n var scopedLocals = flow.scopedLocals;\r\n if (scopedLocals) {\r\n for (let scopedLocal of scopedLocals.values()) {\r\n if (scopedLocal.is(CommonFlags.SCOPED)) { // otherwise an alias\r\n currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n }\r\n flow.scopedLocals = null;\r\n }\r\n flow.finalize();\r\n this.currentFunction.flow = previousFlow;\r\n this.currentType = returnType;\r\n\r\n // Check that all branches are terminated\r\n if (returnType != Type.void && !flow.isAny(FlowFlags.ANY_TERMINATING)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n return module.createBlock(returnLabel, body, returnType.toNativeType());\r\n }\r\n\r\n /** Gets the trampoline for the specified function. */\r\n ensureTrampoline(original: Function): Function {\r\n // A trampoline is a function that takes a fixed amount of operands with some of them possibly\r\n // being zeroed. It takes one additional argument denoting the number of actual operands\r\n // provided to the call, and takes appropriate steps to initialize zeroed operands to their\r\n // default values using the optional parameter initializers of the original function. Doing so\r\n // allows calls to functions with optional parameters to circumvent the trampoline when all\r\n // parameters are provided as a fast route, respectively setting up omitted operands in a proper\r\n // context otherwise.\r\n var trampoline = original.trampoline;\r\n if (trampoline) return trampoline;\r\n\r\n var originalSignature = original.signature;\r\n var originalName = original.internalName;\r\n var originalParameterTypes = originalSignature.parameterTypes;\r\n var originalParameterDeclarations = original.prototype.declaration.signature.parameters;\r\n var commonReturnType = originalSignature.returnType;\r\n var commonThisType = originalSignature.thisType;\r\n var isInstance = original.is(CommonFlags.INSTANCE);\r\n\r\n // arguments excl. `this`, operands incl. `this`\r\n var minArguments = originalSignature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = originalParameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (isInstance) {\r\n ++minOperands;\r\n ++maxOperands;\r\n }\r\n var numOptional = assert(maxOperands - minOperands);\r\n\r\n var forwardedOperands = new Array(minOperands);\r\n var operandIndex = 0;\r\n\r\n // forward `this` if applicable\r\n var module = this.module;\r\n if (isInstance) {\r\n forwardedOperands[0] = module.createGetLocal(0, this.options.nativeSizeType);\r\n operandIndex = 1;\r\n }\r\n\r\n // forward required arguments\r\n for (let i = 0; i < minArguments; ++i, ++operandIndex) {\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, originalParameterTypes[i].toNativeType());\r\n }\r\n assert(operandIndex == minOperands);\r\n\r\n // create the trampoline element\r\n var trampolineSignature = new Signature(originalParameterTypes, commonReturnType, commonThisType);\r\n var trampolineName = originalName + \"|trampoline\";\r\n trampolineSignature.requiredParameters = maxArguments;\r\n trampoline = new Function(\r\n original.prototype,\r\n trampolineName,\r\n trampolineSignature,\r\n original.parent,\r\n original.contextualTypeArguments\r\n );\r\n trampoline.set(original.flags | CommonFlags.TRAMPOLINE | CommonFlags.COMPILED);\r\n original.trampoline = trampoline;\r\n\r\n // compile initializers of omitted arguments in scope of the trampoline function\r\n // this is necessary because initializers might need additional locals and a proper this context\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = trampoline;\r\n\r\n // create a br_table switching over the number of optional parameters provided\r\n var numNames = numOptional + 1; // incl. outer block\r\n var names = new Array(numNames);\r\n var ofN = \"of\" + numOptional.toString(10);\r\n for (let i = 0; i < numNames; ++i) {\r\n let label = i.toString(10) + ofN;\r\n names[i] = label;\r\n }\r\n var body = module.createBlock(names[0], [\r\n module.createBlock(\"outOfRange\", [\r\n module.createSwitch(names, \"outOfRange\",\r\n // condition is number of provided optional arguments, so subtract required arguments\r\n minArguments\r\n ? module.createBinary(\r\n BinaryOp.SubI32,\r\n module.createGetGlobal(\"~argc\", NativeType.I32),\r\n module.createI32(minArguments)\r\n )\r\n : module.createGetGlobal(\"~argc\", NativeType.I32)\r\n )\r\n ]),\r\n module.createUnreachable()\r\n ]);\r\n for (let i = 0; i < numOptional; ++i, ++operandIndex) {\r\n let type = originalParameterTypes[minArguments + i];\r\n let declaration = originalParameterDeclarations[minArguments + i];\r\n let initializer = declaration.initializer;\r\n let initExpr: ExpressionRef;\r\n if (initializer) {\r\n initExpr = module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n )\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Optional_parameter_must_have_an_initializer,\r\n declaration.range\r\n );\r\n initExpr = module.createUnreachable();\r\n }\r\n body = module.createBlock(names[i + 1], [\r\n body,\r\n initExpr,\r\n ]);\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, type.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n assert(operandIndex == maxOperands);\r\n\r\n var funcRef = module.addFunction(\r\n trampolineName,\r\n this.ensureFunctionType(\r\n trampolineSignature.parameterTypes,\r\n trampolineSignature.returnType,\r\n trampolineSignature.thisType\r\n ),\r\n typesToNativeTypes(trampoline.additionalLocals),\r\n module.createBlock(null, [\r\n body,\r\n module.createCall(\r\n originalName,\r\n forwardedOperands,\r\n commonReturnType.toNativeType()\r\n )\r\n ], commonReturnType.toNativeType())\r\n );\r\n trampoline.finalize(module, funcRef);\r\n return trampoline;\r\n }\r\n\r\n /** Makes sure that the argument count helper global is present and returns its name. */\r\n private ensureArgcVar(): string {\r\n var internalName = \"~argc\";\r\n if (!this.argcVar) {\r\n let module = this.module;\r\n this.argcVar = module.addGlobal(\r\n internalName,\r\n NativeType.I32,\r\n true,\r\n module.createI32(0)\r\n );\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Makes sure that the argument count helper setter is present and returns its name. */\r\n private ensureArgcSet(): string {\r\n var internalName = \"~setargc\";\r\n if (!this.argcSet) {\r\n let module = this.module;\r\n this.argcSet = module.addFunction(internalName,\r\n this.ensureFunctionType([ Type.u32 ], Type.void),\r\n null,\r\n module.createSetGlobal(this.ensureArgcVar(),\r\n module.createGetLocal(0, NativeType.I32)\r\n )\r\n );\r\n module.addFunctionExport(internalName, \"_setargc\");\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Creates a direct call to the specified function. */\r\n makeCallDirect(\r\n instance: Function,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = instance.signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = instance.signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n var module = this.module;\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n var returnType = instance.signature.returnType;\r\n var isCallImport = instance.is(CommonFlags.MODULE_IMPORT);\r\n\r\n // fill up omitted arguments with their initializers, if constant, otherwise with zeroes.\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = instance.signature.parameterTypes;\r\n let parameterNodes = instance.prototype.declaration.signature.parameters;\r\n let allOptionalsAreConstant = true;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n let initializer = parameterNodes[i].initializer;\r\n if (!(initializer !== null && nodeIsConstantValue(initializer.kind))) {\r\n allOptionalsAreConstant = false;\r\n break;\r\n }\r\n }\r\n if (allOptionalsAreConstant) { // inline into the call\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(\r\n this.compileExpression(\r\n parameterNodes[i].initializer,\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n )\r\n );\r\n }\r\n } else { // otherwise fill up with zeroes and call the trampoline\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n if (!isCallImport) {\r\n let original = instance;\r\n instance = this.ensureTrampoline(instance);\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n instance.flow.flags = original.flow.flags;\r\n this.program.instancesLookup.set(instance.internalName, instance); // so canOverflow can find it\r\n let nativeReturnType = returnType.toNativeType();\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), module.createI32(numArguments)),\r\n module.createCall(instance.internalName, operands, nativeReturnType)\r\n ], nativeReturnType);\r\n }\r\n }\r\n }\r\n\r\n // otherwise just call through\r\n this.currentType = returnType;\r\n if (isCallImport) return module.createCallImport(instance.internalName, operands, returnType.toNativeType());\r\n var ret = module.createCall(instance.internalName, operands, returnType.toNativeType());\r\n return ret;\r\n }\r\n\r\n /** Compiles an indirect call using an index argument and a signature. */\r\n compileCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallIndirect(signature, indexArg, operands);\r\n }\r\n\r\n /** Creates an indirect call to the function at `indexArg` in the function table. */\r\n makeCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (signature.thisType) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n\r\n // fill up omitted arguments with zeroes\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n }\r\n\r\n var returnType = signature.returnType;\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), // might still be calling a trampoline\r\n module.createI32(numArguments)\r\n ),\r\n module.createCallIndirect(indexArg, operands, signature.toSignatureString())\r\n ], returnType.toNativeType()); // not necessarily wrapped\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var numExpressions = expressions.length;\r\n var exprs = new Array(numExpressions--);\r\n for (let i = 0; i < numExpressions; ++i) {\r\n exprs[i] = this.compileExpression(\r\n expressions[i],\r\n Type.void, // drop all\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n exprs[numExpressions] = this.compileExpression(\r\n expressions[numExpressions],\r\n contextualType, // except last\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.module.createBlock(null, exprs, this.currentType.toNativeType());\r\n }\r\n\r\n compileElementAccessExpression(expression: ElementAccessExpression, contextualType: Type): ExpressionRef {\r\n var target = this.resolver.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n switch (target.kind) {\r\n case ElementKind.CLASS: {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n let thisArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.compileCallDirect(indexedGet, [\r\n expression.elementExpression\r\n ], expression, thisArg);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var name = declaration.name;\r\n var simpleName = (name.text.length\r\n ? name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var currentFunction = this.currentFunction;\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n currentFunction.internalName + INNER_DELIMITER + simpleName,\r\n declaration,\r\n null,\r\n DecoratorFlags.NONE\r\n );\r\n var flow = currentFunction.flow;\r\n var instance = this.compileFunctionUsingTypeArguments(\r\n prototype,\r\n [],\r\n flow.contextualTypeArguments,\r\n flow,\r\n declaration\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = instance.signature.type; // TODO: get cached type?\r\n // NOTE that, in order to make this work in every case, the function must be represented by a\r\n // value, so we add it and rely on the optimizer to figure out where it can be called directly.\r\n var index = this.ensureFunctionTableEntry(instance); // reports\r\n return index < 0\r\n ? this.module.createUnreachable()\r\n : this.module.createI32(index);\r\n }\r\n\r\n /**\r\n * Compiles an identifier in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compileIdentifierExpression(\r\n expression: IdentifierExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // check special keywords first\r\n switch (expression.kind) {\r\n case NodeKind.NULL: {\r\n let options = this.options;\r\n if (!contextualType.classReference) {\r\n this.currentType = options.usizeType;\r\n }\r\n return options.isWasm64\r\n ? module.createI64(0)\r\n : module.createI32(0);\r\n }\r\n case NodeKind.TRUE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(1);\r\n }\r\n case NodeKind.FALSE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\r\n case NodeKind.THIS: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n this.currentType = scopedThis.type;\r\n return module.createGetLocal(scopedThis.index, scopedThis.type.toNativeType());\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisType = (parent).type;\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n if (!flow.is(FlowFlags.ALLOCATES)) {\r\n flow.set(FlowFlags.ALLOCATES);\r\n // must be conditional because `this` could have been provided by a derived class\r\n this.currentType = thisType;\r\n return module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, expression)\r\n );\r\n }\r\n }\r\n this.currentType = thisType;\r\n return module.createGetLocal(0, thisType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n case NodeKind.SUPER: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n let scopedThisClass = assert(scopedThis.type.classReference);\r\n let base = scopedThisClass.base;\r\n if (base) {\r\n this.currentType = base.type;\r\n return module.createGetLocal(scopedThis.index, base.type.toNativeType());\r\n }\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let base = (parent).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return module.createGetLocal(0, superType.toNativeType());\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var target = this.resolver.resolveIdentifier( // reports\r\n expression,\r\n this.currentEnum || currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let localType = (target).type;\r\n assert(localType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n let localIndex = (target).index;\r\n assert(localIndex >= 0);\r\n this.currentType = localType;\r\n return this.module.createGetLocal(localIndex, localType.toNativeType());\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return this.module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum\r\n if (!target.is(CommonFlags.COMPILED)) {\r\n this.error(\r\n DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,\r\n expression.range\r\n );\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.module.createI32((target).constantValue);\r\n }\r\n return this.module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let instance = this.resolver.resolveFunction(\r\n target,\r\n null,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!(instance && this.compileFunction(instance))) return module.createUnreachable();\r\n let index = this.ensureFunctionTableEntry(instance);\r\n this.currentType = instance.signature.type;\r\n return this.module.createI32(index);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileInstanceOfExpression(\r\n expression: InstanceOfExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n // NOTE that this differs from TypeScript in that the rhs is a type, not an expression. at the\r\n // time of implementation, this seemed more useful because dynamic rhs expressions are not\r\n // possible in AS anyway.\r\n var expr = this.compileExpressionRetainType(expression.expression, this.options.usizeType, WrapMode.NONE);\r\n var type = this.currentType;\r\n var isType = this.resolver.resolveType(expression.isType);\r\n this.currentType = Type.bool;\r\n if (!isType) return module.createUnreachable();\r\n return type.is(TypeFlags.NULLABLE) && !isType.is(TypeFlags.NULLABLE)\r\n ? type.nonNullableType.isAssignableTo(isType)\r\n ? module.createBinary( // not precomputeable\r\n type.is(TypeFlags.LONG)\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n expr,\r\n type.toNativeZero(module)\r\n )\r\n : module.createI32(0)\r\n : module.createI32(type.isAssignableTo(isType, true) ? 1 : 0);\r\n }\r\n\r\n compileLiteralExpression(\r\n expression: LiteralExpression,\r\n contextualType: Type,\r\n implicitNegate: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n switch (expression.literalKind) {\r\n case LiteralKind.ARRAY: {\r\n assert(!implicitNegate);\r\n let classType = contextualType.classReference;\r\n if (\r\n classType &&\r\n classType.prototype == this.program.arrayPrototype\r\n ) {\r\n return this.compileArrayLiteral(\r\n assert(classType.typeArguments)[0],\r\n (expression).elementExpressions,\r\n 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 = module.precomputeExpression(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 compileAllocate(this, classReference, expression)\r\n );\r\n\r\n // once all field values have been set, return 'this'\r\n exprs[exprs.length - 1] = module.createGetLocal(tempLocal.index, this.options.nativeSizeType);\r\n\r\n return module.createBlock(null, exprs, this.options.nativeSizeType);\r\n }\r\n\r\n compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var currentFunction = this.currentFunction;\r\n\r\n // obtain the class being instantiated\r\n var target = this.resolver.resolveExpression( // reports\r\n expression.expression,\r\n currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n if (target.kind != ElementKind.CLASS_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature,\r\n expression.expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n var classPrototype = target;\r\n var classInstance: Class | null = null;\r\n var typeArguments = expression.typeArguments;\r\n var classReference: Class | null;\r\n if (\r\n !typeArguments &&\r\n (classReference = contextualType.classReference) !== null &&\r\n classReference.is(CommonFlags.GENERIC)\r\n ) {\r\n classInstance = this.resolver.resolveClass(\r\n classPrototype,\r\n classReference.typeArguments,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n } else {\r\n classInstance = this.resolver.resolveClassInclTypeArguments(\r\n classPrototype,\r\n typeArguments,\r\n currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n }\r\n if (!classInstance) return module.createUnreachable();\r\n\r\n var expr: ExpressionRef;\r\n\r\n // traverse to the top-most visible constructor\r\n var currentClassInstance: Class | null = classInstance;\r\n var constructorInstance: Function | null = null;\r\n do {\r\n constructorInstance = currentClassInstance.constructorInstance;\r\n if (constructorInstance) break; // TODO: check visibility\r\n } while (currentClassInstance = currentClassInstance.base);\r\n\r\n // if a constructor is present, call it with a zero `this`\r\n if (constructorInstance) {\r\n expr = this.compileCallDirect(constructorInstance, expression.arguments, expression,\r\n options.usizeType.toNativeZero(module)\r\n );\r\n\r\n // otherwise simply allocate a new instance and initialize its fields\r\n } else {\r\n expr = this.makeAllocate(classInstance, expression);\r\n }\r\n\r\n this.currentType = classInstance.type;\r\n return expr;\r\n }\r\n\r\n compileParenthesizedExpression(\r\n expression: ParenthesizedExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n // does not change types, just order\r\n return this.compileExpression(\r\n expression.expression,\r\n contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n /**\r\n * Compiles a property access in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compilePropertyAccessExpression(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n var target = this.resolver.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: { // static property\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // enum value\r\n let parent = (target).parent;\r\n assert(parent !== null && parent.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(parent)) {\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return module.createI32((target).constantValue);\r\n }\r\n return module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FIELD: { // instance field\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n assert((target).memoryOffset >= 0);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = (target).type;\r\n return module.createLoad(\r\n (target).type.byteSize,\r\n (target).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n thisExpr,\r\n (target).type.toNativeType(),\r\n (target).memoryOffset\r\n );\r\n }\r\n case ElementKind.PROPERTY: { // instance property (here: getter)\r\n 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.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], 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.module.precomputeExpression(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE)\r\n : this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n var ifThenFlow = parentFlow.fork();\r\n currentFunction.flow = ifThenFlow;\r\n var ifThenExpr = this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE);\r\n var ifThenType = this.currentType;\r\n ifThenFlow.free();\r\n\r\n var ifElseFlow = parentFlow.fork();\r\n currentFunction.flow = ifElseFlow;\r\n var ifElseExpr = this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n var ifElseType = this.currentType;\r\n currentFunction.flow = ifElseFlow.free();\r\n\r\n parentFlow.inheritMutual(ifThenFlow, ifElseFlow);\r\n\r\n var commonType = Type.commonCompatible(ifThenType, ifElseType, false);\r\n if (!commonType) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n expression.range, ifThenType.toString(), ifElseType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n ifThenExpr = this.convertExpression(\r\n ifThenExpr,\r\n ifThenType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifThen\r\n );\r\n ifElseExpr = this.convertExpression(\r\n ifElseExpr,\r\n ifElseType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifElse\r\n );\r\n this.currentType = commonType;\r\n return this.module.createIf(condExpr, ifThenExpr, ifElseExpr);\r\n }\r\n\r\n compileUnaryPostfixExpression(expression: UnaryPostfixExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // make a getter for the expression (also obtains the type)\r\n var getValue = this.compileExpression( // reports\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n // shortcut if compiling the getter already failed\r\n if (getExpressionId(getValue) == ExpressionId.Unreachable) return getValue;\r\n var currentType = this.currentType;\r\n\r\n var op: BinaryOp;\r\n var nativeType: NativeType;\r\n var nativeOne: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS_PLUS: {\r\n\r\n // TODO: check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n op = BinaryOp.AddI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.AddI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.AddF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.AddF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n\r\n // TODO: check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n op = BinaryOp.SubI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.SubI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.SubF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.SubF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // simplify if dropped anyway\r\n if (contextualType == Type.void) {\r\n return this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n getValue,\r\n nativeOne\r\n ),\r\n false\r\n );\r\n }\r\n\r\n // otherwise use a temp local for the intermediate value (always possibly overflows)\r\n var tempLocal = currentFunction.getTempLocal(currentType, false);\r\n var setValue = this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n this.module.createGetLocal(tempLocal.index, nativeType),\r\n nativeOne\r\n ),\r\n false\r\n );\r\n this.currentType = assert(tempLocal).type;\r\n currentFunction.freeTempLocal(tempLocal);\r\n\r\n var localIndex = (tempLocal).index;\r\n return module.createBlock(null, [\r\n module.createSetLocal(localIndex, getValue),\r\n setValue,\r\n module.createGetLocal(localIndex, nativeType)\r\n ], nativeType); // result of 'x++' / 'x--' might overflow\r\n }\r\n\r\n compileUnaryPrefixExpression(\r\n expression: UnaryPrefixExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PLUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // nop\r\n break;\r\n }\r\n case Token.MINUS: {\r\n if (expression.operand.kind == NodeKind.LITERAL && (\r\n (expression.operand).literalKind == LiteralKind.INTEGER ||\r\n (expression.operand).literalKind == LiteralKind.FLOAT\r\n )) {\r\n // implicitly negate integer and float literals. also enables proper checking of literal ranges.\r\n expr = this.compileLiteralExpression(expression.operand, contextualType, true);\r\n // compileExpression normally does this:\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n break;\r\n }\r\n\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MINUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, module.createI32(0), expr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n this.currentType.toNativeZero(module),\r\n expr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, module.createI64(0), expr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createUnary(UnaryOp.NegF32, expr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createUnary(UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PLUS_PLUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_INC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_DEC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, expr, module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.EXCLAMATION: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n // allow '!' for references even without an overload\r\n }\r\n\r\n expr = this.makeIsFalseish(expr, this.currentType);\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.TILDE: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n } else {\r\n expr = this.convertExpression(\r\n expr,\r\n this.currentType, this.currentType.intType,\r\n ConversionKind.IMPLICIT, WrapMode.NONE,\r\n expression.operand\r\n );\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.XorI32, expr, module.createI32(-1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n expr,\r\n this.currentType.toNativeNegOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, expr, module.createI64(-1, -1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.TYPEOF: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.operand, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n /** Makes sure that a 32-bit integer value is wrapped to a valid value of the specified type. */\r\n ensureSmallIntegerWrap(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n var flow = this.currentFunction.flow;\r\n switch (type.kind) {\r\n case TypeKind.I8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI8ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(24)\r\n ),\r\n module.createI32(24)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI16ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(16)\r\n ),\r\n module.createI32(16)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'false' in a broader sense. */\r\n makeIsFalseish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return module.createUnary(UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createUnary(UnaryOp.EqzI64, expr);\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.EqF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.EqF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(1);\r\n }\r\n }\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'true' in a broader sense. */\r\n makeIsTrueish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return expr;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return type.size == 64\r\n ? module.createBinary(BinaryOp.NeI64, expr, module.createI64(0))\r\n : expr;\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.NeF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.NeF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(0);\r\n }\r\n }\r\n }\r\n\r\n /** Makes an allocation expression for an instance of the specified class. */\r\n makeAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n\r\n // allocate the necessary memory and tee the pointer to a temp. local for reuse\r\n var tempLocal = currentFunction.getTempLocal(classInstance.type, false);\r\n var initializers = new Array();\r\n initializers.push(\r\n module.createSetLocal(tempLocal.index,\r\n compileAllocate(this, classInstance, reportNode)\r\n )\r\n );\r\n\r\n // apply field initializers\r\n if (classInstance.members) {\r\n for (let member of classInstance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n let field = member;\r\n let fieldType = field.type;\r\n let nativeFieldType = fieldType.toNativeType();\r\n let fieldDeclaration = field.prototype.declaration;\r\n assert(!field.isAny(CommonFlags.CONST));\r\n if (fieldDeclaration.initializer) { // use initializer\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n this.compileExpression( // reports\r\n fieldDeclaration.initializer,\r\n fieldType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n ),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n } else { // initialize with zero\r\n // TODO: might be unnecessary if the ctor initializes the field\r\n let parameterIndex = (field.prototype.declaration).parameterIndex;\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n parameterIndex >= 0 // initialized via parameter\r\n ? module.createGetLocal(1 + parameterIndex, nativeFieldType)\r\n : fieldType.toNativeZero(module),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // return `this`\r\n initializers.push(\r\n module.createGetLocal(tempLocal.index, nativeSizeType)\r\n );\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = classInstance.type;\r\n return module.createBlock(null, initializers, nativeSizeType);\r\n }\r\n\r\n /** Makes a conditional allocation expression inside of the constructor of the specified class. */\r\n makeConditionalAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n // requires that `this` is the first local\r\n var module = this.module;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n this.currentType = classInstance.type;\r\n return module.createIf(\r\n nativeSizeType == NativeType.I64\r\n ? module.createBinary(\r\n BinaryOp.NeI64,\r\n module.createGetLocal(0, NativeType.I64),\r\n module.createI64(0)\r\n )\r\n : module.createGetLocal(0, NativeType.I32),\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createTeeLocal(0,\r\n this.makeAllocate(classInstance, reportNode)\r\n )\r\n );\r\n }\r\n\r\n /** Adds the debug location of the specified expression at the specified range to the source map. */\r\n addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n var currentFunction = this.currentFunction;\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n range.debugInfoRef = expr;\r\n currentFunction.debugLocations.push(range);\r\n }\r\n}\r\n\r\n// helpers\r\n\r\nfunction mangleImportName(\r\n element: Element,\r\n declaration: DeclarationStatement,\r\n parentElement: Element | null = null\r\n): void {\r\n mangleImportName_moduleName = parentElement ? parentElement.simpleName : declaration.range.source.simplePath;\r\n mangleImportName_elementName = element.simpleName;\r\n\r\n if (!element.hasDecorator(DecoratorFlags.EXTERNAL)) return;\r\n\r\n var program = element.program;\r\n var decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n var args = decorator.arguments;\r\n if (args && args.length) {\r\n let arg = args[0];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length >= 2) {\r\n arg = args[1];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_moduleName = mangleImportName_elementName;\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length > 2) {\r\n program.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"2\", args.length.toString()\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n decorator.range, \"1\", \"0\"\r\n );\r\n }\r\n}\r\n\r\nvar mangleImportName_moduleName: string;\r\nvar mangleImportName_elementName: string;\r\n","/**\r\n * A TypeScript parser for the AssemblyScript subset.\r\n * @module parser\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n LIBRARY_PREFIX,\r\n PATH_DELIMITER\r\n} from \"./common\";\r\n\r\nimport {\r\n Program\r\n} from \"./program\";\r\n\r\nimport {\r\n Tokenizer,\r\n Token,\r\n Range,\r\n CommentHandler,\r\n IdentifierHandling\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n normalizePath\r\n} from \"./util\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n SourceKind,\r\n CommonTypeNode,\r\n TypeNode,\r\n SignatureNode,\r\n\r\n Expression,\r\n AssertionKind,\r\n CallExpression,\r\n ClassExpression,\r\n FunctionExpression,\r\n IdentifierExpression,\r\n StringLiteralExpression,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DecoratorNode,\r\n DoStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportImportStatement,\r\n ExportMember,\r\n ExportStatement,\r\n ExpressionStatement,\r\n ForStatement,\r\n FunctionDeclaration,\r\n IfStatement,\r\n ImportDeclaration,\r\n ImportStatement,\r\n NamespaceDeclaration,\r\n ParameterNode,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameterNode,\r\n VariableStatement,\r\n VariableDeclaration,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n mangleInternalPath,\r\n nodeIsCallable,\r\n nodeIsGenericCallable\r\n} from \"./ast\";\r\n\r\n/** Parser interface. */\r\nexport class Parser extends DiagnosticEmitter {\r\n\r\n /** Program being created. */\r\n program: Program;\r\n /** Source file names to be requested next. */\r\n backlog: string[] = new Array();\r\n /** Source file names already seen, that is processed or backlogged. */\r\n seenlog: Set = new Set();\r\n /** Source file names already completely processed. */\r\n donelog: Set = new Set();\r\n /** Optional handler to intercept comments while tokenizing. */\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new parser. */\r\n constructor() {\r\n super();\r\n this.program = new Program(this.diagnostics);\r\n }\r\n\r\n /** Parses a file and adds its definitions to the program. */\r\n parseFile(\r\n text: string,\r\n path: string,\r\n isEntry: bool\r\n ): void {\r\n var normalizedPath = normalizePath(path);\r\n var internalPath = mangleInternalPath(normalizedPath);\r\n\r\n // check if already processed\r\n if (this.donelog.has(internalPath)) return;\r\n this.donelog.add(internalPath); // do not parse again\r\n this.seenlog.add(internalPath); // do not request again\r\n\r\n // create the source element\r\n var source = new Source(\r\n normalizedPath,\r\n text,\r\n isEntry\r\n ? SourceKind.ENTRY\r\n : path.startsWith(LIBRARY_PREFIX) && path.indexOf(PATH_DELIMITER, LIBRARY_PREFIX.length) < 0\r\n ? SourceKind.LIBRARY\r\n : SourceKind.DEFAULT\r\n );\r\n var program = this.program;\r\n program.sources.push(source);\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, program.diagnostics);\r\n tn.onComment = this.onComment;\r\n source.tokenizer = tn;\r\n var statements = source.statements;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n let statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n statements.push(statement);\r\n }\r\n }\r\n tn.finish();\r\n }\r\n\r\n /** Parses a top-level statement. */\r\n parseTopLevelStatement(\r\n tn: Tokenizer,\r\n namespace: Node | null = null\r\n ): Statement | null {\r\n var flags = CommonFlags.NONE;\r\n var startPos: i32 = -1;\r\n\r\n // check decorators\r\n var decorators: DecoratorNode[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) {\r\n this.skipStatement(tn);\r\n continue;\r\n }\r\n if (!decorators) decorators = [];\r\n decorators.push(decorator);\r\n }\r\n\r\n // check modifiers\r\n var exportStart: i32 = 0;\r\n var exportEnd: i32 = 0;\r\n if (tn.skip(Token.EXPORT)) {\r\n if (tn.skip(Token.DEFAULT)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n flags |= CommonFlags.EXPORT;\r\n exportStart = tn.tokenPos;\r\n exportEnd = tn.pos;\r\n }\r\n\r\n var declareStart: i32 = 0;\r\n var declareEnd: i32 = 0;\r\n var contextIsAmbient = namespace != null && namespace.is(CommonFlags.AMBIENT);\r\n if (tn.skip(Token.DECLARE)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n if (contextIsAmbient) {\r\n this.error(\r\n DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n flags |= CommonFlags.DECLARE | CommonFlags.AMBIENT;\r\n } else if (contextIsAmbient) {\r\n flags |= CommonFlags.AMBIENT;\r\n }\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n\r\n // handle declarations\r\n var first = tn.peek();\r\n if (startPos < 0) startPos = tn.nextTokenPos;\r\n switch (first) {\r\n case Token.CONST: {\r\n tn.next();\r\n flags |= CommonFlags.CONST;\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n break;\r\n } else {\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n }\r\n break;\r\n }\r\n case Token.LET: flags |= CommonFlags.LET;\r\n case Token.VAR: {\r\n tn.next();\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ENUM: {\r\n tn.next();\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.FUNCTION: {\r\n tn.next();\r\n statement = this.parseFunction(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ABSTRACT: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (!tn.skip(Token.CLASS)) {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n break;\r\n } else {\r\n tn.discard(state);\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n // fall through\r\n }\r\n case Token.CLASS:\r\n case Token.INTERFACE: {\r\n tn.next();\r\n statement = this.parseClassOrInterface(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.NAMESPACE: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n case Token.IMPORT: {\r\n tn.next();\r\n flags |= CommonFlags.IMPORT;\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExportImport(tn, startPos);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n default: {\r\n\r\n // handle plain exports\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExport(tn, flags, startPos);\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (exportEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(exportStart, exportEnd), \"export\"\r\n ); // recoverable\r\n }\r\n if (declareEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(declareStart, declareEnd), \"declare\"\r\n ); // recoverable\r\n }\r\n if (!namespace) {\r\n statement = this.parseStatement(tn, true);\r\n } // TODO: else?\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorators[i].range\r\n );\r\n }\r\n }\r\n return statement;\r\n }\r\n\r\n /** Obtains the next file to parse. */\r\n nextFile(): string | null {\r\n var backlog = this.backlog;\r\n return backlog.length ? backlog.shift() : null;\r\n }\r\n\r\n /** Finishes parsing and returns the program. */\r\n finish(): Program {\r\n if (this.backlog.length) throw new Error(\"backlog is not empty\");\r\n this.backlog = [];\r\n this.seenlog.clear();\r\n this.donelog.clear();\r\n return this.program;\r\n }\r\n\r\n /** Parses a type. */\r\n parseType(\r\n tn: Tokenizer,\r\n acceptParenthesized: bool = true,\r\n suppressErrors: bool = false\r\n ): CommonTypeNode | null {\r\n\r\n // NOTE: this parses our limited subset\r\n var token = tn.next();\r\n var startPos = tn.tokenPos;\r\n\r\n var type: CommonTypeNode;\r\n\r\n // '(' ...\r\n if (token == Token.OPENPAREN) {\r\n\r\n // '(' FunctionSignature ')' '|' 'null'?\r\n let isNullableSignature = tn.skip(Token.OPENPAREN);\r\n // FunctionSignature?\r\n let signature = this.tryParseSignature(tn);\r\n if (signature) {\r\n if (isNullableSignature) {\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.BAR)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"|\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.NULL)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n signature.isNullable = true;\r\n }\r\n return signature;\r\n } else if (isNullableSignature || this.tryParseSignatureIsSignature) {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // Type (',' Type)* ')'\r\n if (acceptParenthesized) {\r\n let innerType = this.parseType(tn, false, suppressErrors);\r\n if (!innerType) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"}\"\r\n );\r\n }\r\n return null;\r\n }\r\n type = innerType;\r\n type.range.start = startPos;\r\n type.range.end = tn.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // 'void'\r\n } else if (token == Token.VOID) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"void\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'this'\r\n } else if (token == Token.THIS) {\r\n type = Node.createType(\r\n Node.createThisExpression(tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'true'\r\n } else if (token == Token.TRUE || token == Token.FALSE) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"bool\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // StringLiteral\r\n } else if (token == Token.STRINGLITERAL) {\r\n tn.readString();\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"string\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // Identifier\r\n } else if (token == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let parameters = new Array();\r\n let nullable = false;\r\n\r\n // Name\r\n if (tn.skip(Token.LESSTHAN)) {\r\n do {\r\n let parameter = this.parseType(tn, true, suppressErrors);\r\n if (!parameter) return null;\r\n parameters.push(parameter);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \">\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n // ... | null\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(identifier, parameters, nullable, tn.range(startPos, tn.pos));\r\n\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n // ... [][]\r\n while (tn.skip(Token.OPENBRACKET)) {\r\n let bracketStart = tn.tokenPos;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n }\r\n return null;\r\n }\r\n let bracketRange = tn.range(bracketStart, tn.pos);\r\n\r\n // ...[] | null\r\n let nullable = false;\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"Array\", bracketRange),\r\n [ type ],\r\n nullable,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (nullable) break;\r\n }\r\n\r\n return type;\r\n }\r\n\r\n // Indicates whether tryParseSignature determined that it is handling a Signature\r\n private tryParseSignatureIsSignature: bool = false;\r\n\r\n /** Parses a function signature, as used in type declarations. */\r\n tryParseSignature(\r\n tn: Tokenizer\r\n ): SignatureNode | null {\r\n\r\n // at '(': ('...'? Identifier '?'? ':' Type (',' '...'? Identifier '?'? ':' Type)* )? ')' '=>' Type\r\n\r\n var state = tn.mark();\r\n var startPos = tn.tokenPos;\r\n var parameters: ParameterNode[] | null = null;\r\n var thisType: TypeNode | null = null;\r\n var isSignature: bool = false;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n parameters = [];\r\n\r\n } else {\r\n isSignature = false; // not yet known\r\n do {\r\n let kind = ParameterKind.DEFAULT;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n kind = ParameterKind.REST;\r\n }\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let t = this.parseType(tn, false);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n this.tryParseSignatureIsSignature = true;\r\n return null;\r\n }\r\n thisType = t;\r\n } else {\r\n tn.reset(state);\r\n this.tryParseSignatureIsSignature = false;\r\n return null;\r\n }\r\n } else if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range(tn.tokenPos, tn.pos));\r\n if (tn.skip(Token.QUESTION)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n if (kind == ParameterKind.REST) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n tn.range()\r\n ); // recoverable\r\n } else {\r\n kind = ParameterKind.OPTIONAL;\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let type = this.parseType(tn); // not suppressing errors because known\r\n if (!type) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n let param = new ParameterNode();\r\n param.parameterKind = kind;\r\n param.name = name;\r\n param.type = type;\r\n if (!parameters) parameters = [ param ];\r\n else parameters.push(param);\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null;\r\n if (tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n returnType = this.parseType(tn);\r\n if (!returnType) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=>\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n this.tryParseSignatureIsSignature = true;\r\n return Node.createSignature(\r\n parameters || [],\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n\r\n // statements\r\n\r\n parseDecorator(\r\n tn: Tokenizer\r\n ): DecoratorNode | null {\r\n\r\n // at '@': Identifier ('.' Identifier)* '(' Arguments\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skipIdentifier()) {\r\n let name = tn.readIdentifier();\r\n let expression: Expression = Node.createIdentifierExpression(name, tn.range(startPos, tn.pos));\r\n while (tn.skip(Token.DOT)) {\r\n if (tn.skipIdentifier()) {\r\n name = tn.readIdentifier();\r\n expression = Node.createPropertyAccessExpression(\r\n expression,\r\n Node.createIdentifierExpression(name, tn.range()),\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let args: Expression[] | null;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n args = this.parseArguments(tn);\r\n if (args) {\r\n return Node.createDecorator(expression, args, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n return Node.createDecorator(expression, null, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVariable(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): VariableStatement | null {\r\n\r\n // at ('const' | 'let' | 'var'): VariableDeclaration (',' VariableDeclaration)* ';'?\r\n\r\n var members = new Array();\r\n do {\r\n let member = this.parseVariableDeclaration(tn, flags, decorators);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n\r\n var ret = Node.createVariableStatement(members, decorators, flags, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseVariableDeclaration(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags,\r\n parentDecorators: DecoratorNode[] | null\r\n ): VariableDeclaration | null {\r\n\r\n // before: Identifier (':' Type)? ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var flags = parentFlags;\r\n\r\n var type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n }\r\n\r\n var initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n } else {\r\n if (flags & CommonFlags.CONST) {\r\n if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n identifier.range\r\n ); // recoverable\r\n }\r\n } else if (!type) { // neither type nor initializer\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range(tn.pos)\r\n ); // recoverable\r\n }\r\n }\r\n return Node.createVariableDeclaration(\r\n identifier,\r\n type,\r\n initializer,\r\n parentDecorators,\r\n flags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseEnum(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): EnumDeclaration | null {\r\n\r\n // at 'enum': Identifier '{' (EnumValueDeclaration (',' EnumValueDeclaration )*)? '}' ';'?\r\n\r\n if (tn.next() != Token.IDENTIFIER) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.next() != Token.OPENBRACE) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n var members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseEnumValue(tn, CommonFlags.NONE);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n var ret = Node.createEnumDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseEnumValue(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags\r\n ): EnumValueDeclaration | null {\r\n\r\n // before: Identifier ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var value: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n }\r\n return Node.createEnumValueDeclaration(\r\n identifier,\r\n value,\r\n parentFlags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseReturn(\r\n tn: Tokenizer\r\n ): ReturnStatement | null {\r\n\r\n // at 'return': Expression | (';' | '}' | ...'\\n')\r\n\r\n var expr: Expression | null = null;\r\n if (\r\n tn.peek(true) != Token.SEMICOLON &&\r\n tn.nextToken != Token.CLOSEBRACE &&\r\n !tn.nextTokenOnNewLine\r\n ) {\r\n if (!(expr = this.parseExpression(tn))) return null;\r\n }\r\n\r\n var ret = Node.createReturnStatement(expr, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTypeParameters(\r\n tn: Tokenizer\r\n ): TypeParameterNode[] | null {\r\n\r\n // at '<': TypeParameter (',' TypeParameter)* '>'\r\n\r\n var typeParameters = new Array();\r\n while (!tn.skip(Token.GREATERTHAN)) {\r\n let typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.GREATERTHAN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (typeParameters.length === 0) {\r\n this.error(\r\n DiagnosticCode.Type_parameter_list_cannot_be_empty,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n return typeParameters;\r\n }\r\n\r\n parseTypeParameter(\r\n tn: Tokenizer\r\n ): TypeParameterNode | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n let extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n return Node.createTypeParameter(\r\n identifier,\r\n extendsType,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private parseParametersThis: TypeNode | null = null;\r\n\r\n parseParameters(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: ParameterNode | null = null;\r\n var seenOptional = false;\r\n var reportedRest = false;\r\n var thisType: CommonTypeNode | null = null;\r\n\r\n // check if there is a leading `this` parameter\r\n this.parseParametersThis = null;\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n thisType = this.parseType(tn); // reports\r\n if (!thisType) return null;\r\n if (thisType.kind == NodeKind.TYPE) {\r\n this.parseParametersThis = thisType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n thisType.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n return parameters;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let param = this.parseParameter(tn, isConstructor); // reports\r\n if (!param) return null;\r\n if (seenRest && !reportedRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,\r\n seenRest.name.range\r\n );\r\n reportedRest = true;\r\n }\r\n switch (param.parameterKind) {\r\n default: {\r\n if (seenOptional) {\r\n this.error(\r\n DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,\r\n param.name.range\r\n );\r\n }\r\n break;\r\n }\r\n case ParameterKind.OPTIONAL: {\r\n seenOptional = true;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n seenRest = param;\r\n break;\r\n }\r\n }\r\n parameters.push(param);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: ('public' | 'private' | 'protected' | '...')? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n var accessFlags: CommonFlags = CommonFlags.NONE;\r\n if (isConstructor) {\r\n if (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.peek() == Token.READONLY) {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek() != Token.COLON) { // modifier\r\n tn.discard(state);\r\n if (!startRange) startRange = tn.range();\r\n accessFlags |= CommonFlags.READONLY;\r\n } else { // identifier\r\n tn.reset(state);\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n if (accessFlags) {\r\n this.error(\r\n DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,\r\n tn.range()\r\n );\r\n } else {\r\n startRange = tn.range();\r\n }\r\n isRest = true;\r\n }\r\n if (tn.skipIdentifier()) {\r\n if (!isRest) startRange = tn.range();\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let type: CommonTypeNode | null = null;\r\n if (isOptional = tn.skip(Token.QUESTION)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n identifier.range\r\n );\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n type = Node.createOmittedType(tn.range(tn.pos));\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n if (isOptional) {\r\n this.error(\r\n DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,\r\n identifier.range\r\n );\r\n } else {\r\n isOptional = true;\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n }\r\n let param = Node.createParameter(\r\n identifier,\r\n type,\r\n initializer,\r\n isRest\r\n ? ParameterKind.REST\r\n : isOptional\r\n ? ParameterKind.OPTIONAL\r\n : ParameterKind.DEFAULT,\r\n Range.join(startRange, tn.range())\r\n );\r\n param.flags |= accessFlags;\r\n return param;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseFunction(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): FunctionDeclaration | null {\r\n\r\n // at 'function':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // '(' Parameters (':' Type)?\r\n // '{' Statement* '}'\r\n // ';'?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(tn.pos)\r\n );\r\n return null;\r\n }\r\n\r\n var name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var signatureStart: i32 = -1;\r\n\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n signatureStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n if (signatureStart < 0) {\r\n signatureStart = tn.tokenPos;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n var thisType = this.parseParametersThis;\r\n\r\n var isSetter = (flags & CommonFlags.SET) != 0;\r\n if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n ); // recoverable\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn, true, isSetter);\r\n if (!returnType) return null;\r\n }\r\n\r\n if (!returnType) {\r\n returnType = Node.createOmittedType(\r\n tn.range(tn.pos)\r\n );\r\n if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range(tn.pos)\r\n );\r\n }\r\n\r\n var ret = Node.createFunctionDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseFunctionExpression(tn: Tokenizer): FunctionExpression | null {\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n var isArrow = false;\r\n\r\n // either at 'function':\r\n // Identifier?\r\n // '(' Parameters (':' Type)?\r\n // Statement\r\n\r\n if (tn.token == Token.FUNCTION) {\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n // or at '(' of arrow function:\r\n // Parameters (':' Type)?\r\n // Statement\r\n\r\n } else {\r\n isArrow = true;\r\n assert(tn.token == Token.OPENPAREN);\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var signatureStart = tn.pos;\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, name, parameters, isArrow, startPos, signatureStart);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n name: IdentifierExpression,\r\n parameters: ParameterNode[],\r\n isArrow: bool,\r\n startPos: i32 = -1,\r\n signatureStart: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = name.range.start;\r\n if (signatureStart < 0) signatureStart = startPos;\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n\r\n if (isArrow) {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"=>\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null, // TODO?\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null;\r\n if (isArrow) {\r\n body = this.parseStatement(tn, false);\r\n } else {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n }\r\n if (!body) return null;\r\n\r\n var declaration = Node.createFunctionDeclaration(\r\n name,\r\n null,\r\n signature,\r\n body,\r\n null,\r\n isArrow ? CommonFlags.ARROW : CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n return Node.createFunctionExpression(declaration);\r\n }\r\n\r\n parseClassOrInterface(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): ClassDeclaration | null {\r\n\r\n // at ('class' | 'interface'):\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // ('extends' Type)?\r\n // ('implements' Type (',' Type)*)?\r\n // '{' ClassMember* '}'\r\n\r\n var isInterface = tn.token == Token.INTERFACE;\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n var typeParameters: TypeParameterNode[] | null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n } else {\r\n typeParameters = [];\r\n }\r\n\r\n var extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n\r\n var implementsTypes: TypeNode[] | null = null;\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Interface_declaration_cannot_have_implements_clause,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n do {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n if (!isInterface) {\r\n if (!implementsTypes) implementsTypes = [];\r\n implementsTypes.push(type);\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration: ClassDeclaration;\r\n if (isInterface) {\r\n assert(!implementsTypes);\r\n declaration = Node.createInterfaceDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n declaration = Node.createClassDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n implementsTypes,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return declaration;\r\n }\r\n\r\n parseClassExpression(tn: Tokenizer): ClassExpression | null {\r\n\r\n // at 'class': Identifier? '{' ... '}'\r\n\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration = Node.createClassDeclaration(\r\n name,\r\n [],\r\n null,\r\n null,\r\n members,\r\n null,\r\n CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return Node.createClassExpression(declaration);\r\n }\r\n\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parent: ClassDeclaration\r\n ): DeclarationStatement | null {\r\n\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\r\n // 'readonly'?\r\n // ('get' | 'set')?\r\n // Identifier ...\r\n\r\n var startPos = tn.pos;\r\n var isInterface = parent.kind == NodeKind.INTERFACEDECLARATION;\r\n\r\n var decorators = new Array();\r\n while (tn.skip(Token.AT)) {\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorator.range\r\n );\r\n }\r\n decorators.push(decorator);\r\n }\r\n\r\n // inherit ambient status\r\n var flags = parent.flags & CommonFlags.AMBIENT;\r\n\r\n // implemented methods are virtual\r\n if (isInterface) flags |= CommonFlags.VIRTUAL;\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"public\"\r\n );\r\n }\r\n flags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"private\"\r\n );\r\n }\r\n flags |= CommonFlags.PRIVATE;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"protected\"\r\n );\r\n }\r\n flags |= CommonFlags.PROTECTED;\r\n }\r\n\r\n var staticStart: i32 = 0;\r\n var staticEnd: i32 = 0;\r\n var abstractStart: i32 = 0;\r\n var abstractEnd: i32 = 0;\r\n if (tn.skip(Token.STATIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"static\"\r\n );\r\n }\r\n flags |= CommonFlags.STATIC;\r\n staticStart = tn.tokenPos;\r\n staticEnd = tn.pos;\r\n } else {\r\n flags |= CommonFlags.INSTANCE;\r\n if (tn.skip(Token.ABSTRACT)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"abstract\"\r\n );\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n abstractStart = tn.tokenPos;\r\n abstractEnd = tn.pos;\r\n }\r\n if (parent.flags & CommonFlags.GENERIC) {\r\n flags |= CommonFlags.GENERIC_CONTEXT;\r\n }\r\n }\r\n\r\n var readonlyStart: i32 = 0;\r\n var readonlyEnd: i32 = 0;\r\n if (tn.skip(Token.READONLY)) {\r\n flags |= CommonFlags.READONLY;\r\n readonlyStart = tn.tokenPos;\r\n readonlyEnd = tn.pos;\r\n }\r\n\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n var state = tn.mark();\r\n var isConstructor = false;\r\n var isGetter = false;\r\n var getStart: i32 = 0;\r\n var getEnd: i32 = 0;\r\n var isSetter = false;\r\n var setStart: i32 = 0;\r\n var setEnd: i32 = 0;\r\n if (!isInterface) {\r\n if (tn.skip(Token.GET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.GET;\r\n isGetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.SET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.SET | CommonFlags.SET;\r\n isSetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.CONSTRUCTOR)) {\r\n flags |= CommonFlags.CONSTRUCTOR;\r\n isConstructor = true;\r\n if (flags & CommonFlags.STATIC) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(staticStart, staticEnd), \"static\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n }\r\n }\r\n\r\n if (!isConstructor && !tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var name = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n let typeParametersStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.An_accessor_cannot_have_type_parameters,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else {\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n }\r\n\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let signatureStart = tn.tokenPos;\r\n let parameters = this.parseParameters(tn, isConstructor);\r\n if (!parameters) return null;\r\n let thisType = this.parseParametersThis;\r\n if (isConstructor) {\r\n for (let i = 0, k = parameters.length; i < k; ++i) {\r\n let parameter = parameters[i];\r\n if (parameter.isAny(\r\n CommonFlags.PUBLIC |\r\n CommonFlags.PROTECTED |\r\n CommonFlags.PRIVATE |\r\n CommonFlags.READONLY\r\n )) {\r\n let implicitFieldDeclaration = Node.createFieldDeclaration(\r\n parameter.name,\r\n parameter.type,\r\n null, // initialized via parameter\r\n null,\r\n parameter.flags | CommonFlags.INSTANCE,\r\n parameter.range\r\n );\r\n implicitFieldDeclaration.parameterIndex = i;\r\n implicitFieldDeclaration.parent = parent;\r\n parameter.implicitFieldDeclaration = implicitFieldDeclaration;\r\n parent.members.push(implicitFieldDeclaration);\r\n }\r\n }\r\n } else if (isGetter) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n );\r\n }\r\n } else if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n );\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n );\r\n }\r\n }\r\n\r\n let returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (name.kind == NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n );\r\n } else if (isSetter) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,\r\n tn.range()\r\n );\r\n }\r\n returnType = this.parseType(tn, name.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n if (!isSetter && name.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n let signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n let body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n } else if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract,\r\n tn.range(), name.text\r\n ); // recoverable\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT) && !isInterface) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n let retMethod = Node.createMethodDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retMethod;\r\n\r\n } else if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Constructor_implementation_is_missing,\r\n name.range\r\n );\r\n\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n name.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(getStart, getEnd), \"get\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.SET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(setStart, setEnd), \"set\"\r\n ); // recoverable\r\n }\r\n\r\n let type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n initializer = this.parseExpression(tn);\r\n if (!initializer) return null;\r\n }\r\n let retField = Node.createFieldDeclaration(\r\n name,\r\n type,\r\n initializer,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retField;\r\n }\r\n return null;\r\n }\r\n\r\n parseNamespace(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): NamespaceDeclaration | null {\r\n\r\n // at 'namespace': Identifier '{' (Variable | Function)* '}'\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n let ns = Node.createNamespaceDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseTopLevelStatement(tn, ns);\r\n if (!member) return null;\r\n member.parent = ns;\r\n members.push(member);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ns;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExport(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n startPos: i32\r\n ): ExportStatement | null {\r\n\r\n // at 'export': '{' ExportMember (',' ExportMember)* }' ('from' StringLiteral)? ';'?\r\n\r\n var path: StringLiteralExpression | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseExportMember(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let ret = Node.createExportStatement(members, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = ret.internalPath;\r\n if (internalPath !== null && !this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret = Node.createExportStatement(null, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = assert(ret.internalPath);\r\n let source = tn.source;\r\n if (!source.exportPaths) source.exportPaths = new Set();\r\n source.exportPaths.add(internalPath);\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportMember(\r\n tn: Tokenizer\r\n ): ExportMember | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifierName()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createExportMember(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImport(\r\n tn: Tokenizer\r\n ): ImportStatement | null {\r\n\r\n // at 'import':\r\n // ('{' (ImportMember (',' ImportMember)* '}') | ('*' 'as' Identifier)?\r\n // 'from' StringLiteral ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var members: ImportDeclaration[] | null = null;\r\n var namespaceName: IdentifierExpression | null = null;\r\n var skipFrom = false;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseImportDeclaration(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n namespaceName = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"as\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n skipFrom = true;\r\n }\r\n\r\n if (skipFrom || tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n let path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret: ImportStatement;\r\n if (namespaceName) {\r\n assert(!members);\r\n ret = Node.createImportStatementWithWildcard(namespaceName, path, tn.range(startPos, tn.pos));\r\n } else {\r\n ret = Node.createImportStatement(members, path, tn.range(startPos, tn.pos));\r\n }\r\n let internalPath = ret.internalPath;\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImportDeclaration(\r\n tn: Tokenizer\r\n ): ImportDeclaration | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifierName()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createImportDeclaration(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportImport(\r\n tn: Tokenizer,\r\n startPos: i32\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let ret = Node.createExportImportStatement(identifier, asIdentifier, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseStatement(\r\n tn: Tokenizer,\r\n topLevel: bool = false\r\n ): Statement | null {\r\n\r\n // at previous token\r\n\r\n var state = tn.mark();\r\n var token = tn.next();\r\n var statement: Statement | null = null;\r\n switch (token) {\r\n case Token.BREAK: {\r\n statement = this.parseBreak(tn);\r\n break;\r\n }\r\n case Token.CONST: {\r\n statement = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.CONTINUE: {\r\n statement = this.parseContinue(tn);\r\n break;\r\n }\r\n case Token.DO: {\r\n statement = this.parseDoStatement(tn);\r\n break;\r\n }\r\n case Token.FOR: {\r\n statement = this.parseForStatement(tn);\r\n break;\r\n }\r\n case Token.IF: {\r\n statement = this.parseIfStatement(tn);\r\n break;\r\n }\r\n case Token.LET: {\r\n statement = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.VAR: {\r\n statement = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n statement = this.parseBlockStatement(tn, topLevel);\r\n break;\r\n }\r\n case Token.RETURN: {\r\n if (topLevel) {\r\n this.error(\r\n DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n statement = this.parseReturn(tn);\r\n break;\r\n }\r\n case Token.SEMICOLON: {\r\n return Node.createEmptyStatement(tn.range(tn.tokenPos));\r\n }\r\n case Token.SWITCH: {\r\n statement = this.parseSwitchStatement(tn);\r\n break;\r\n }\r\n case Token.THROW: {\r\n statement = this.parseThrowStatement(tn);\r\n break;\r\n }\r\n case Token.TRY: {\r\n statement = this.parseTryStatement(tn);\r\n break;\r\n }\r\n case Token.VOID: {\r\n statement = this.parseVoidStatement(tn);\r\n break;\r\n }\r\n case Token.WHILE: {\r\n statement = this.parseWhileStatement(tn);\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n tn.reset(state);\r\n statement = this.parseExpressionStatement(tn);\r\n break;\r\n }\r\n }\r\n if (!statement) { // has been reported\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n }\r\n return statement;\r\n }\r\n\r\n parseBlockStatement(\r\n tn: Tokenizer,\r\n topLevel: bool\r\n ): BlockStatement | null {\r\n\r\n // at '{': Statement* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let state = tn.mark();\r\n let statement = this.parseStatement(tn, topLevel);\r\n if (!statement) {\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n statements.push(statement);\r\n }\r\n }\r\n var ret = Node.createBlockStatement(statements, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseBreak(\r\n tn: Tokenizer\r\n ): BreakStatement | null {\r\n\r\n // at 'break': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createBreakStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseContinue(\r\n tn: Tokenizer\r\n ): ContinueStatement | null {\r\n\r\n // at 'continue': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createContinueStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseDoStatement(\r\n tn: Tokenizer\r\n ): DoStatement | null {\r\n\r\n // at 'do': Statement 'while' '(' Expression ')' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n if (tn.skip(Token.WHILE)) {\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let ret = Node.createDoStatement(statement, condition, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"while\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExpressionStatement(\r\n tn: Tokenizer\r\n ): ExpressionStatement | null {\r\n\r\n // at previous token\r\n\r\n var expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n\r\n var ret = Node.createExpressionStatement(expr);\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseForStatement(\r\n tn: Tokenizer\r\n ): ForStatement | null {\r\n\r\n // at 'for': '(' Statement? Expression? ';' Expression? ')' Statement\r\n\r\n var startPos = tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let initializer: Statement | null = null;\r\n\r\n if (tn.skip(Token.CONST)) {\r\n initializer = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n } else if (tn.skip(Token.LET)) {\r\n initializer = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n } else if (tn.skip(Token.VAR)) {\r\n initializer = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n\r\n } else if (!tn.skip(Token.SEMICOLON)) {\r\n initializer = this.parseExpressionStatement(tn);\r\n if (!initializer) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let condition: ExpressionStatement | null = null;\r\n if (!tn.skip(Token.SEMICOLON)) {\r\n condition = this.parseExpressionStatement(tn);\r\n if (!condition) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let incrementor: Expression | null = null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n incrementor = this.parseExpression(tn);\r\n if (!incrementor) return null;\r\n\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n return Node.createForStatement(\r\n initializer,\r\n condition\r\n ? condition.expression\r\n : null,\r\n incrementor,\r\n statement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseIfStatement(\r\n tn: Tokenizer\r\n ): IfStatement | null {\r\n\r\n // at 'if': '(' Expression ')' Statement ('else' Statement)?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let elseStatement: Statement | null = null;\r\n if (tn.skip(Token.ELSE)) {\r\n elseStatement = this.parseStatement(tn);\r\n if (!elseStatement) return null;\r\n }\r\n return Node.createIfStatement(\r\n condition,\r\n statement,\r\n elseStatement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchStatement(\r\n tn: Tokenizer\r\n ): SwitchStatement | null {\r\n\r\n // at 'switch': '(' Expression ')' '{' SwitchCase* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n let ret = Node.createSwitchStatement(condition, cases, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchCase(\r\n tn: Tokenizer\r\n ): SwitchCase | null {\r\n\r\n var startPos = tn.tokenPos;\r\n var statements: Statement[],\r\n statement: Statement | null;\r\n\r\n // 'case' Expression ':' Statement*\r\n\r\n if (tn.skip(Token.CASE)) {\r\n let label = this.parseExpression(tn);\r\n if (!label) return null;\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(label, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n\r\n // 'default' ':' Statement*\r\n\r\n } else if (tn.skip(Token.DEFAULT)) {\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(null, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._case_or_default_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseThrowStatement(\r\n tn: Tokenizer\r\n ): ThrowStatement | null {\r\n\r\n // at 'throw': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n var ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTryStatement(\r\n tn: Tokenizer\r\n ): TryStatement | null {\r\n\r\n // at 'try':\r\n // '{' Statement* '}'\r\n // ('catch' '(' VariableMember ')' '{' Statement* '}')?\r\n // ('finally' '{' Statement* '}'? ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var stmt: Statement | null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n statements.push(stmt);\r\n }\r\n let catchVariable: IdentifierExpression | null = null;\r\n let catchStatements: Statement[] | null = null;\r\n let finallyStatements: Statement[] | null = null;\r\n if (tn.skip(Token.CATCH)) {\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n catchVariable = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n catchStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n catchStatements.push(stmt);\r\n }\r\n }\r\n if (tn.skip(Token.FINALLY)) {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n finallyStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n finallyStatements.push(stmt);\r\n }\r\n }\r\n if (!(catchStatements || finallyStatements)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"catch\"\r\n );\r\n return null;\r\n }\r\n let ret = Node.createTryStatement(\r\n statements,\r\n catchVariable,\r\n catchStatements,\r\n finallyStatements,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseTypeDeclaration(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier ('<' TypeParameters '>')? '=' Type ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n if (tn.skip(Token.EQUALS)) {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n let ret = Node.createTypeDeclaration(\r\n name,\r\n typeParameters,\r\n type,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVoidStatement(\r\n tn: Tokenizer\r\n ): VoidStatement | null {\r\n\r\n // at 'void': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn, Precedence.GROUPING);\r\n if (!expression) return null;\r\n var ret = Node.createVoidStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseWhileStatement(\r\n tn: Tokenizer\r\n ): WhileStatement | null {\r\n\r\n // at 'while': '(' Expression ')' Statement ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let ret = Node.createWhileStatement(expression, statement, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n // expressions\r\n // see: http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm#climbing\r\n\r\n parseExpressionStart(\r\n tn: Tokenizer\r\n ): Expression | null {\r\n\r\n var token = tn.next(IdentifierHandling.PREFER);\r\n var startPos = tn.tokenPos;\r\n var precedence = determinePrecedenceStart(token);\r\n if (precedence != Precedence.NONE) {\r\n let operand: Expression | null;\r\n\r\n // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions)\r\n\r\n // NewExpression\r\n if (token == Token.NEW) {\r\n operand = this.parseExpression(tn, Precedence.CALL);\r\n if (!operand) return null;\r\n if (operand.kind == NodeKind.CALL) {\r\n return Node.createNewExpression(\r\n (operand).expression,\r\n (operand).typeArguments,\r\n (operand).arguments,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n } else {\r\n operand = this.parseExpression(tn, precedence);\r\n if (!operand) return null;\r\n }\r\n\r\n // UnaryPrefixExpression\r\n if (token == Token.PLUS_PLUS || token == Token.MINUS_MINUS) {\r\n if (\r\n operand.kind != NodeKind.IDENTIFIER &&\r\n operand.kind != NodeKind.ELEMENTACCESS &&\r\n operand.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n operand.range\r\n );\r\n }\r\n }\r\n return Node.createUnaryPrefixExpression(token, operand, tn.range(startPos, tn.pos));\r\n }\r\n\r\n var expr: Expression | null = null;\r\n switch (token) {\r\n\r\n case Token.NULL: return Node.createNullExpression(tn.range());\r\n case Token.TRUE: return Node.createTrueExpression(tn.range());\r\n case Token.FALSE: return Node.createFalseExpression(tn.range());\r\n\r\n // ParenthesizedExpression\r\n // FunctionExpression\r\n case Token.OPENPAREN: {\r\n\r\n // determine whether this is a function expression\r\n if (tn.skip(Token.CLOSEPAREN)) { // must be a function expression (fast route)\r\n return this.parseFunctionExpressionCommon(\r\n tn,\r\n Node.createEmptyIdentifierExpression(tn.range(startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n let state = tn.mark();\r\n let again = true;\r\n do {\r\n switch (tn.next(IdentifierHandling.PREFER)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT: {\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n switch (tn.next()) {\r\n\r\n // if we got here, check for arrow\r\n case Token.CLOSEPAREN: {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n again = false;\r\n break;\r\n }\r\n // fall-through\r\n }\r\n // function expression\r\n case Token.COLON: { // type annotation\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.QUESTION: // optional parameter or ternary\r\n case Token.COMMA: {\r\n break; // continue\r\n }\r\n // parenthesized expression\r\n // case Token.EQUALS: // missing type annotation for simplicity\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n // parenthesized expression\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n } while (again);\r\n tn.reset(state);\r\n\r\n // parse parenthesized\r\n expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return Node.createParenthesizedExpression(expr, tn.range(startPos, tn.pos));\r\n }\r\n // ArrayLiteralExpression\r\n case Token.OPENBRACKET: {\r\n let elementExpressions = new Array();\r\n while (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (tn.peek() == Token.COMMA) {\r\n expr = null; // omitted\r\n } else {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n }\r\n elementExpressions.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACKET)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n }\r\n // ObjectLiteralExpression\r\n case Token.OPENBRACE: {\r\n let startPos = tn.tokenPos;\r\n let names = new Array();\r\n let values = new Array();\r\n let name: IdentifierExpression;\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n if (!tn.skipIdentifier()) {\r\n if (!tn.skip(Token.STRINGLITERAL)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(),\r\n );\r\n return null;\r\n }\r\n name = Node.createIdentifierExpression(tn.readString(), tn.range());\r\n name.set(CommonFlags.QUOTED);\r\n } else {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n names.push(name);\r\n if (tn.skip(Token.COLON)) {\r\n let value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n values.push(value);\r\n } else if (!name.is(CommonFlags.QUOTED)) {\r\n values.push(name);\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createObjectLiteralExpression(names, values, tn.range(startPos, tn.pos));\r\n }\r\n // AssertionExpression (unary prefix)\r\n case Token.LESSTHAN: {\r\n let toType = this.parseType(tn);\r\n if (!toType) return null;\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n expr = this.parseExpression(tn, Precedence.CALL);\r\n if (!expr) return null;\r\n return Node.createAssertionExpression(\r\n AssertionKind.PREFIX,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.IDENTIFIER: {\r\n return Node.createIdentifierExpression(tn.readIdentifier(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.THIS: {\r\n return Node.createThisExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.CONSTRUCTOR: {\r\n return Node.createConstructorExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.SUPER: {\r\n return Node.createSuperExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.STRINGLITERAL: {\r\n return Node.createStringLiteralExpression(tn.readString(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.INTEGERLITERAL: {\r\n return Node.createIntegerLiteralExpression(tn.readInteger(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.FLOATLITERAL: {\r\n return Node.createFloatLiteralExpression(tn.readFloat(), tn.range(startPos, tn.pos));\r\n }\r\n // RegexpLiteralExpression\r\n // note that this also continues on invalid ones so the surrounding AST remains intact\r\n case Token.SLASH: {\r\n let regexpPattern = tn.readRegexpPattern(); // also reports\r\n if (!tn.skip(Token.SLASH)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"/\"\r\n );\r\n return null;\r\n }\r\n return Node.createRegexpLiteralExpression(\r\n regexpPattern,\r\n tn.readRegexpFlags(), // also reports\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.FUNCTION: {\r\n return this.parseFunctionExpression(tn);\r\n }\r\n case Token.CLASS: {\r\n return this.parseClassExpression(tn);\r\n }\r\n default: {\r\n 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 moduleExport of this.program.moduleLevelExports.values()) {\r\n // FIXME: doesn't honor the actual externally visible name\r\n this.visitElement(moduleExport.element);\r\n }\r\n var todo = this.todo;\r\n for (let i = 0; i < todo.length; ) this.visitElement(todo[i]);\r\n }\r\n\r\n /** Visits an element.*/\r\n visitElement(element: Element): void {\r\n if (element.is(CommonFlags.PRIVATE) && !this.includePrivate) return;\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitGlobal(element);\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.visitFunctionInstances(element);\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n this.visitClassInstances(element);\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n if ((element).is(CommonFlags.COMPILED)) this.visitField(element);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prop = element;\r\n let getter = prop.getterPrototype;\r\n if (getter) this.visitFunctionInstances(getter);\r\n let setter = prop.setterPrototype;\r\n if (setter) this.visitFunctionInstances(setter);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n if (hasCompiledMember(element)) this.visitNamespace(element);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n\r\n private visitFunctionInstances(element: FunctionPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitFunction(instance);\r\n }\r\n }\r\n\r\n private visitClassInstances(element: ClassPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitClass(instance);\r\n }\r\n }\r\n\r\n abstract visitGlobal(element: Global): void;\r\n abstract visitEnum(element: Enum): void;\r\n abstract visitFunction(element: Function): void;\r\n abstract visitClass(element: Class): void;\r\n abstract visitInterface(element: Interface): void;\r\n abstract visitField(element: Field): void;\r\n abstract visitNamespace(element: Element): void;\r\n}\r\n\r\n/** A WebIDL definitions builder. */\r\nexport class IDLBuilder extends ExportsWalker {\r\n\r\n /** Builds WebIDL definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new IDLBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n if (isConst) {\r\n switch (element.constantValueKind) {\r\n case ConstantValueKind.INTEGER: {\r\n sb.push(\" = \");\r\n sb.push(i64_to_string(element.constantIntegerValue));\r\n break;\r\n }\r\n case ConstantValueKind.FLOAT: {\r\n sb.push(\" = \");\r\n sb.push(element.constantFloatValue.toString());\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n let isConst = (member).is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"readonly \");\r\n sb.push(\"unsigned long \");\r\n sb.push(name);\r\n if (isConst) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n }\r\n for (let member of members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) this.visitElement(member);\r\n }\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(this.typeToString(parameters[i]));\r\n sb.push(\" \");\r\n sb.push(signature.getParameterName(i));\r\n }\r\n sb.push(\");\\n\");\r\n var members = element.members;\r\n if (members && members.size) {\r\n indent(sb, this.indentLevel);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n // TODO\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n // TODO\r\n }\r\n\r\n visitNamespace(element: Namespace): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"byte\";\r\n case TypeKind.I16: return \"short\";\r\n case TypeKind.I32: return \"long\";\r\n case TypeKind.I64: return \"long long\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"long long\" : \"long\";\r\n case TypeKind.U8: return \"octet\";\r\n case TypeKind.U16: return \"unsigned short\";\r\n case TypeKind.U32: return \"unsigned long\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"unsigned long long\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"unsigned long long\" : \"unsigned long\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"boolean\";\r\n case TypeKind.F32: return \"unrestricted float\";\r\n case TypeKind.F64: return \"unrestricted double\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"interface ASModule {\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n/** A TypeScript definitions builder. */\r\nexport class TSDBuilder extends ExportsWalker {\r\n\r\n /** Builds TypeScript definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new TSDBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.STATIC)) {\r\n if (isConst) sb.push(\"static readonly \");\r\n else sb.push(\"static \");\r\n } else {\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"var \");\r\n }\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"enum \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n let numMembers = members.size;\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n indent(sb, this.indentLevel);\r\n sb.push(name);\r\n if (member.is(CommonFlags.INLINED)) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\",\\n\");\r\n --numMembers;\r\n }\r\n }\r\n if (numMembers) this.visitNamespace(element);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n if (element.isAny(CommonFlags.PRIVATE | CommonFlags.SET)) return;\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.GET)) {\r\n sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally\r\n sb.push(\": \");\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\";\\n\");\r\n return;\r\n } else {\r\n if (!element.isAny(CommonFlags.STATIC | CommonFlags.INSTANCE)) sb.push(\"function \");\r\n sb.push(element.simpleName);\r\n }\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(signature.getParameterName(i));\r\n sb.push(\": \");\r\n sb.push(this.typeToString(parameters[i]));\r\n }\r\n if (element.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.SET)) {\r\n sb.push(\")\");\r\n } else {\r\n sb.push(\"): \");\r\n sb.push(this.typeToString(signature.returnType));\r\n }\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n var isInterface = element.kind == ElementKind.INTERFACE;\r\n indent(sb, this.indentLevel++);\r\n if (isInterface) {\r\n sb.push(\"interface \");\r\n } else {\r\n if (element.is(CommonFlags.ABSTRACT)) sb.push(\"abstract \");\r\n sb.push(\"class \");\r\n }\r\n sb.push(element.simpleName);\r\n var base = element.base;\r\n if (base && base.is(CommonFlags.COMPILED | CommonFlags.MODULE_EXPORT)) {\r\n sb.push(\" extends \");\r\n sb.push(base.simpleName); // TODO: fqn\r\n }\r\n sb.push(\" {\\n\");\r\n var members = element.prototype.members; // static\r\n if (members) {\r\n for (let member of members.values()) {\r\n this.visitElement(member);\r\n }\r\n }\r\n var ctor = element.constructorInstance;\r\n if (ctor) this.visitFunction(ctor);\r\n members = element.members; // instance\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n if (element.is(CommonFlags.PRIVATE)) return;\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.READONLY)) sb.push(\"readonly \");\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitNamespace(element: Element): void {\r\n var members = element.members;\r\n if (members && members.size) {\r\n let sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"namespace \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"I64\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"I64\" : \"i32\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"U64\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"U64\" : \"u32\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"declare module ASModule {\\n\");\r\n sb.push(\" type i8 = number;\\n\");\r\n sb.push(\" type i16 = number;\\n\");\r\n sb.push(\" type i32 = number;\\n\");\r\n sb.push(\" type u8 = number;\\n\");\r\n sb.push(\" type u16 = number;\\n\");\r\n sb.push(\" type u32 = number;\\n\");\r\n sb.push(\" type f32 = number;\\n\");\r\n sb.push(\" type f64 = number;\\n\");\r\n sb.push(\" type bool = any;\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n sb.push(\"export default ASModule;\\n\");\r\n return this.sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n/** Tests if a namespace-like element has at least one compiled member. */\r\nfunction hasCompiledMember(element: Element): bool {\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (member.is(CommonFlags.COMPILED) || hasCompiledMember(member)) return true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n","/**\r\n * A decompiler that generates low-level AssemblyScript from WebAssembly binaries.\r\n * @module decompiler\r\n *//***/\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n ExpressionId,\r\n UnaryOp,\r\n BinaryOp,\r\n HostOp,\r\n FunctionRef,\r\n ExpressionRef,\r\n Index,\r\n getFunctionName,\r\n getFunctionBody,\r\n getFunctionParamCount,\r\n getFunctionParamType,\r\n getFunctionResultType,\r\n getExpressionId,\r\n getExpressionType,\r\n getBlockName,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getIfCondition,\r\n getIfTrue,\r\n getIfFalse,\r\n getLoopName,\r\n getLoopBody,\r\n getBreakName,\r\n getBreakCondition,\r\n getGetLocalIndex,\r\n getSetLocalIndex,\r\n getSetLocalValue,\r\n getLoadOffset,\r\n getLoadPtr,\r\n getStoreOffset,\r\n getStorePtr,\r\n getStoreValue,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getUnaryOp,\r\n getUnaryValue,\r\n getBinaryOp,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getSelectThen,\r\n getSelectElse,\r\n getSelectCondition,\r\n getDropValue,\r\n getReturnValue,\r\n getHostOp,\r\n getHostOperand\r\n} from \"./module\";\r\n\r\n// TODO :-)\r\n\r\nexport class Decompiler {\r\n\r\n static decompile(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n }\r\n\r\n text: string[] = [];\r\n functionId: i32 = 0;\r\n\r\n constructor() { }\r\n\r\n /** Decompiles a module to an AST that can then be serialized. */\r\n decompile(module: Module): void {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n decompileFunction(func: FunctionRef): void {\r\n var name = getFunctionName(func) || \"$\" + this.functionId.toString(10);\r\n var body = getFunctionBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (let i: Index = 0, k: Index = getFunctionParamCount(func); i < k; ++i) {\r\n if (i > 0) this.push(\", \");\r\n this.push(\"$\");\r\n this.push(i.toString(10));\r\n this.push(\": \");\r\n this.push(nativeTypeToType(getFunctionParamType(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(getFunctionResultType(func)));\r\n this.push(\" \");\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"\\n}\\n\");\r\n }\r\n ++this.functionId;\r\n }\r\n\r\n decompileExpression(expr: ExpressionRef): void {\r\n var id = getExpressionId(expr);\r\n var type = getExpressionType(expr);\r\n\r\n var nested: ExpressionRef;\r\n var string: string | null;\r\n var i: Index, k: Index;\r\n\r\n switch (id) {\r\n case ExpressionId.Block: { // TODO: magic\r\n if ((string = getBlockName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = getBlockChildCount(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(getBlockChild(expr, i));\r\n }\r\n this.push(\"}\\n\");\r\n return;\r\n }\r\n case ExpressionId.If: {\r\n if (type == NativeType.None) {\r\n this.push(\"if (\");\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(getIfTrue(expr));\r\n if (nested = getIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(getIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(getIfFalse(expr));\r\n }\r\n return;\r\n }\r\n case ExpressionId.Loop: {\r\n if ((string = getLoopName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(getLoopBody(expr));\r\n this.push(\"while (0);\\n\");\r\n }\r\n case ExpressionId.Break: {\r\n if (nested = getBreakCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = getBreakName(expr)) != null) {\r\n this.push(\"break \");\r\n this.push(string);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"break;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Switch:\r\n case ExpressionId.Call:\r\n case ExpressionId.CallImport:\r\n case ExpressionId.CallIndirect: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.GetLocal: {\r\n this.push(\"$\");\r\n this.push(getGetLocalIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(getSetLocalIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(getSetLocalValue(expr));\r\n return;\r\n }\r\n case ExpressionId.GetGlobal:\r\n case ExpressionId.SetGlobal: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.Load: {\r\n this.push(\"load<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getLoadOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getLoadPtr(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Store: {\r\n this.push(\"store<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getStoreOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getStorePtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getStoreValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Const: {\r\n switch (type) {\r\n case NativeType.I32: {\r\n this.push(getConstValueI32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.I64: {\r\n this.push(\r\n i64_to_string(\r\n i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(getConstValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(getConstValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NegF32:\r\n case UnaryOp.NegF64: {\r\n this.push(\"-\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: {\r\n this.push(\"!\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Binary: { // TODO: precedence\r\n switch (getBinaryOp(expr)) {\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.SubI32:\r\n case BinaryOp.SubI64:\r\n case BinaryOp.SubF32:\r\n case BinaryOp.SubF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.MulI32:\r\n case BinaryOp.MulI64:\r\n case BinaryOp.MulF32:\r\n case BinaryOp.MulF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivI32:\r\n case BinaryOp.DivI64:\r\n case BinaryOp.DivF32:\r\n case BinaryOp.DivF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n case ExpressionId.Select: {\r\n this.push(\"select<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.decompileExpression(getSelectThen(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectElse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(getDropValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = getReturnValue(expr)) {\r\n this.push(\"return \");\r\n this.decompileExpression(nested);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"return;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Host: {\r\n switch (getHostOp(expr)) {\r\n case HostOp.CurrentMemory: {\r\n this.push(\"memory.size()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"memory.grow(\");\r\n this.decompileExpression(getHostOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Nop: {\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Unreachable: {\r\n this.push(\"unreachable()\");\r\n return;\r\n }\r\n case ExpressionId.AtomicCmpxchg:\r\n case ExpressionId.AtomicRMW:\r\n case ExpressionId.AtomicWait:\r\n case ExpressionId.AtomicWake:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n private push(text: string): void {\r\n // mostly here so we can add debugging if necessary\r\n this.text.push(text);\r\n }\r\n\r\n finish(): string {\r\n var ret = this.text.join(\"\");\r\n this.text = [];\r\n return ret;\r\n }\r\n}\r\n\r\nfunction nativeTypeToType(type: NativeType): string {\r\n switch (type) {\r\n case NativeType.None: return \"void\";\r\n case NativeType.I32: return \"i32\";\r\n case NativeType.I64: return \"i64\";\r\n case NativeType.F32: return \"f32\";\r\n case NativeType.F64: return \"f64\";\r\n case NativeType.Unreachable: throw new Error(\"unreachable type\");\r\n case NativeType.Auto: throw new Error(\"auto type\");\r\n default: throw new Error(\"unexpected type\");\r\n }\r\n}\r\n","/**\r\n * 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 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 Global,\r\n DecoratorFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n ReportMode\r\n} from \"./resolver\";\r\n\r\nimport {\r\n CommonFlags\r\n} from \"./common\";\r\n\r\n/** Compiles a call to a built-in function. */\r\nexport function compileCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n\r\n var arg0: ExpressionRef,\r\n arg1: ExpressionRef,\r\n arg2: ExpressionRef,\r\n ret: ExpressionRef;\r\n\r\n // NOTE that some implementations below make use of the select expression where straight-forward.\r\n // whether worth or not should probably be tested once it's known if/how embedders handle it.\r\n // search: createSelect\r\n\r\n switch (prototype.internalName) {\r\n\r\n // types\r\n\r\n case \"isInteger\": { // isInteger() / isInteger(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.INTEGER) && !type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isFloat\": { // isFloat() / isFloat(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.FLOAT)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isSigned\": { // isSigned() / isSigned(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.SIGNED)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isReference\": { // isReference() / isReference(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n compiler.currentType = Type.bool;\r\n return type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isString\": { // isString() / isString(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n if (classType) {\r\n let stringInstance = compiler.program.stringInstance;\r\n if (stringInstance && classType.isAssignableTo(stringInstance)) return module.createI32(1);\r\n }\r\n return module.createI32(0);\r\n }\r\n case \"isArray\": { // isArray() / isArray(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n return classType != null && classType.lookupOverload(OperatorKind.INDEXED_GET) != null\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isDefined\": { // isDefined(expression) -> bool\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let element = compiler.resolver.resolveExpression(operands[0], compiler.currentFunction, ReportMode.SWALLOW);\r\n return module.createI32(element ? 1 : 0);\r\n }\r\n case \"isConstant\": { // isConstant(expression) -> bool\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let expr = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n compiler.currentType = Type.bool;\r\n return module.createI32(getExpressionId(expr) == ExpressionId.Const ? 1 : 0);\r\n }\r\n\r\n // math\r\n\r\n case \"clz\": { // clz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ClzI64\r\n : UnaryOp.ClzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.ClzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ctz\": { // ctz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.NONE, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.CtzI64\r\n : UnaryOp.CtzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.CtzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"popcnt\": { // popcnt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.PopcntI64\r\n : UnaryOp.PopcntI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.PopcntI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"rotl\": { // rotl(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotlI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotlI64\r\n : BinaryOp.RotlI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotlI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflows\r\n }\r\n case \"rotr\": { // rotr(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotrI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotrI64\r\n : BinaryOp.RotrI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotrI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflowws\r\n }\r\n case \"abs\": { // abs(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n // possibly overflows, e.g. abs(-128) == 128\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createSelect( // x > 0 ? x : 0-x\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI32, // ifFalse\r\n module.createI32(0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32)\r\n ),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n module.createI32(0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n compiler.options.usizeType.toNativeZero(module),\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n ),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType),\r\n compiler.options.usizeType.toNativeZero(module)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI64,\r\n module.createI64(0, 0),\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n ),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n module.createI64(0, 0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.BOOL: {\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.AbsF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.AbsF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"max\": { // max(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MaxF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MaxF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"min\": { // min(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MinF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MinF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ceil\": { // ceil(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.CeilF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.CeilF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"floor\": { // floor(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.FloorF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.FloorF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"copysign\": { // copysign(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) { // TODO: does an integer version make sense?\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.CopysignF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.CopysignF64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"nearest\": { // nearest(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.NearestF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.NearestF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"reinterpret\": { // reinterpret(value: *) -> T\r\n if (operands.length != 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (typeArguments[0].kind) {\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF32, arg0);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF64, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (typeArguments[0].is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.f64\r\n : Type.f32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ReinterpretF64\r\n : UnaryOp.ReinterpretF32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI64, arg0);\r\n break;\r\n }\r\n default: { // small integers and void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return ret;\r\n }\r\n case \"sqrt\": { // sqrt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) { // TODO: integer versions (that return f64 or convert)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.SqrtF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.SqrtF64, arg0);\r\n break;\r\n }\r\n // case TypeKind.VOID:\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"trunc\": { // trunc(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments && typeArguments.length) {\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n // TODO: truncate to contextual type directly (if not void etc.)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.TruncF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.TruncF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n // memory access\r\n\r\n case \"load\": { // load(offset: usize, constantOffset?: usize) -> *\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let offset = operands.length == 2 ? evaluateConstantOffset(compiler, operands[1]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return module.createLoad(\r\n typeArguments[0].byteSize,\r\n typeArguments[0].is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n arg0,\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n contextualType.size > typeArguments[0].size\r\n ? (compiler.currentType = contextualType).toNativeType()\r\n : (compiler.currentType = typeArguments[0]).toNativeType(),\r\n offset\r\n );\r\n }\r\n case \"store\": { // store(offset: usize, value: *, constantOffset?: usize) -> void\r\n compiler.currentType = Type.void;\r\n if (operands.length < 2 || operands.length > 3) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n typeArguments[0],\r\n typeArguments[0].is(TypeFlags.INTEGER)\r\n ? ConversionKind.NONE // no need to convert to small int (but now might result in a float)\r\n : ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let type: Type;\r\n if (\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n (\r\n !compiler.currentType.is(TypeFlags.INTEGER) || // float to int\r\n compiler.currentType.size < typeArguments[0].size // int to larger int (clear garbage bits)\r\n )\r\n ) {\r\n arg1 = compiler.convertExpression(\r\n arg1,\r\n compiler.currentType, typeArguments[0],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE, // still clears garbage bits\r\n operands[1]\r\n );\r\n type = typeArguments[0];\r\n } else {\r\n type = compiler.currentType;\r\n }\r\n let offset = operands.length == 3 ? evaluateConstantOffset(compiler, operands[2]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n return module.createStore(typeArguments[0].byteSize, arg0, arg1, type.toNativeType(), offset);\r\n }\r\n case \"sizeof\": { // sizeof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(byteSize);\r\n } else {\r\n ret = module.createI64(byteSize, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(byteSize, 0);\r\n } else {\r\n ret = module.createI32(byteSize);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"alignof\": { // alignof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n let alignLog2: i32;\r\n switch (byteSize) {\r\n case 1: { alignLog2 = 0; break; }\r\n case 2: { alignLog2 = 1; break; }\r\n case 4: { alignLog2 = 2; break; }\r\n case 8: { alignLog2 = 3; break; }\r\n default: { assert(false); return module.createUnreachable(); }\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(alignLog2);\r\n } else {\r\n ret = module.createI64(alignLog2, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(alignLog2, 0);\r\n } else {\r\n ret = module.createI32(alignLog2);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"offsetof\": { // offsetof(fieldName?: string) -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length > 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let classType = typeArguments[0].classReference;\r\n if (!classType) {\r\n compiler.error( // TODO: better error\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let offset: i32;\r\n if (operands.length) {\r\n if (\r\n operands[0].kind != NodeKind.LITERAL ||\r\n (operands[0]).literalKind != LiteralKind.STRING\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.String_literal_expected,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let fieldName = (operands[0]).value;\r\n let field = classType.members ? classType.members.get(fieldName) : null;\r\n if (!(field && field.kind == ElementKind.FIELD)) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_has_no_property_1,\r\n operands[0].range, classType.internalName, fieldName\r\n );\r\n return module.createUnreachable();\r\n }\r\n offset = (field).memoryOffset;\r\n } else {\r\n offset = classType.currentMemoryOffset;\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n return module.createI32(offset);\r\n } else {\r\n return module.createI64(offset);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n return module.createI64(offset);\r\n } else {\r\n return module.createI32(offset);\r\n }\r\n }\r\n }\r\n\r\n // control flow\r\n\r\n case \"select\": { // select(ifTrue: T, ifFalse: T, condition: bool) -> T\r\n if (operands.length != 3) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n let type = compiler.currentType;\r\n arg1 = compiler.compileExpression(operands[1], type, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n arg2 = compiler.makeIsTrueish(\r\n compiler.compileExpressionRetainType(operands[2], Type.bool, WrapMode.NONE),\r\n compiler.currentType\r\n );\r\n compiler.currentType = type;\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n default: { // any other value type\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unreachable\": { // unreachable() -> *\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n\r\n // host operations\r\n\r\n case \"memory.size\": { // memory.size() -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.CurrentMemory);\r\n }\r\n case \"memory.grow\": { // memory.grow(pages: i32) -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n arg0 = module.createUnreachable();\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.GrowMemory, null, [ arg0 ]);\r\n }\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n case \"memory.copy\": { // memory.copy(dest: usize, src: usize: n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.MoveMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n case \"memory.fill\": { // memory.fill(dest: usize, value: u8, n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n Type.u32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.SetMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n\r\n // other\r\n\r\n case \"changetype\": { // changetype(value: *) -> T\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpressionRetainType(\r\n operands[0],\r\n typeArguments[0],\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.size != typeArguments[0].size) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // if (reportNode.range.source.sourceKind != SourceKind.STDLIB)\r\n // compiler.warning(DiagnosticCode.Operation_is_unsafe, reportNode.range);\r\n return arg0; // any usize to any usize\r\n }\r\n case \"assert\": { // assert(isTrueish: T, message?: string) -> T with T != null\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else if (operands.length > 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.bool, WrapMode.WRAP);\r\n }\r\n\r\n let type = compiler.currentType;\r\n compiler.currentType = type.nonNullableType;\r\n\r\n // just return ifTrueish if assertions are disabled, or simplify if dropped anyway\r\n if (compiler.options.noAssert) {\r\n if (contextualType == Type.void) {\r\n compiler.currentType = Type.void;\r\n return module.createNop();\r\n }\r\n return arg0;\r\n }\r\n\r\n let abort = compileAbort(compiler, operands.length == 2 ? operands[1] : null, reportNode);\r\n\r\n compiler.currentType = type.nonNullableType;\r\n\r\n if (contextualType == Type.void) { // simplify if dropped anyway\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n // TODO: also check for NaN in float assertions, as in `Boolean(NaN) -> false`?\r\n case TypeKind.F32: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n arg0,\r\n module.createF32(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n arg0,\r\n module.createF64(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n default: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.I64)\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F32)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f64, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F64)\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unchecked\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = compiler.currentFunction.flow;\r\n flow.set(FlowFlags.UNCHECKED_CONTEXT);\r\n ret = compiler.compileExpressionRetainType(operands[0], contextualType, WrapMode.NONE);\r\n flow.unset(FlowFlags.UNCHECKED_CONTEXT);\r\n return ret;\r\n }\r\n case \"call_indirect\": { // call_indirect(target: Function | u32, ...args: *[]) -> T\r\n if (operands.length < 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let returnType: Type;\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n returnType = typeArguments[0];\r\n } else {\r\n returnType = contextualType;\r\n }\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n if (compiler.currentType.kind != TypeKind.U32) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let numOperands = operands.length - 1;\r\n let operandExprs = new Array(numOperands);\r\n let signatureParts = new Array(numOperands + 1);\r\n let nativeReturnType = returnType.toNativeType();\r\n let nativeParamTypes = new Array(numOperands);\r\n for (let i = 0; i < numOperands; ++i) {\r\n operandExprs[i] = compiler.compileExpressionRetainType(operands[1 + i], Type.i32, WrapMode.NONE);\r\n let operandType = compiler.currentType;\r\n signatureParts[i] = operandType.toSignatureString();\r\n nativeParamTypes[i] = operandType.toNativeType();\r\n }\r\n signatureParts[numOperands] = returnType.toSignatureString();\r\n let typeName = signatureParts.join(\"\");\r\n let typeRef = module.getFunctionTypeBySignature(nativeReturnType, nativeParamTypes);\r\n if (!typeRef) typeRef = module.addFunctionType(typeName, nativeReturnType, nativeParamTypes);\r\n compiler.currentType = returnType;\r\n // of course this can easily result in a 'RuntimeError: function signature mismatch' trap and\r\n // thus must be used with care. it exists because it *might* be useful in specific scenarios.\r\n return module.createCallIndirect(arg0, operandExprs, typeName);\r\n }\r\n\r\n // user-defined diagnostic macros\r\n\r\n case \"ERROR\": {\r\n compiler.error(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n case \"WARNING\": {\r\n compiler.warning(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createNop();\r\n }\r\n case \"INFO\": {\r\n compiler.info(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createNop();\r\n }\r\n\r\n // conversions\r\n\r\n case \"i8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"isize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"usize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"bool\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.bool;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.bool,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n // gc\r\n\r\n case \"iterateRoots\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n let expr = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n let type = compiler.currentType;\r\n let signatureReference = type.signatureReference;\r\n compiler.currentType = Type.void;\r\n if (\r\n !type.is(TypeFlags.REFERENCE) ||\r\n !signatureReference ||\r\n signatureReference.parameterTypes.length != 1 ||\r\n signatureReference.parameterTypes[0] != compiler.options.usizeType\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, type.toString(), \"(ref: usize) => void\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n // just emit a call even if the function doesn't yet exist\r\n compiler.needsIterateRoots = true;\r\n return module.createCall(\"~iterateRoots\", [ expr ], NativeType.None);\r\n }\r\n }\r\n var expr = deferASMCall(compiler, prototype, operands, contextualType, reportNode);\r\n if (expr) {\r\n if (typeArguments && typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return expr;\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n}\r\n\r\n/** Defers an inline-assembler-like call to a built-in function. */\r\nfunction deferASMCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (prototype.internalName) {\r\n\r\n // TODO: Operators can't be just deferred (don't have a corresponding generic built-in)\r\n // add, sub, mul, div_s, div_u, rem_s, rem_u\r\n // and, or, xor, shl, shr_u, shr_s\r\n // eq, eqz, ne, lt_s, lt_u, le_s, le_u, gt_s, gt_u, ge_s, ge_u\r\n\r\n case \"i32.clz\": return deferASM(\"clz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.clz\": return deferASM(\"clz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.ctz\": return deferASM(\"ctz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.ctz\": return deferASM(\"ctz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.popcnt\": return deferASM(\"popcnt\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.popcnt\": return deferASM(\"popcnt\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotl\": return deferASM(\"rotl\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotl\": return deferASM(\"rotl\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotr\": return deferASM(\"rotr\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotr\": return deferASM(\"rotr\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.abs\": return deferASM(\"abs\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.abs\": return deferASM(\"abs\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.max\": return deferASM(\"max\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.max\": return deferASM(\"max\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.min\": return deferASM(\"min\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.min\": return deferASM(\"min\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.ceil\": return deferASM(\"ceil\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.ceil\": return deferASM(\"ceil\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.floor\": return deferASM(\"floor\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.floor\": return deferASM(\"floor\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.copysign\": return deferASM(\"copysign\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.copysign\": return deferASM(\"copysign\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.nearest\": return deferASM(\"nearest\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.nearest\": return deferASM(\"nearest\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.reinterpret_f32\": return deferASM(\"reinterpret\", compiler, Type.i32, operands, Type.f32, reportNode);\r\n case \"i64.reinterpret_f64\": return deferASM(\"reinterpret\", compiler, Type.i64, operands, Type.f64, reportNode);\r\n case \"f32.reinterpret_i32\": return deferASM(\"reinterpret\", compiler, Type.f32, operands, Type.i32, reportNode);\r\n case \"f64.reinterpret_i64\": return deferASM(\"reinterpret\", compiler, Type.f64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.sqrt\": return deferASM(\"sqrt\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.sqrt\": return deferASM(\"sqrt\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.trunc\": return deferASM(\"trunc\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.trunc\": return deferASM(\"trunc\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u32, reportNode);\r\n case \"i32.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u32, reportNode);\r\n case \"i32.load\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u64, reportNode);\r\n case \"i64.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u64, reportNode);\r\n case \"i64.load32_s\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.load32_u\": return deferASM(\"load\", compiler, Type.u32, operands, Type.u64, reportNode);\r\n case \"i64.load\": return deferASM(\"load\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.load\": return deferASM(\"load\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.load\": return deferASM(\"load\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.store\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.store32\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.store\": return deferASM(\"store\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.store\": return deferASM(\"store\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.store\": return deferASM(\"store\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n }\r\n return 0;\r\n}\r\n\r\n/** A helper for deferring inline-assembler-like calls to built-in functions. */\r\nfunction deferASM(\r\n name: string,\r\n compiler: Compiler,\r\n typeArgument: Type,\r\n operands: Expression[],\r\n valueType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var prototype = assert(compiler.program.elementsLookup.get(name));\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return compileCall(compiler, prototype, [ typeArgument ], operands, valueType, reportNode);\r\n}\r\n\r\n/** Evaluates the constant type of a type argument *or* expression. */\r\nfunction evaluateConstantType(\r\n compiler: Compiler,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n reportNode: Node\r\n): Type | null {\r\n if (operands.length == 0) { // requires type argument\r\n if (!typeArguments || typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return null;\r\n }\r\n return typeArguments[0];\r\n }\r\n if (operands.length == 1) { // optional type argument\r\n if (typeArguments) {\r\n if (typeArguments.length == 1) {\r\n compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n if (typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return null;\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n } else {\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n return compiler.currentType;\r\n }\r\n if (typeArguments && typeArguments.length > 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return null;\r\n}\r\n\r\n/** Evaluates a `constantOffset` argument.*/\r\nfunction evaluateConstantOffset(compiler: Compiler, expression: Expression): i32 {\r\n var expr: ExpressionRef;\r\n var value: i32;\r\n if (compiler.options.isWasm64) {\r\n expr = compiler.precomputeExpression(expression, Type.usize64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I64 ||\r\n getConstValueI64High(expr) != 0 ||\r\n (value = getConstValueI64Low(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n } else {\r\n expr = compiler.precomputeExpression(expression, Type.usize32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I32 ||\r\n (value = getConstValueI32(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n }\r\n return value;\r\n}\r\n\r\n/** Compiles a memory allocation for an instance of the specified class. */\r\nexport function compileAllocate(\r\n compiler: Compiler,\r\n classInstance: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n assert(classInstance.program == program);\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n var allocateInstance = program.memoryAllocateInstance;\r\n if (!allocateInstance) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, \"memory.allocate\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!compiler.compileFunction(allocateInstance)) return module.createUnreachable();\r\n\r\n compiler.currentType = classInstance.type;\r\n return module.createCall(\r\n allocateInstance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(classInstance.currentMemoryOffset)\r\n : module.createI32(classInstance.currentMemoryOffset)\r\n ],\r\n options.nativeSizeType\r\n );\r\n}\r\n\r\n/** Compiles an abort wired to the conditionally imported 'abort' function. */\r\nexport function compileAbort(\r\n compiler: Compiler,\r\n message: Expression | null,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n var module = compiler.module;\r\n\r\n var stringType = program.typesLookup.get(\"string\");\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortInstance = program.abortInstance;\r\n if (!(abortInstance && compiler.compileFunction(abortInstance))) return module.createUnreachable();\r\n\r\n var messageArg = message != null\r\n ? compiler.compileExpression(message, stringType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : stringType.toNativeZero(module);\r\n\r\n var filenameArg = compiler.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\r\n/** Compiles the iterateRoots function if requires. */\r\nexport function compileIterateRoots(compiler: Compiler): void {\r\n var module = compiler.module;\r\n var exprs = new Array();\r\n\r\n for (let element of compiler.program.elementsLookup.values()) {\r\n if (element.kind != ElementKind.GLOBAL) continue;\r\n let global = element;\r\n let classReference = global.type.classReference;\r\n if (\r\n global.is(CommonFlags.COMPILED) &&\r\n classReference !== null &&\r\n !classReference.hasDecorator(DecoratorFlags.UNMANAGED)\r\n ) {\r\n if (global.is(CommonFlags.INLINED)) {\r\n let value = global.constantIntegerValue;\r\n exprs.push(\r\n module.createCallIndirect(\r\n module.createGetLocal(0, NativeType.I32),\r\n [\r\n compiler.options.isWasm64\r\n ? module.createI64(i64_low(value), i64_high(value))\r\n : module.createI32(i64_low(value))\r\n ],\r\n \"iv\"\r\n )\r\n );\r\n } else {\r\n exprs.push(\r\n module.createCallIndirect(\r\n module.createGetLocal(0, NativeType.I32),\r\n [\r\n module.createGetGlobal(\r\n global.internalName,\r\n compiler.options.nativeSizeType\r\n )\r\n ],\r\n \"iv\"\r\n )\r\n );\r\n }\r\n }\r\n }\r\n var typeRef = compiler.ensureFunctionType([ Type.i32 ], Type.void);\r\n module.addFunction(\"~iterateRoots\", typeRef, [],\r\n exprs.length\r\n ? module.createBlock(null, exprs)\r\n : module.createNop()\r\n );\r\n}\r\n","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","/** @module std/portable *//***/\r\n\r\nvar globalScope = typeof window !== \"undefined\" && window || typeof global !== \"undefined\" && global || self;\r\n\r\nglobalScope.ASC_TARGET = 0;\r\n\r\nObject.defineProperties(\r\n globalScope[\"i8\"] = function i8(value) { return value << 24 >> 24; }\r\n, {\r\n \"MIN_VALUE\": { value: -128, writable: false },\r\n \"MAX_VALUE\": { value: 127, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i16\"] = function i16(value) { return value << 16 >> 16; }\r\n, {\r\n \"MIN_VALUE\": { value: -32768, writable: false },\r\n \"MAX_VALUE\": { value: 32767, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i32\"] = globalScope[\"isize\"] = function i32(value) { return value | 0; }\r\n, {\r\n \"MIN_VALUE\": { value: -2147483648, writable: false },\r\n \"MAX_VALUE\": { value: 2147483647, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u8\"] = function u8(value) { return value & 0xff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 255, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u16\"] = function u16(value) { return value & 0xffff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 65535, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u32\"] = globalScope[\"usize\"] = function u32(value) { return value >>> 0; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 4294967295, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"bool\"] = function bool(value) { return !!value; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 1, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f32\"] = function f32(value) { return Math.fround(value); }\r\n, {\r\n \"MIN_VALUE\": { value: Math.fround(-3.40282347e+38), writable: false },\r\n \"MAX_VALUE\": { value: Math.fround(3.40282347e+38), writable: false },\r\n \"MIN_POSITIVE_VALUE\": { value: Math.fround(1.175494351e-38), writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -16777215, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 16777215, writable: false },\r\n \"EPSILON\": { value: Math.fround(1.19209290e-07), writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f64\"] = function f64(value) { return +value; }\r\n, {\r\n \"MIN_VALUE\": { value: -1.7976931348623157e+308, writable: false },\r\n \"MAX_VALUE\": { value: 1.7976931348623157e+308, writable: false },\r\n \"MIN_POSITIVE_VALUE\": { value: 2.2250738585072014e-308 , writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -9007199254740991, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 9007199254740991, writable: false },\r\n \"EPSILON\": { value: 2.2204460492503131e-16, writable: false }\r\n});\r\n\r\nglobalScope[\"clz\"] = Math.clz32;\r\n\r\nglobalScope[\"ctz\"] = function ctz(value) {\r\n var c = Math.clz32(value & -value);\r\n return value ? 31 - c : c;\r\n};\r\n\r\nglobalScope[\"popcnt\"] = function popcnt(value) {\r\n value -= value >>> 1 & 0x55555555;\r\n value = (value & 0x33333333) + (value >>> 2 & 0x33333333);\r\n return (((value + (value >>> 4)) & 0x0F0F0F0F) * 0x01010101) >>> 24;\r\n};\r\n\r\nglobalScope[\"rotl\"] = function rotl(value, shift) {\r\n shift &= 31;\r\n return (value << shift) | (value >>> (32 - shift));\r\n};\r\n\r\nglobalScope[\"rotr\"] = function rotr(value, shift) {\r\n shift &= 31;\r\n return (value >>> shift) | (value << (32 - shift));\r\n};\r\n\r\nglobalScope[\"abs\"] = Math.abs;\r\n\r\nglobalScope[\"max\"] = Math.max;\r\n\r\nglobalScope[\"min\"] = Math.min;\r\n\r\nglobalScope[\"ceil\"] = Math.ceil;\r\n\r\nglobalScope[\"floor\"] = Math.floor;\r\n\r\n// Adopt code from https://github.com/rfk/wasm-polyfill\r\nglobalScope[\"nearest\"] = function nearest(value) {\r\n if (Math.abs(value - Math.trunc(value)) === 0.5) {\r\n return 2.0 * Math.round(value * 0.5);\r\n }\r\n return Math.round(value);\r\n};\r\n\r\nglobalScope[\"select\"] = function select(ifTrue, ifFalse, condition) {\r\n return condition ? ifTrue : ifFalse;\r\n};\r\n\r\nglobalScope[\"sqrt\"] = Math.sqrt;\r\n\r\nglobalScope[\"trunc\"] = Math.trunc;\r\n\r\nglobalScope[\"copysign\"] = function copysign(x, y) {\r\n return Math.abs(x) * Math.sign(y);\r\n};\r\n\r\nglobalScope[\"bswap\"] = function bswap(value) {\r\n var a = value >> 8 & 0x00FF00FF;\r\n var b = (value & 0x00FF00FF) << 8;\r\n value = a | b;\r\n a = value >> 16 & 0x0000FFFF;\r\n b = (value & 0x0000FFFF) << 16;\r\n return a | b;\r\n};\r\n\r\nglobalScope[\"bswap16\"] = function bswap16(value) {\r\n return ((value << 8) & 0xFF00) | ((value >> 8) & 0x00FF) | (value & 0xFFFF0000);\r\n};\r\n\r\nfunction UnreachableError() {\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, UnreachableError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nUnreachableError.prototype = Object.create(Error.prototype);\r\nUnreachableError.prototype.name = \"UnreachableError\";\r\nUnreachableError.prototype.message = \"unreachable\";\r\n\r\nglobalScope[\"unreachable\"] = function unreachable() {\r\n throw new UnreachableError();\r\n};\r\n\r\nfunction AssertionError(message) {\r\n this.message = message || \"assertion failed\";\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, AssertionError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nAssertionError.prototype = Object.create(Error.prototype);\r\nAssertionError.prototype.name = \"AssertionError\";\r\n\r\nglobalScope[\"assert\"] = function assert(isTrueish, message) {\r\n if (isTrueish) return isTrueish;\r\n throw new AssertionError(message);\r\n};\r\n\r\nglobalScope[\"changetype\"] = function changetype(value) {\r\n return value;\r\n};\r\n\r\nglobalScope[\"parseI32\"] = function parseI32(str, radix) {\r\n return parseInt(str, undefined) | 0;\r\n};\r\n\r\nString[\"fromCharCodes\"] = function fromCharCodes(arr) {\r\n return String.fromCharCode.apply(String, arr);\r\n};\r\n\r\nString[\"fromCodePoints\"] = function fromCodePoints(arr) {\r\n return String.fromCodePoint.apply(String, arr);\r\n};\r\n\r\nglobalScope[\"isInteger\"] = Number.isInteger;\r\n\r\nglobalScope[\"isFloat\"] = function isFloat(arg) {\r\n return typeof arg === \"number\";\r\n};\r\n\r\nglobalScope[\"isReference\"] = function isClass(arg) {\r\n return typeof arg === \"object\" || typeof arg === \"string\";\r\n};\r\n\r\nglobalScope[\"isString\"] = function isString(arg) {\r\n return typeof arg === \"string\" || arg instanceof String;\r\n};\r\n\r\nglobalScope[\"isArray\"] = Array.isArray;\r\n\r\nglobalScope[\"unchecked\"] = function(expr) {\r\n return expr;\r\n};\r\n\r\nglobalScope[\"fmod\"] = function fmod(x, y) {\r\n return x % y;\r\n};\r\n\r\nglobalScope[\"fmodf\"] = function fmodf(x, y) {\r\n return Math.fround(x % y);\r\n};\r\n\r\nglobalScope[\"JSMath\"] = Math;\r\n\r\nglobalScope[\"memory\"] = (() => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n return {\r\n allocate: globalScope[\"__memory_allocate\"] || function allocate(size) {\r\n if (!(size >>>= 0)) return 0;\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7) HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n return ptr;\r\n },\r\n free: globalScope[\"__memory_free\"] || function free(ptr) { },\r\n copy: globalScope[\"__memory_copy\"] || function copy(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n }\r\n };\r\n})();\r\n\r\nglobalScope[\"store\"] = globalScope[\"__store\"] || function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n};\r\n\r\nglobalScope[\"load\"] = globalScope[\"__load\"] || function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n};\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__25__;","// Copy Binaryen exports to global scope\r\n\r\nconst binaryen = global.Binaryen || require(\"binaryen\");\r\nglobal.binaryen = binaryen;\r\n\r\nfor (var key in binaryen) {\r\n if (key.startsWith(\"_Binaryen\") || key.startsWith(\"_Relooper\")) global[key] = binaryen[key];\r\n}\r\n\r\n// Utilize Binaryen's heap\r\n\r\nglobal.__memory_allocate = binaryen._malloc;\r\nglobal.__memory_free = binaryen._free;\r\nglobal.__memory_copy = binaryen._memmove;\r\nglobal.__store = function(ptr, val) { binaryen.HEAPU8[ptr] = val; };\r\nglobal.__load = function(ptr) { return binaryen.HEAPU8[ptr]; };\r\n","/**\r\n * JavaScript glue code.\r\n * @module glue/js\r\n * @preferred\r\n *//***/\r\n\r\n/// \r\n\r\nimport \"./binaryen\"; // must be first so portable can pick up the memory implementation\r\nimport \"../../../std/portable/index\";\r\nimport \"./float\";\r\nimport \"./i64\";\r\n\r\nimport { Module } from \"../../module\";\r\n\r\nModule.prototype.toText = function(this: Module) {\r\n return new binaryen.Module(this.ref).emitText();\r\n};\r\n\r\nModule.prototype.toAsmjs = function(this: Module) {\r\n return new binaryen.Module(this.ref).emitAsmjs();\r\n};\r\n"],"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/resolver.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.ts","webpack://assemblyscript/./src/compiler.ts","webpack://assemblyscript/./src/parser.ts","webpack://assemblyscript/./src/definitions.ts","webpack://assemblyscript/./src/decompiler.ts","webpack://assemblyscript/./src/index.ts","webpack://assemblyscript/./src/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/./node_modules/long/src/long.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./src/glue/js/float.js","webpack://assemblyscript/./std/portable/index.js","webpack://assemblyscript/external \"binaryen\"","webpack://assemblyscript/./src/glue/js/binaryen.js","webpack://assemblyscript/./src/glue/js/index.ts"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__25__","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","BUILTIN","EXTERNAL","GLOBAL","INLINE","OPERATOR","SEALED","UNMANAGED","propStr","OPERATOR_BINARY","OPERATOR_PREFIX","OPERATOR_POSTFIX","CUSTOM","DECORATOR","CommentKind","COMMENT","Expression","LiteralKind","LiteralExpression","literalKind","ARRAY","AssertionKind","ASSERTION","BINARY","CLASS","COMMA","CONSTRUCTOR","FLOAT","FUNCTION","INSTANCEOF","INTEGER","NEW","OBJECT","PARENTHESIZED","REGEXP","TERNARY","STRING","SUPER","THIS","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","isLastStatement","BLOCK","FUNCTIONDECLARATION","METHODDECLARATION","SourceKind","Statement","Source","SOURCE","tokenizer","debugInfoIndex","exportPaths","sourceKind","pos","lastIndexOf","simplePath","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","VARIABLE","NAMESPACEDECLARATION","EXPORT","isTopLevelExport","CLASSDECLARATION","STATIC","needsExplicitExport","member","VariableLikeDeclarationStatement","BREAK","CONTINUE","DO","EMPTY","ENUMDECLARATION","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","FIELDDECLARATION","parameterIndex","FOR","IF","IMPORTDECLARATION","IMPORT","INTERFACEDECLARATION","RETURN","SWITCHCASE","SWITCH","THROW","TRY","TYPEDECLARATION","VARIABLEDECLARATION","VOID","WHILE","asGlobal","endsWith","findDecorator","decorator","__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","memory","allocate","createFrom","cArr","allocU8Array","_BinaryenModuleRead","free","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","getOptimizeLevel","_BinaryenGetOptimizeLevel","setOptimizeLevel","level","_BinaryenSetOptimizeLevel","getShrinkLevel","_BinaryenGetShrinkLevel","setShrinkLevel","_BinaryenSetShrinkLevel","setDebugInfo","on","_BinaryenSetDebugInfo","optimize","_BinaryenFunctionOptimize","_BinaryenModuleOptimize","runPasses","passes","_BinaryenFunctionRunPasses","_BinaryenModuleRunPasses","precomputeExpression","previousOptimizeLevel","previousShrinkLevel","previousDebugInfo","_BinaryenGetDebugInfo","_BinaryenExpressionGetType","_BinaryenFunctionGetBody","validate","_BinaryenModuleValidate","interpret","_BinaryenModuleInterpret","toBinary","sourceMapUrl","binaryPtr","sourceMapPtr","_BinaryenModuleAllocateAndWrite","readInt","binaryBytes","ret","BinaryModule","output","Uint8Array","load","readBuffer","sourceMap","readString","toText","Error","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","i32","MAX_VALUE","nested1","nested2","_BinaryenExpressionGetId","Const","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","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","abortInstance","memoryAllocateInstance","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","has","instance","resolveClass","Duplicate_identifier_0","programLevelInternalName","FUNCTION_PROTOTYPE","startFunction","GENERIC","AMBIENT","MAIN","resolveFunction","Global","withConstantIntegerValue","setConstantFloat","withConstantFloatValue","queuedNamedExports","checkDecorators","acceptedFlags","presentFlags","decoratorKindToFlag","isLibrary","Decorator_0_is_not_valid_here","Duplicate_decorator","checkGlobal","parentNode","hasDecorator","namespace","fileLevelInternalName","simpleName","ClassPrototype","numImplementsTypes","Unmanaged_classes_cannot_implement_interfaces","Operation_not_supported","MODULE_EXPORT","Export_declaration_conflicts_with_exported_declaration_of_0","isEntry","existingExport","memberDeclarations","memberDeclaration","initializeField","GET","SET","initializeAccessor","initializeMethod","classPrototype","isInterface","INTERFACE_PROTOTYPE","staticField","READONLY","ABSTRACT","instanceMembers","instanceField","FieldPrototype","decoratorFlags","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperatorOverloads","numArgs","firstArg","overloads","overloadPrototypes","Duplicate_function_implementation","operatorKind","String_literal_expected","Expected_0_arguments_but_got_1","internalPropertyName","propertyElement","isGetter","isNew","PROPERTY","getterPrototype","setterPrototype","Property","baseName","staticName","staticPrototype","instanceName","instancePrototype","Enum","initializeEnumValue","enm","EnumValue","initializeExport","externalIdentifier","prefix","FILESPACE","referencedName","referencedElement","seen","Set","add","initializeImport","indexPart","InterfacePrototype","parentNamespace","Namespace","Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local","existingExport_1","global_1","CONST","Element","program","NAMESPACE","ENUM","ENUMVALUE","constantValue","ConstantValueKind","VariableLikeElement","constantValueKind","constantIntegerValue","INLINED","constantFloatValue","Parameter","Local","LOCAL","scopedGlobal","instances","classTypeArguments","Function","contextualTypeArguments","localsByName","localsByIndex","additionalLocals","breakContext","debugLocations","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","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","overload","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","returnLabel","wrappedLocals","wrappedLocalsExt","unset","fork","branch","slice","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","DECLARE","DEFAULT","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","IS","KEYOF","LET","MODULE","OF","PACKAGE","PRIVATE","PROTECTED","PUBLIC","TYPEOF","VAR","WITH","YIELD","tokenIsAlsoIdentifier","token","operatorTokenToString","DOT_DOT_DOT","LESSTHAN","GREATERTHAN","LESSTHAN_EQUALS","GREATERTHAN_EQUALS","EQUALS_EQUALS","EXCLAMATION_EQUALS","EQUALS_EQUALS_EQUALS","EXCLAMATION_EQUALS_EQUALS","ASTERISK_ASTERISK","ASTERISK","SLASH","PERCENT","PLUS_PLUS","MINUS_MINUS","LESSTHAN_LESSTHAN","GREATERTHAN_GREATERTHAN","GREATERTHAN_GREATERTHAN_GREATERTHAN","AMPERSAND","BAR","CARET","EXCLAMATION","TILDE","AMPERSAND_AMPERSAND","BAR_BAR","EQUALS","PLUS_EQUALS","MINUS_EQUALS","ASTERISK_EQUALS","ASTERISK_ASTERISK_EQUALS","SLASH_EQUALS","PERCENT_EQUALS","LESSTHAN_LESSTHAN_EQUALS","GREATERTHAN_GREATERTHAN_EQUALS","GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS","AMPERSAND_EQUALS","BAR_EQUALS","CARET_EQUALS","a","b","Tokenizer","tokenPos","nextToken","nextTokenPos","nextTokenOnNewLine","onComment","identifierHandling","unsafeNext","maxTokenLength","STRINGLITERAL","OPENPAREN","CLOSEPAREN","isDecimalDigit","FLOATLITERAL","DOT","commentStartPos","LINE","TRIPLE","closed","_0_expected","testInteger","INTEGERLITERAL","COLON","SEMICOLON","EQUALS_GREATERTHAN","QUESTION","OPENBRACKET","CLOSEBRACKET","OPENBRACE","CLOSEBRACE","AT","isIdentifierStart","isKeywordCharacter","posBefore","isIdentifierPart","keywordToken","ALWAYS","PREFER","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skipIdentifier","skip","skipIdentifierName","mark","state","reusableState","State","discard","reset","readIdentifier","quote","Unterminated_string_literal","readEscapeSequence","Unexpected_end_of_text","readExtendedUnicodeEscape","readUnicodeEscape","fromCharCode","readRegexpPattern","escaped","Unterminated_regular_expression_literal","readRegexpFlags","Invalid_regular_expression_flags","readInteger","readHexInteger","readBinaryInteger","readOctalInteger","isOctalDigit","Octal_literals_are_not_allowed_in_strict_mode","readDecimalInteger","i64_16","sepEnd","i64_add","i64_mul","Numeric_separators_are_not_allowed_here","Multiple_consecutive_numeric_separators_are_not_permitted","Hexadecimal_digit_expected","i64_10","Digit_expected","i64_8","Octal_digit_expected","i64_2","i64_1","Binary_digit_expected","readFloat","readDecimalFloat","parseFloat","readHexFloat","remain","value32","invalid","An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive","Unterminated_Unicode_escape_sequence","finish","ReportMode","program_1","currentThisExpression","currentElementExpression","resolveType","reportMode","REPORT","resolveSignature","typeNode","Type_0_is_not_generic","resolveClassInclTypeArguments","typeArgumentNodes","numTypeArguments","paramType","instanceKey","placeholderType","parameterTypeNodes","parameterTypeNode","REST","returnTypeNode","resolveTypeArguments","alternativeReportNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","atEnd","context","resolvePropertyAccess","propertyAccess","contextualFunction","targetExpression","resolveExpression","propertyName","Property_0_does_not_exist_on_type_1","indexedGet","Index_signature_is_missing_in_type_0","resolveElementAccess","elementAccess","explicitLocal","_this_cannot_be_referenced_in_current_location","_super_can_only_be_referenced_in_a_derived_class","resolveFunctionInclTypeArguments","functionTarget","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","isInstance","classTypeParameters","numClassTypeParameters","numFunctionTypeArguments","signatureNode","functionTypeParameters","classInstance","signatureParameters","signatureParameterCount","parameterDeclaration","resolveFunctionPartially","partialKey","partialPrototype","reportNode","resolvedTypeArguments","_e","expectedTypeArguments","actualTypeArguments","baseClass","baseClassType","Class_0_is_sealed_and_cannot_be_extended","Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa","_f","_g","inheritedMember","constructorPartial","_h","_j","fieldDeclaration","fieldType","baseField","Type_expected","fieldInstance","instanceProperty","partialGetterPrototype","partialSetterPrototype","_k","_l","_m","overloadPrototype","operatorInstance","operatorPartial","typeParameterNodes","builtins_1","Options","WASM32","importMemory","importTable","features","feature","Feature","ConversionKind","WrapMode","mangleImportName_moduleName","mangleImportName_elementName","Compiler","currentOuterFunction","currentInlineFunctions","currentEnum","currentType","memorySegments","stringSegments","functionTable","argcVar","argcSet","needsIterateRoots","f32ModInstance","f64ModInstance","f32PowInstance","f64PowInstance","max","compile","startFunctionInstance","startFunctionBody","compileSource","funcRef","ensureFunctionType","i64_align","numPages","i64_shr_u","functionTableSize","functionTableExported","entries","moduleExport","makeModuleExport","compileIterateRoots","subPrefix","Cannot_export_a_mutable_global","ensureTrampoline","ensureArgcSet","COMPILED","setter","nativeType","nativeSizeType","getterName","setterName","fullName","ctor","compileSourceByPath","File_0_not_found","isGeneric","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","initExpr","resolvedType","compileExpressionRetainType","Type_0_is_not_assignable_to_type_1","isDeclaredConstant","MODULE_IMPORT","mangleImportName","initializeInStart","compileExpression","Compiling_constant_with_non_constant_initializer_as_mutable","compileEnum","previousValue","previousValueIsMut","initInStart","valueDeclaration","In_const_enum_declarations_member_initializer_must_be_constant_expression","Enum_member_must_have_initializer","AddI32","compileFunctionUsingTypeArguments","compileFunction","resultType","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","isConstructor","stmts","compileStatements","unshift","makeConditionalAllocate","A_function_whose_declared_type_is_not_void_must_return_a_value","compileInterfaceDeclaration","compileNamespace","compileClassUsingTypeArguments","compileClass","staticMembers","ctorInstance","addMemorySegment","alignment","ensureFunctionTableEntry","TRAMPOLINE","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileVoidStatement","compileWhileStatement","addDebugLocation","numStatements","Nop","A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement","A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement","condExpr","makeIsTrueish","terminated","repeatLabel","alwaysTrue","condPre","incrExpr","bodyExpr","usesContinue","breakBlock","repeatBlock","GENERIC_CONTEXT","condExprPrecomp","ifTrueFlow","ifTrueExpr","ifFalseExpr","ifFalseFlow","numCases","tempLocal","tempLocalIndex","breaks","breakIndex","defaultIndex","currentBlock","alwaysReturns","alwaysReturnsWrapped","alwaysThrows","alwaysAllocates","isLast","nextLabel","count","compileAbort","isKnownGlobal","numDeclarations","initializers","isInlined","_const_declarations_must_be_initialized","compileAssignmentWithValue","compileInlineConstant","contextualType","retainType","mask","conversionKind","wrapMode","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileInstanceOfExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","ensureSmallIntegerWrap","Conversion_from_type_0_to_1_requires_an_explicit_cast","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","leftExpr","leftType","rightExpr","rightType","commonType","compound","compileBinaryOverload","Operator_0_cannot_be_applied_to_types_1_and_2","compileAssignment","AddI64","AddF32","AddF64","SubI32","SubI64","SubF32","SubF64","MulI64","MulF32","MulF64","makeCallDirect","DivI32","DivI64","DivU64","DivF32","DivF64","RemI64","RemU64","intType","ShlI64","The_0_operator_cannot_be_applied_to_type_1","ShrI64","ShrU64","AndI64","OrI32","OrI64","XorI32","XorI64","compileUnaryOverload","valueExpr","argumentExpressions","thisArg","compileCallDirect","valueExpression","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","isUnchecked","indexedSet","Index_signature_in_type_0_only_permits_reading","valueWithCorrectType","tee","thisExpression","thisExpr","setterInstance","getterInstance","nativeReturnType","elementExpr","tempLocalTarget","tempLocalElement","indexArg","compileCallExpressionBuiltin","inferredTypes","numTypeParameters","numParameterTypes","numArguments","argumentExprs","argumentExpression","inferredType","concreteType","compileCallIndirect","compileCall","checkCallSignature","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","inline","includes","compileCallInlineUnchecked","Function_0_cannot_be_inlined_into_itself","numArgumentsInclThis","previousFlow","thisLocal","paramExpr","argumentLocal","bodyStatement","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","trampolineSignature","trampolineName","ofN","Optional_parameter_must_have_an_initializer","ensureArgcVar","numOperands","isCallImport","parameterNodes","allOptionalsAreConstant","makeCallIndirect","numExpressions","exprs","retainConstantType","scopedThis","superType","localType","A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums","implicitNegate","compileArrayLiteral","floatValue","intValue","i64_sub","i64_is_i8","i64_is_u8","i64_is_i16","i64_is_u16","i64_is_i32","i64_is_u32","i64_is_bool","i64_is_f32","i64_to_f32","i64_is_f64","i64_to_f64","compileStaticString","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","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","compileAllocate","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","currentClassInstance","makeAllocate","ifThenFlow","ifThenExpr","ifThenType","ifElseFlow","ifElseExpr","ifElseType","getValue","nativeOne","setValue","NegF32","NegF64","makeIsFalseish","ExtendI8ToI32","ExtendI16ToI32","field","nativeFieldType","parentElement","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","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","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","readI32","readI64","lo","hi","readF32","i32_as_f32","f32_as_i32","readF64","i64_as_f64","valueI64","f64_as_i64","indentX1","indentX2","indentX4","separator","ipos","dirname","origin","CharCode","lookupInUnicodeMap","unicodeIdentifierStart","isUnicodeIdentifierStart","unicodeIdentifierPart","isUnicodeIdentifierPart","mid","compiler","evaluateConstantType","SWALLOW","expr_1","tempLocal0","tempLocal1","evaluateConstantOffset","alignLog2","fieldName","Type_0_has_no_property_1","abort","operandExprs","signatureParts","nativeParamTypes","operandType","User_defined_0","expr_2","deferASM","deferASMCall","typeArgument","valueType","messageArg","filenameArg","allocateInstance","Long","wasm","WebAssembly","Instance","low","high","unsigned","isLong","obj","__isLong__","INT_CACHE","UINT_CACHE","fromInt","cachedObj","cache","fromBits","fromNumber","isNaN","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","Math","pow","fromString","radix","RangeError","radixToPower","parseInt","power","mul","fromValue","TWO_PWR_16_DBL","TWO_PWR_24","ONE","UONE","NEG_ONE","LongPrototype","toInt","toNumber","isZero","isNegative","eq","radixLong","div","rem1","sub","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","equals","notEquals","neq","ne","lessThan","comp","lt","lessThanOrEqual","lte","le","greaterThan","gt","greaterThanOrEqual","gte","ge","compare","thisNeg","otherNeg","negate","not","addend","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","subtract","subtrahend","multiply","multiplier","get_high","b00","divide","divisor","approx","res","div_u","div_s","toUnsigned","shru","shr","shl","floor","log2","log","LN2","delta","approxRes","approxRem","modulo","rem_u","rem_s","mod","and","or","xor","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toSigned","toBytes","toBytesLE","toBytesBE","fromBytes","fromBytesLE","fromBytesBE","i64_div","i64_div_u","i64_rem","i64_rem_u","i64_xor","i64_shr","i64_eq","minSafeF32","MIN_SAFE_INTEGER","maxSafeF32","MAX_SAFE_INTEGER","minSafeF64","maxSafeF64","fround","globalScope","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","HEAP","HEAP_OFFSET","oldHeap","copy","dest","src","copyWithin","binaryen","Binaryen","__memory_allocate","_malloc","__memory_free","_free","__memory_copy","_memmove","__store","HEAPU8","__load","emitText","emitAsmjs"],"mappings":"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KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,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,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__25__) {\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 = 28);\n","/**\r\n * Common constants.\r\n * @module common\r\n *//***/\r\n\r\n/** Indicates traits of a {@link Node} or {@link Element}. */\r\nexport enum CommonFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n\r\n // Basic modifiers\r\n\r\n /** Has an `import` modifier. */\r\n IMPORT = 1 << 0,\r\n /** Has an `export` modifier. */\r\n EXPORT = 1 << 1,\r\n /** Has a `declare` modifier. */\r\n DECLARE = 1 << 2,\r\n /** Has a `const` modifier. */\r\n CONST = 1 << 3,\r\n /** Has a `let` modifier. */\r\n LET = 1 << 4,\r\n /** Has a `static` modifier. */\r\n STATIC = 1 << 5,\r\n /** Has a `readonly` modifier. */\r\n READONLY = 1 << 6,\r\n /** Has an `abstract` modifier. */\r\n ABSTRACT = 1 << 7,\r\n /** Has a `public` modifier. */\r\n PUBLIC = 1 << 8,\r\n /** Has a `private` modifier. */\r\n PRIVATE = 1 << 9,\r\n /** Has a `protected` modifier. */\r\n PROTECTED = 1 << 10,\r\n /** Has a `get` modifier. */\r\n GET = 1 << 11,\r\n /** Has a `set` modifier. */\r\n SET = 1 << 12,\r\n\r\n // Extended modifiers usually derived from basic modifiers\r\n\r\n /** Is ambient, that is either declared or nested in a declared element. */\r\n AMBIENT = 1 << 13,\r\n /** Is generic. */\r\n GENERIC = 1 << 14,\r\n /** Is part of a generic context. */\r\n GENERIC_CONTEXT = 1 << 15,\r\n /** Is an instance member. */\r\n INSTANCE = 1 << 16,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 17,\r\n /** Is an arrow function. */\r\n ARROW = 1 << 18,\r\n /** Is a module export. */\r\n MODULE_EXPORT = 1 << 19,\r\n /** Is a module import. */\r\n MODULE_IMPORT = 1 << 20,\r\n\r\n // Compilation states\r\n\r\n /** Is compiled. */\r\n COMPILED = 1 << 21,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 22,\r\n /** Is scoped. */\r\n SCOPED = 1 << 23,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 24,\r\n /** Is a virtual method. */\r\n VIRTUAL = 1 << 25,\r\n /** Is the main function. */\r\n MAIN = 1 << 26,\r\n\r\n // Other\r\n\r\n QUOTED = 1 << 27\r\n}\r\n\r\n/** Path delimiter inserted between file system levels. */\r\nexport const PATH_DELIMITER = \"/\";\r\n/** Substitution used to indicate the parent directory. */\r\nexport const PARENT_SUBST = \"..\";\r\n/** Function name prefix used for getters. */\r\nexport const GETTER_PREFIX = \"get:\";\r\n/** Function name prefix used for setters. */\r\nexport const SETTER_PREFIX = \"set:\";\r\n/** Delimiter used between class names and instance members. */\r\nexport const INSTANCE_DELIMITER = \"#\";\r\n/** Delimiter used between class and namespace names and static members. */\r\nexport const STATIC_DELIMITER = \".\";\r\n/** Delimiter used between a function and its inner elements. */\r\nexport const INNER_DELIMITER = \"~\";\r\n/** Substitution used to indicate a library directory. */\r\nexport const LIBRARY_SUBST = \"~lib\";\r\n/** Library directory prefix. */\r\nexport const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER;\r\n/** Prefix used to indicate a filespace element. */\r\nexport const FILESPACE_PREFIX = \"file:\";\r\n","/**\r\n * Shared diagnostic handling inherited by the parser and the compiler.\r\n * @module diagnostics\r\n * @preferred\r\n *//***/\r\n\r\nimport {\r\n Range\r\n} from \"./ast\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nimport {\r\n isLineBreak\r\n} from \"./util\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\n/** Indicates the category of a {@link DiagnosticMessage}. */\r\nexport enum DiagnosticCategory {\r\n /** Informatory message. */\r\n INFO,\r\n /** Warning message. */\r\n WARNING,\r\n /** Error message. */\r\n ERROR\r\n}\r\n\r\n/** Returns the string representation of the specified diagnostic category. */\r\nexport function diagnosticCategoryToString(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return \"INFO\";\r\n case DiagnosticCategory.WARNING: return \"WARNING\";\r\n case DiagnosticCategory.ERROR: return \"ERROR\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** ANSI escape sequence for blue foreground. */\r\nexport const COLOR_BLUE: string = \"\\u001b[96m\";\r\n/** ANSI escape sequence for yellow foreground. */\r\nexport const COLOR_YELLOW: string = \"\\u001b[93m\";\r\n/** ANSI escape sequence for red foreground. */\r\nexport const COLOR_RED: string = \"\\u001b[91m\";\r\n/** ANSI escape sequence to reset the foreground color. */\r\nexport const COLOR_RESET: string = \"\\u001b[0m\";\r\n\r\n/** Returns the ANSI escape sequence for the specified category. */\r\nexport function diagnosticCategoryToColor(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return COLOR_BLUE;\r\n case DiagnosticCategory.WARNING: return COLOR_YELLOW;\r\n case DiagnosticCategory.ERROR: return COLOR_RED;\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** Represents a diagnostic message. */\r\nexport class DiagnosticMessage {\r\n\r\n /** Message code. */\r\n code: i32;\r\n /** Message category. */\r\n category: DiagnosticCategory;\r\n /** Message text. */\r\n message: string;\r\n /** Respective source range, if any. */\r\n range: Range | null = null;\r\n\r\n /** Constructs a new diagnostic message. */\r\n private constructor(code: i32, category: DiagnosticCategory, message: string) {\r\n this.code = code;\r\n this.category = category;\r\n this.message = message;\r\n }\r\n\r\n /** Creates a new diagnostic message of the specified category. */\r\n static create(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): DiagnosticMessage {\r\n var message = diagnosticCodeToString(code);\r\n if (arg0 != null) message = message.replace(\"{0}\", arg0);\r\n if (arg1 != null) message = message.replace(\"{1}\", arg1);\r\n if (arg2 != null) message = message.replace(\"{2}\", arg2);\r\n return new DiagnosticMessage(code, category, message);\r\n }\r\n\r\n /** Creates a new informatory diagnostic message. */\r\n static createInfo(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.INFO, arg0, arg1);\r\n }\r\n\r\n /** Creates a new warning diagnostic message. */\r\n static createWarning(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.WARNING, arg0, arg1);\r\n }\r\n\r\n /** Creates a new error diagnostic message. */\r\n static createError(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.ERROR, arg0, arg1);\r\n }\r\n\r\n /** Adds a source range to this message. */\r\n withRange(range: Range): this {\r\n this.range = range;\r\n return this;\r\n }\r\n\r\n /** Converts this message to a string. */\r\n toString(): string {\r\n if (this.range) {\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \\\"\" +\r\n this.message +\r\n \"\\\" in \" +\r\n this.range.source.normalizedPath +\r\n \":\" +\r\n this.range.line.toString(10) +\r\n \":\" +\r\n this.range.column.toString(10)\r\n );\r\n }\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \" +\r\n this.message\r\n );\r\n }\r\n}\r\n\r\n/** Formats a diagnostic message, optionally with terminal colors and source context. */\r\nexport function formatDiagnosticMessage(\r\n message: DiagnosticMessage,\r\n useColors: bool = false,\r\n showContext: bool = false\r\n): string {\r\n\r\n // general information\r\n var sb: string[] = [];\r\n if (useColors) sb.push(diagnosticCategoryToColor(message.category));\r\n sb.push(diagnosticCategoryToString(message.category));\r\n if (useColors) sb.push(COLOR_RESET);\r\n sb.push(message.code < 1000 ? \" AS\" : \" TS\");\r\n sb.push(message.code.toString(10));\r\n sb.push(\": \");\r\n sb.push(message.message);\r\n\r\n // include range information if available\r\n if (message.range) {\r\n\r\n // include context information if requested\r\n let range = message.range;\r\n if (showContext) {\r\n sb.push(\"\\n\");\r\n sb.push(formatDiagnosticContext(message.range, useColors));\r\n }\r\n\r\n sb.push(\"\\n\");\r\n sb.push(\" in \");\r\n sb.push(range.source.normalizedPath);\r\n sb.push(\"(\");\r\n sb.push(range.line.toString(10));\r\n sb.push(\",\");\r\n sb.push(range.column.toString(10));\r\n sb.push(\")\");\r\n }\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Formats the diagnostic context for the specified range, optionally with terminal colors. */\r\nexport function formatDiagnosticContext(range: Range, useColors: bool = false): string {\r\n var text = range.source.text;\r\n var len = text.length;\r\n var start = range.start;\r\n var end = range.end;\r\n while (start > 0 && !isLineBreak(text.charCodeAt(start - 1))) start--;\r\n while (end < len && !isLineBreak(text.charCodeAt(end))) end++;\r\n var sb: string[] = [\r\n \"\\n \",\r\n text.substring(start, end),\r\n \"\\n \"\r\n ];\r\n while (start < range.start) {\r\n sb.push(\" \");\r\n start++;\r\n }\r\n if (useColors) sb.push(COLOR_RED);\r\n if (range.start == range.end) {\r\n sb.push(\"^\");\r\n } else {\r\n while (start++ < range.end) sb.push(\"~\");\r\n }\r\n if (useColors) sb.push(COLOR_RESET);\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Base class of all diagnostic emitters. */\r\nexport abstract class DiagnosticEmitter {\r\n\r\n /** Diagnostic messages emitted so far. */\r\n diagnostics: DiagnosticMessage[];\r\n\r\n /** Initializes this diagnostic emitter. */\r\n protected constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n }\r\n\r\n /** Emits a diagnostic message of the specified category. */\r\n emitDiagnostic(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range);\r\n this.diagnostics.push(message);\r\n // console.log(formatDiagnosticMessage(message, true, true) + \"\\n\"); // temporary\r\n // console.log(new Error(\"stack\").stack);\r\n }\r\n\r\n /** Emits an informatory diagnostic message. */\r\n info(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.INFO, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits a warning diagnostic message. */\r\n warning(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.WARNING, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits an error diagnostic message. */\r\n error(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.ERROR, range, arg0, arg1, arg2);\r\n }\r\n}\r\n","/**\r\n * Abstract syntax tree representing a source file once parsed.\r\n * @module ast\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Token,\r\n Tokenizer,\r\n Range\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n normalizePath,\r\n resolvePath,\r\n CharCode\r\n} from \"./util\";\r\n\r\nexport { Token, Range };\r\n\r\n/** Indicates the kind of a node. */\r\nexport enum NodeKind {\r\n\r\n SOURCE,\r\n\r\n // types\r\n TYPE,\r\n TYPEPARAMETER,\r\n PARAMETER,\r\n SIGNATURE,\r\n\r\n // expressions\r\n IDENTIFIER,\r\n ASSERTION,\r\n BINARY,\r\n CALL,\r\n CLASS,\r\n COMMA,\r\n ELEMENTACCESS,\r\n FALSE,\r\n FUNCTION,\r\n INSTANCEOF,\r\n LITERAL,\r\n NEW,\r\n NULL,\r\n PARENTHESIZED,\r\n PROPERTYACCESS,\r\n TERNARY,\r\n SUPER,\r\n THIS,\r\n TRUE,\r\n CONSTRUCTOR,\r\n UNARYPOSTFIX,\r\n UNARYPREFIX,\r\n\r\n // statements\r\n BLOCK,\r\n BREAK,\r\n CONTINUE,\r\n DO,\r\n EMPTY,\r\n EXPORT,\r\n EXPORTIMPORT,\r\n EXPRESSION,\r\n FOR,\r\n IF,\r\n IMPORT,\r\n RETURN,\r\n SWITCH,\r\n THROW,\r\n TRY,\r\n VARIABLE,\r\n VOID,\r\n WHILE,\r\n\r\n // declaration statements\r\n CLASSDECLARATION,\r\n ENUMDECLARATION,\r\n ENUMVALUEDECLARATION,\r\n FIELDDECLARATION,\r\n FUNCTIONDECLARATION,\r\n IMPORTDECLARATION,\r\n INTERFACEDECLARATION,\r\n METHODDECLARATION,\r\n NAMESPACEDECLARATION,\r\n TYPEDECLARATION,\r\n VARIABLEDECLARATION,\r\n\r\n // special\r\n DECORATOR,\r\n EXPORTMEMBER,\r\n SWITCHCASE,\r\n COMMENT\r\n}\r\n\r\n/** Checks if a node represents a constant value. */\r\nexport function nodeIsConstantValue(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.LITERAL:\r\n case NodeKind.NULL:\r\n case NodeKind.TRUE:\r\n case NodeKind.FALSE: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable. */\r\nexport function nodeIsCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.CALL:\r\n case NodeKind.ELEMENTACCESS:\r\n case NodeKind.PROPERTYACCESS: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable with generic arguments. */\r\nexport function nodeIsGenericCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.PROPERTYACCESS: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all nodes. */\r\nexport abstract class Node {\r\n\r\n /** Node kind indicator. */\r\n kind: NodeKind;\r\n /** Source range. */\r\n range: Range;\r\n /** Parent node. */\r\n parent: Node | null = null;\r\n /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n\r\n /** Tests if this node has the specified flag or flags. */\r\n is(flag: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this node has one of the specified flags. */\r\n isAny(flag: CommonFlags): bool { return (this.flags & flag) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n\r\n // types\r\n\r\n static createType(\r\n name: IdentifierExpression,\r\n typeArguments: CommonTypeNode[] | null,\r\n isNullable: bool,\r\n range: Range\r\n ): TypeNode {\r\n var type = new TypeNode();\r\n type.range = range;\r\n type.name = name; name.parent = type;\r\n type.typeArguments = typeArguments; if (typeArguments) setParent(typeArguments, type);\r\n type.isNullable = isNullable;\r\n return type;\r\n }\r\n\r\n static createOmittedType(\r\n range: Range\r\n ): TypeNode {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"\", range),\r\n null,\r\n false,\r\n range\r\n );\r\n }\r\n\r\n static createTypeParameter(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n range: Range\r\n ): TypeParameterNode {\r\n var elem = new TypeParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.extendsType = extendsType; if (extendsType) extendsType.parent = elem;\r\n return elem;\r\n }\r\n\r\n static createParameter(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode,\r\n initializer: Expression | null,\r\n kind: ParameterKind,\r\n range: Range\r\n ): ParameterNode {\r\n var elem = new ParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.parameterKind = kind;\r\n return elem;\r\n }\r\n\r\n static createSignature(\r\n parameters: ParameterNode[],\r\n returnType: CommonTypeNode,\r\n explicitThisType: TypeNode | null,\r\n isNullable: bool,\r\n range: Range\r\n ): SignatureNode {\r\n var sig = new SignatureNode();\r\n sig.range = range;\r\n sig.parameters = parameters; setParent(parameters, sig);\r\n sig.returnType = returnType; returnType.parent = sig;\r\n sig.explicitThisType = explicitThisType; if (explicitThisType) explicitThisType.parent = sig;\r\n sig.isNullable = isNullable;\r\n return sig;\r\n }\r\n\r\n // special\r\n\r\n static createDecorator(\r\n name: Expression,\r\n args: Expression[] | null,\r\n range: Range\r\n ): DecoratorNode {\r\n var stmt = new DecoratorNode();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.arguments = args; if (args) setParent(args, stmt);\r\n stmt.decoratorKind = decoratorNameToKind(name);\r\n return stmt;\r\n }\r\n\r\n static createComment(\r\n text: string,\r\n kind: CommentKind,\r\n range: Range\r\n ): CommentNode {\r\n var node = new CommentNode();\r\n node.range = range;\r\n node.commentKind = kind;\r\n node.text = text;\r\n return node;\r\n }\r\n\r\n // expressions\r\n\r\n static createIdentifierExpression(\r\n name: string,\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = name;\r\n return expr;\r\n }\r\n\r\n static createEmptyIdentifierExpression(\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = \"\";\r\n return expr;\r\n }\r\n\r\n static createArrayLiteralExpression(\r\n elements: (Expression | null)[],\r\n range: Range\r\n ): ArrayLiteralExpression {\r\n var expr = new ArrayLiteralExpression();\r\n expr.range = range;\r\n expr.elementExpressions = elements; setParentIfNotNull(elements, expr);\r\n return expr;\r\n }\r\n\r\n static createAssertionExpression(\r\n assertionKind: AssertionKind,\r\n expression: Expression,\r\n toType: CommonTypeNode,\r\n range: Range\r\n ): AssertionExpression {\r\n var expr = new AssertionExpression();\r\n expr.range = range;\r\n expr.assertionKind = assertionKind;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.toType = toType; toType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createBinaryExpression(\r\n operator: Token,\r\n left: Expression,\r\n right: Expression,\r\n range: Range\r\n ): BinaryExpression {\r\n var expr = new BinaryExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.left = left; left.parent = expr;\r\n expr.right = right; right.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createCallExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): CallExpression {\r\n var expr = new CallExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createClassExpression(\r\n declaration: ClassDeclaration\r\n ): ClassExpression {\r\n var expr = new ClassExpression();\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createCommaExpression(\r\n expressions: Expression[],\r\n range: Range\r\n ): CommaExpression {\r\n var expr = new CommaExpression();\r\n expr.range = range;\r\n expr.expressions = expressions; setParent(expressions, expr);\r\n return expr;\r\n }\r\n\r\n static createConstructorExpression(\r\n range: Range\r\n ): ConstructorExpression {\r\n var expr = new ConstructorExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createElementAccessExpression(\r\n expression: Expression,\r\n element: Expression,\r\n range: Range\r\n ): ElementAccessExpression {\r\n var expr = new ElementAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.elementExpression = element; element.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createFalseExpression(\r\n range: Range\r\n ): FalseExpression {\r\n var expr = new FalseExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createFloatLiteralExpression(\r\n value: f64,\r\n range: Range\r\n ): FloatLiteralExpression {\r\n var expr = new FloatLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createFunctionExpression(\r\n declaration: FunctionDeclaration\r\n ): FunctionExpression {\r\n var expr = new FunctionExpression();\r\n expr.flags = declaration.flags & CommonFlags.ARROW;\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createInstanceOfExpression(\r\n expression: Expression,\r\n isType: CommonTypeNode,\r\n range: Range\r\n ): InstanceOfExpression {\r\n var expr = new InstanceOfExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.isType = isType; isType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createIntegerLiteralExpression(\r\n value: I64,\r\n range: Range\r\n ): IntegerLiteralExpression {\r\n var expr = new IntegerLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createNewExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): NewExpression {\r\n var expr = new NewExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createNullExpression(\r\n range: Range\r\n ): NullExpression {\r\n var expr = new NullExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createObjectLiteralExpression(\r\n names: IdentifierExpression[],\r\n values: Expression[],\r\n range: Range\r\n ): ObjectLiteralExpression {\r\n var expr = new ObjectLiteralExpression();\r\n expr.range = range;\r\n expr.names = names;\r\n expr.values = values;\r\n return expr;\r\n }\r\n\r\n static createParenthesizedExpression(\r\n expression: Expression,\r\n range: Range\r\n ): ParenthesizedExpression {\r\n var expr = new ParenthesizedExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createPropertyAccessExpression(\r\n expression: Expression,\r\n property: IdentifierExpression,\r\n range: Range\r\n ): PropertyAccessExpression {\r\n var expr = new PropertyAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.property = property; property.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createRegexpLiteralExpression(\r\n pattern: string,\r\n flags: string,\r\n range: Range\r\n ): RegexpLiteralExpression {\r\n var expr = new RegexpLiteralExpression();\r\n expr.range = range;\r\n expr.pattern = pattern;\r\n expr.patternFlags = flags;\r\n return expr;\r\n }\r\n\r\n static createTernaryExpression(\r\n condition: Expression,\r\n ifThen: Expression,\r\n ifElse: Expression,\r\n range: Range\r\n ): TernaryExpression {\r\n var expr = new TernaryExpression();\r\n expr.range = range;\r\n expr.condition = condition; condition.parent = expr;\r\n expr.ifThen = ifThen; ifThen.parent = expr;\r\n expr.ifElse = ifElse; ifElse.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createStringLiteralExpression(\r\n value: string,\r\n range: Range\r\n ): StringLiteralExpression {\r\n var expr = new StringLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createSuperExpression(\r\n range: Range\r\n ): SuperExpression {\r\n var expr = new SuperExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createThisExpression(\r\n range: Range\r\n ): ThisExpression {\r\n var expr = new ThisExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createTrueExpression(\r\n range: Range\r\n ): TrueExpression {\r\n var expr = new TrueExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createUnaryPostfixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPostfixExpression {\r\n var expr = new UnaryPostfixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createUnaryPrefixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPrefixExpression {\r\n var expr = new UnaryPrefixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n // statements\r\n\r\n static createBlockStatement(\r\n statements: Statement[],\r\n range: Range\r\n ): BlockStatement {\r\n var stmt = new BlockStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createBreakStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): BreakStatement {\r\n var stmt = new BreakStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createClassDeclaration(\r\n identifier: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n implementsTypes: TypeNode[] | null, // can't be functions\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ClassDeclaration {\r\n var stmt = new ClassDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = identifier; identifier.parent = stmt;\r\n stmt.typeParameters = typeParameters; setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.implementsTypes = implementsTypes; if (implementsTypes) setParent(implementsTypes, stmt);\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createContinueStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): ContinueStatement {\r\n var stmt = new ContinueStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createDoStatement(\r\n statement: Statement,\r\n condition: Expression,\r\n range: Range\r\n ): DoStatement {\r\n var stmt = new DoStatement();\r\n stmt.range = range;\r\n stmt.statement = statement; statement.parent = stmt;\r\n stmt.condition = condition; condition.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createEmptyStatement(\r\n range: Range\r\n ): EmptyStatement {\r\n var stmt = new EmptyStatement();\r\n stmt.range = range;\r\n return stmt;\r\n }\r\n\r\n static createEnumDeclaration(\r\n name: IdentifierExpression,\r\n members: EnumValueDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumDeclaration {\r\n var stmt = new EnumDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.values = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createEnumValueDeclaration(\r\n name: IdentifierExpression,\r\n value: Expression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumValueDeclaration {\r\n var stmt = new EnumValueDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportStatement(\r\n members: ExportMember[] | null,\r\n path: StringLiteralExpression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ExportStatement {\r\n var stmt = new ExportStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.members = members; if (members) setParent(members, stmt);\r\n stmt.path = path;\r\n if (path) {\r\n let normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n } else {\r\n stmt.normalizedPath = null;\r\n stmt.internalPath = null;\r\n }\r\n return stmt;\r\n }\r\n\r\n static createExportImportStatement(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression,\r\n range: Range\r\n ): ExportImportStatement {\r\n var stmt = new ExportImportStatement();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.externalName = externalName; externalName.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportMember(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression | null,\r\n range: Range\r\n ): ExportMember {\r\n var elem = new ExportMember();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n if (!externalName) {\r\n externalName = name;\r\n } else {\r\n externalName.parent = elem;\r\n }\r\n elem.externalName = externalName;\r\n return elem;\r\n }\r\n\r\n static createExpressionStatement(\r\n expression: Expression\r\n ): ExpressionStatement {\r\n var stmt = new ExpressionStatement();\r\n stmt.range = expression.range;\r\n stmt.expression = expression; expression.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createIfStatement(\r\n condition: Expression,\r\n ifTrue: Statement,\r\n ifFalse: Statement | null,\r\n range: Range\r\n ): IfStatement {\r\n var stmt = new IfStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.ifTrue = ifTrue; ifTrue.parent = stmt;\r\n stmt.ifFalse = ifFalse; if (ifFalse) ifFalse.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createImportStatement(\r\n decls: ImportDeclaration[] | null,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = decls; if (decls) setParent(decls, stmt);\r\n stmt.namespaceName = null;\r\n stmt.path = path;\r\n var normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative in project\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute in library\r\n if (!normalizedPath.startsWith(LIBRARY_PREFIX)) {\r\n normalizedPath = LIBRARY_PREFIX + normalizedPath;\r\n }\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportStatementWithWildcard(\r\n identifier: IdentifierExpression,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = null;\r\n stmt.namespaceName = identifier;\r\n stmt.path = path;\r\n stmt.normalizedPath = resolvePath(\r\n normalizePath(path.value),\r\n range.source.normalizedPath\r\n );\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportDeclaration(\r\n externalName: IdentifierExpression,\r\n name: IdentifierExpression | null,\r\n range: Range\r\n ): ImportDeclaration {\r\n var elem = new ImportDeclaration();\r\n elem.range = range;\r\n elem.externalName = externalName; externalName.parent = elem;\r\n if (!name) {\r\n name = externalName;\r\n } else {\r\n name.parent = elem;\r\n }\r\n elem.name = name;\r\n return elem;\r\n }\r\n\r\n static createInterfaceDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): InterfaceDeclaration {\r\n var stmt = new InterfaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createFieldDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FieldDeclaration {\r\n var stmt = new FieldDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.type = type; if (type) type.parent = stmt;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createForStatement(\r\n initializer: Statement | null,\r\n condition: Expression | null,\r\n incrementor: Expression | null,\r\n statement: Statement,\r\n range: Range\r\n ): ForStatement {\r\n var stmt = new ForStatement();\r\n stmt.range = range;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.condition = condition; if (condition) condition.parent = stmt;\r\n stmt.incrementor = incrementor; if (incrementor) incrementor.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FunctionDeclaration {\r\n var stmt = new FunctionDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createMethodDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): MethodDeclaration {\r\n var stmt = new MethodDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): NamespaceDeclaration {\r\n var stmt = new NamespaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createReturnStatement(\r\n value: Expression | null,\r\n range: Range\r\n ): ReturnStatement {\r\n var stmt = new ReturnStatement();\r\n stmt.range = range;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createSwitchStatement(\r\n condition: Expression,\r\n cases: SwitchCase[],\r\n range: Range\r\n ): SwitchStatement {\r\n var stmt = new SwitchStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.cases = cases; setParent(cases, stmt);\r\n return stmt;\r\n }\r\n\r\n static createSwitchCase(\r\n label: Expression | null,\r\n statements: Statement[],\r\n range: Range\r\n ): SwitchCase {\r\n var elem = new SwitchCase();\r\n elem.range = range;\r\n elem.label = label; if (label) label.parent = elem;\r\n elem.statements = statements; setParent(statements, elem);\r\n return elem;\r\n }\r\n\r\n static createThrowStatement(\r\n value: Expression,\r\n range: Range\r\n ): ThrowStatement {\r\n var stmt = new ThrowStatement();\r\n stmt.range = range;\r\n stmt.value = value; value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createTryStatement(\r\n statements: Statement[],\r\n catchVariable: IdentifierExpression | null,\r\n catchStatements: Statement[] | null,\r\n finallyStatements: Statement[] | null,\r\n range: Range\r\n ): TryStatement {\r\n var stmt = new TryStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n stmt.catchVariable = catchVariable;\r\n if (catchVariable) catchVariable.parent = stmt;\r\n stmt.catchStatements = catchStatements;\r\n if (catchStatements) setParent(catchStatements, stmt);\r\n stmt.finallyStatements = finallyStatements;\r\n if (finallyStatements) setParent(finallyStatements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createTypeDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n alias: CommonTypeNode,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): TypeDeclaration {\r\n var stmt = new TypeDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.type = alias; alias.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableStatement(\r\n declarations: VariableDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableStatement {\r\n var stmt = new VariableStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.declarations = declarations; setParent(declarations, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableDeclaration {\r\n var elem = new VariableDeclaration();\r\n elem.range = range;\r\n elem.flags = flags;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.decorators = decorators; // inherited\r\n return elem;\r\n }\r\n\r\n static createVoidStatement(\r\n expression: Expression,\r\n range: Range\r\n ): VoidStatement {\r\n var stmt = new VoidStatement();\r\n stmt.range = range;\r\n stmt.expression = expression;\r\n return stmt;\r\n }\r\n\r\n static createWhileStatement(\r\n condition: Expression,\r\n statement: Statement,\r\n range: Range\r\n ): WhileStatement {\r\n var stmt = new WhileStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n}\r\n\r\n// types\r\n\r\nexport abstract class CommonTypeNode extends Node {\r\n // kind varies\r\n\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type annotation. */\r\nexport class TypeNode extends CommonTypeNode {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: CommonTypeNode[] | null;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameterNode extends Node {\r\n kind = NodeKind.TYPEPARAMETER;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Extended type reference, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n}\r\n\r\n/** Represents the kind of a parameter. */\r\nexport enum ParameterKind {\r\n /** No specific flags. */\r\n DEFAULT,\r\n /** Is an optional parameter. */\r\n OPTIONAL,\r\n /** Is a rest parameter. */\r\n REST\r\n}\r\n\r\n/** Represents a function parameter. */\r\nexport class ParameterNode extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: CommonTypeNode;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n /** Implicit field declaration, if applicable. */\r\n implicitFieldDeclaration: FieldDeclaration | null = null;\r\n}\r\n\r\n/** Represents a function signature. */\r\nexport class SignatureNode extends CommonTypeNode {\r\n kind = NodeKind.SIGNATURE;\r\n\r\n /** Accepted parameters. */\r\n parameters: ParameterNode[];\r\n /** Return type. */\r\n returnType: CommonTypeNode;\r\n /** Explicitly provided this type, if any. */\r\n explicitThisType: TypeNode | null; // can't be a function\r\n}\r\n\r\n// special\r\n\r\n/** Built-in decorator kinds. */\r\nexport enum DecoratorKind {\r\n CUSTOM,\r\n GLOBAL,\r\n OPERATOR,\r\n OPERATOR_BINARY,\r\n OPERATOR_PREFIX,\r\n OPERATOR_POSTFIX,\r\n UNMANAGED,\r\n SEALED,\r\n INLINE,\r\n EXTERNAL,\r\n BUILTIN\r\n}\r\n\r\n/** Returns the kind of the specified decorator. Defaults to {@link DecoratorKind.CUSTOM}. */\r\nexport function decoratorNameToKind(name: Expression): DecoratorKind {\r\n // @global, @inline, @operator, @sealed, @unmanaged\r\n if (name.kind == NodeKind.IDENTIFIER) {\r\n let nameStr = (name).text;\r\n assert(nameStr.length);\r\n switch (nameStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (nameStr == \"builtin\") return DecoratorKind.BUILTIN;\r\n break;\r\n }\r\n case CharCode.e: {\r\n if (nameStr == \"external\") return DecoratorKind.EXTERNAL;\r\n break;\r\n }\r\n case CharCode.g: {\r\n if (nameStr == \"global\") return DecoratorKind.GLOBAL;\r\n break;\r\n }\r\n case CharCode.i: {\r\n if (nameStr == \"inline\") return DecoratorKind.INLINE;\r\n break;\r\n }\r\n case CharCode.o: {\r\n if (nameStr == \"operator\") return DecoratorKind.OPERATOR;\r\n break;\r\n }\r\n case CharCode.s: {\r\n if (nameStr == \"sealed\") return DecoratorKind.SEALED;\r\n break;\r\n }\r\n case CharCode.u: {\r\n if (nameStr == \"unmanaged\") return DecoratorKind.UNMANAGED;\r\n break;\r\n }\r\n }\r\n } else if (\r\n name.kind == NodeKind.PROPERTYACCESS &&\r\n (name).expression.kind == NodeKind.IDENTIFIER\r\n ) {\r\n let nameStr = ((name).expression).text;\r\n assert(nameStr.length);\r\n let propStr = (name).property.text;\r\n assert(propStr.length);\r\n // @operator.binary, @operator.prefix, @operator.postfix\r\n if (nameStr == \"operator\") {\r\n switch (propStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (propStr == \"binary\") return DecoratorKind.OPERATOR_BINARY;\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (propStr) {\r\n case \"prefix\": return DecoratorKind.OPERATOR_PREFIX;\r\n case \"postfix\": return DecoratorKind.OPERATOR_POSTFIX;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return DecoratorKind.CUSTOM;\r\n}\r\n\r\n/** Represents a decorator. */\r\nexport class DecoratorNode extends Node {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n}\r\n\r\n/** Comment kinds. */\r\nexport enum CommentKind {\r\n /** Line comment. */\r\n LINE,\r\n /** Triple-slash comment. */\r\n TRIPLE,\r\n /** Block comment. */\r\n BLOCK\r\n}\r\n\r\n/** Represents a comment. */\r\nexport class CommentNode extends Node {\r\n kind = NodeKind.COMMENT;\r\n\r\n /** Comment kind. */\r\n commentKind: CommentKind;\r\n /** Comment text. */\r\n text: string;\r\n}\r\n\r\n// expressions\r\n\r\n/** Base class of all expression nodes. */\r\nexport abstract class Expression extends Node { }\r\n\r\n/** Represents an identifier expression. */\r\nexport class IdentifierExpression extends Expression {\r\n kind = NodeKind.IDENTIFIER;\r\n\r\n /** Textual name. */\r\n text: string;\r\n}\r\n\r\n/** Indicates the kind of a literal. */\r\nexport enum LiteralKind {\r\n FLOAT,\r\n INTEGER,\r\n STRING,\r\n REGEXP,\r\n ARRAY,\r\n OBJECT\r\n}\r\n\r\n/** Base class of all literal expressions. */\r\nexport abstract class LiteralExpression extends Expression {\r\n kind = NodeKind.LITERAL;\r\n\r\n /** Specific literal kind. */\r\n literalKind: LiteralKind;\r\n}\r\n\r\n/** Represents an `[]` literal expression. */\r\nexport class ArrayLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.ARRAY;\r\n\r\n /** Nested element expressions. */\r\n elementExpressions: (Expression | null)[];\r\n}\r\n\r\n/** Indicates the kind of an assertion. */\r\nexport enum AssertionKind {\r\n PREFIX,\r\n AS\r\n}\r\n\r\n/** Represents an assertion expression. */\r\nexport class AssertionExpression extends Expression {\r\n kind = NodeKind.ASSERTION;\r\n\r\n /** Specific kind of this assertion. */\r\n assertionKind: AssertionKind;\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Target type. */\r\n toType: CommonTypeNode;\r\n}\r\n\r\n/** Represents a binary expression. */\r\nexport class BinaryExpression extends Expression {\r\n kind = NodeKind.BINARY;\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Left-hand side expression */\r\n left: Expression;\r\n /** Right-hand side expression. */\r\n right: Expression;\r\n}\r\n\r\n/** Represents a call expression. */\r\nexport class CallExpression extends Expression {\r\n kind = NodeKind.CALL;\r\n\r\n /** Called expression. Usually an identifier or property access expression. */\r\n expression: Expression;\r\n /** Provided type arguments. */\r\n typeArguments: CommonTypeNode[] | null;\r\n /** Provided arguments. */\r\n arguments: Expression[];\r\n}\r\n\r\n/** Represents a class expression using the 'class' keyword. */\r\nexport class ClassExpression extends Expression {\r\n kind = NodeKind.CLASS;\r\n\r\n /** Inline class declaration. */\r\n declaration: ClassDeclaration;\r\n}\r\n\r\n/** Represents a comma expression composed of multiple expressions. */\r\nexport class CommaExpression extends Expression {\r\n kind = NodeKind.COMMA;\r\n\r\n /** Sequential expressions. */\r\n expressions: Expression[];\r\n}\r\n\r\n/** Represents a `constructor` expression. */\r\nexport class ConstructorExpression extends IdentifierExpression {\r\n kind = NodeKind.CONSTRUCTOR;\r\n text = \"constructor\";\r\n}\r\n\r\n/** Represents an element access expression, e.g., array access. */\r\nexport class ElementAccessExpression extends Expression {\r\n kind = NodeKind.ELEMENTACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Element of the expression being accessed. */\r\n elementExpression: Expression;\r\n}\r\n\r\n/** Represents a float literal expression. */\r\nexport class FloatLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.FLOAT;\r\n\r\n /** Float value. */\r\n value: f64;\r\n}\r\n\r\n/** Represents a function expression using the 'function' keyword. */\r\nexport class FunctionExpression extends Expression {\r\n kind = NodeKind.FUNCTION;\r\n\r\n /** Inline function declaration. */\r\n declaration: FunctionDeclaration;\r\n}\r\n\r\n/** Represents an `instanceof` expression. */\r\nexport class InstanceOfExpression extends Expression {\r\n kind = NodeKind.INSTANCEOF;\r\n\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Type to test for. */\r\n isType: CommonTypeNode;\r\n}\r\n\r\n/** Represents an integer literal expression. */\r\nexport class IntegerLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.INTEGER;\r\n\r\n /** Integer value. */\r\n value: I64;\r\n}\r\n\r\n/** Represents a `new` expression. Like a call but with its own kind. */\r\nexport class NewExpression extends CallExpression {\r\n kind = NodeKind.NEW;\r\n}\r\n\r\n/** Represents a `null` expression. */\r\nexport class NullExpression extends IdentifierExpression {\r\n kind = NodeKind.NULL;\r\n text = \"null\";\r\n}\r\n\r\n/** Represents an object literal expression. */\r\nexport class ObjectLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.OBJECT;\r\n\r\n /** Field names. */\r\n names: IdentifierExpression[];\r\n /** Field values. */\r\n values: Expression[];\r\n}\r\n\r\n/** Represents a parenthesized expression. */\r\nexport class ParenthesizedExpression extends Expression {\r\n kind = NodeKind.PARENTHESIZED;\r\n\r\n /** Expression in parenthesis. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a property access expression. */\r\nexport class PropertyAccessExpression extends Expression {\r\n kind = NodeKind.PROPERTYACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Property of the expression being accessed. */\r\n property: IdentifierExpression;\r\n}\r\n\r\n/** Represents a regular expression literal expression. */\r\nexport class RegexpLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.REGEXP;\r\n\r\n /** Regular expression pattern. */\r\n pattern: string;\r\n /** Regular expression flags. */\r\n patternFlags: string;\r\n}\r\n\r\n/** Represents a ternary expression, i.e., short if notation. */\r\nexport class TernaryExpression extends Expression {\r\n kind = NodeKind.TERNARY;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Expression executed when condition is `true`. */\r\n ifThen: Expression;\r\n /** Expression executed when condition is `false`. */\r\n ifElse: Expression;\r\n}\r\n\r\n/** Represents a string literal expression. */\r\nexport class StringLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.STRING;\r\n\r\n /** String value without quotes. */\r\n value: string;\r\n}\r\n\r\n/** Represents a `super` expression. */\r\nexport class SuperExpression extends IdentifierExpression {\r\n kind = NodeKind.SUPER;\r\n text = \"super\";\r\n}\r\n\r\n/** Represents a `this` expression. */\r\nexport class ThisExpression extends IdentifierExpression {\r\n kind = NodeKind.THIS;\r\n text = \"this\";\r\n}\r\n\r\n/** Represents a `true` expression. */\r\nexport class TrueExpression extends IdentifierExpression {\r\n kind = NodeKind.TRUE;\r\n text = \"true\";\r\n}\r\n\r\n/** Represents a `false` expression. */\r\nexport class FalseExpression extends IdentifierExpression {\r\n kind = NodeKind.FALSE;\r\n text = \"false\";\r\n}\r\n\r\n/** Base class of all unary expressions. */\r\nexport abstract class UnaryExpression extends Expression {\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Operand expression. */\r\n operand: Expression;\r\n}\r\n\r\n/** Represents a unary postfix expression, e.g. a postfix increment. */\r\nexport class UnaryPostfixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPOSTFIX;\r\n}\r\n\r\n/** Represents a unary prefix expression, e.g. a negation. */\r\nexport class UnaryPrefixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPREFIX;\r\n}\r\n\r\n// statements\r\n\r\nexport function isLastStatement(statement: Statement): bool {\r\n var parent = assert(statement.parent);\r\n if (parent.kind == NodeKind.BLOCK) {\r\n let statements = (parent).statements;\r\n if (statements[statements.length - 1] === statement) {\r\n switch (assert(parent.parent).kind) {\r\n case NodeKind.FUNCTIONDECLARATION:\r\n case NodeKind.METHODDECLARATION: return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all statement nodes. */\r\nexport abstract class Statement extends Node { }\r\n\r\n/** Indicates the specific kind of a source. */\r\nexport enum SourceKind {\r\n /** Default source. Usually imported from an entry file. */\r\n DEFAULT,\r\n /** Entry file. */\r\n ENTRY,\r\n /** Library file. */\r\n LIBRARY\r\n}\r\n\r\n/** A top-level source node. */\r\nexport class Source extends Node {\r\n kind = NodeKind.SOURCE;\r\n parent = null;\r\n\r\n /** Source kind. */\r\n sourceKind: SourceKind;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Path used internally. */\r\n internalPath: string;\r\n /** Simple path (last part without extension). */\r\n simplePath: string;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Full source text. */\r\n text: string;\r\n /** Tokenizer reference. */\r\n tokenizer: Tokenizer | null = null;\r\n /** Source map index. */\r\n debugInfoIndex: i32 = -1;\r\n /** Re-exported sources. */\r\n exportPaths: Set | null = null;\r\n\r\n /** Constructs a new source node. */\r\n constructor(normalizedPath: string, text: string, kind: SourceKind) {\r\n super();\r\n this.sourceKind = kind;\r\n this.normalizedPath = normalizedPath;\r\n var internalPath = mangleInternalPath(this.normalizedPath);\r\n this.internalPath = internalPath;\r\n var pos = internalPath.lastIndexOf(PATH_DELIMITER);\r\n this.simplePath = pos >= 0 ? internalPath.substring(pos + 1) : internalPath;\r\n this.statements = new Array();\r\n this.range = new Range(this, 0, text.length);\r\n this.text = text;\r\n }\r\n\r\n /** Tests if this source is an entry file. */\r\n get isEntry(): bool { return this.sourceKind == SourceKind.ENTRY; }\r\n /** Tests if this source is a stdlib file. */\r\n get isLibrary(): bool { return this.sourceKind == SourceKind.LIBRARY; }\r\n}\r\n\r\n/** Base class of all declaration statements. */\r\nexport abstract class DeclarationStatement extends Statement {\r\n\r\n /** Simple name being declared. */\r\n name: IdentifierExpression;\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null = null;\r\n\r\n protected cachedProgramLevelInternalName: string | null = null;\r\n protected cachedFileLevelInternalName: string | null = null;\r\n\r\n /** Gets the mangled program-level internal name of this declaration. */\r\n get programLevelInternalName(): string {\r\n if (!this.cachedProgramLevelInternalName) {\r\n this.cachedProgramLevelInternalName = mangleInternalName(this, true);\r\n }\r\n return this.cachedProgramLevelInternalName;\r\n }\r\n\r\n /** Gets the mangled file-level internal name of this declaration. */\r\n get fileLevelInternalName(): string {\r\n if (!this.cachedFileLevelInternalName) {\r\n this.cachedFileLevelInternalName = mangleInternalName(this, false);\r\n }\r\n return this.cachedFileLevelInternalName;\r\n }\r\n\r\n /** Tests if this is a top-level declaration within its source file. */\r\n get isTopLevel(): bool {\r\n var parent = this.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent)) {\r\n return false;\r\n }\r\n return parent.kind == NodeKind.SOURCE;\r\n }\r\n\r\n /** Tests if this declaration is a top-level export within its source file. */\r\n get isTopLevelExport(): bool {\r\n var parent = this.parent;\r\n if (!parent || (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent))) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.NAMESPACEDECLARATION) {\r\n return this.is(CommonFlags.EXPORT) && (parent).isTopLevelExport;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return this.is(CommonFlags.STATIC) && (parent).isTopLevelExport;\r\n }\r\n return parent.kind == NodeKind.SOURCE && this.is(CommonFlags.EXPORT);\r\n }\r\n\r\n /** Tests if this declaration needs an explicit export. */\r\n needsExplicitExport(member: ExportMember): bool {\r\n // This is necessary because module-level exports are automatically created\r\n // for top level declarations of all sorts. This function essentially tests\r\n // that there isn't a otherwise duplicate top-level export already.\r\n return (\r\n member.name.text != member.externalName.text || // if aliased\r\n this.range.source != member.range.source || // if a re-export\r\n !this.isTopLevelExport // if not top-level\r\n );\r\n }\r\n}\r\n\r\n/** Base class of all variable-like declaration statements. */\r\nexport abstract class VariableLikeDeclarationStatement extends DeclarationStatement {\r\n\r\n /** Variable type. */\r\n type: CommonTypeNode | null;\r\n /** Variable initializer. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a block statement. */\r\nexport class BlockStatement extends Statement {\r\n kind = NodeKind.BLOCK;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `break` statement. */\r\nexport class BreakStatement extends Statement {\r\n kind = NodeKind.BREAK;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `class` declaration. */\r\nexport class ClassDeclaration extends DeclarationStatement {\r\n kind = NodeKind.CLASSDECLARATION;\r\n\r\n /** Accepted type parameters. */\r\n typeParameters: TypeParameterNode[];\r\n /** Base class type being extended, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n /** Interface types being implemented, if any. */\r\n implementsTypes: TypeNode[] | null; // can't be functions\r\n /** Class member declarations. */\r\n members: DeclarationStatement[];\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents a `continue` statement. */\r\nexport class ContinueStatement extends Statement {\r\n kind = NodeKind.CONTINUE;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `do` statement. */\r\nexport class DoStatement extends Statement {\r\n kind = NodeKind.DO;\r\n\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n /** Condition when to repeat. */\r\n condition: Expression;\r\n}\r\n\r\n/** Represents an empty statement, i.e., a semicolon terminating nothing. */\r\nexport class EmptyStatement extends Statement {\r\n kind = NodeKind.EMPTY;\r\n}\r\n\r\n/** Represents an `enum` declaration. */\r\nexport class EnumDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMDECLARATION;\r\n\r\n /** Enum value declarations. */\r\n values: EnumValueDeclaration[];\r\n}\r\n\r\n/** Represents a value of an `enum` declaration. */\r\nexport class EnumValueDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMVALUEDECLARATION;\r\n // name is inherited\r\n\r\n /** Value expression. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents an `export import` statement of an interface. */\r\nexport class ExportImportStatement extends Node {\r\n kind = NodeKind.EXPORTIMPORT;\r\n\r\n /** Identifier being imported. */\r\n name: IdentifierExpression;\r\n /** Identifier being exported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents a member of an `export` statement. */\r\nexport class ExportMember extends Node {\r\n kind = NodeKind.EXPORTMEMBER;\r\n\r\n /** Identifier being exported. */\r\n name: IdentifierExpression;\r\n /** Identifier seen when imported again. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `export` statement. */\r\nexport class ExportStatement extends Statement {\r\n kind = NodeKind.EXPORT;\r\n\r\n /** Array of members if a set of named exports, or `null` if a filespace export. */\r\n members: ExportMember[] | null;\r\n /** Path being exported from, if applicable. */\r\n path: StringLiteralExpression | null;\r\n /** Normalized path, if `path` is set. */\r\n normalizedPath: string | null;\r\n /** Mangled internal path being referenced, if `path` is set. */\r\n internalPath: string | null;\r\n}\r\n\r\n/** Represents an expression that is used as a statement. */\r\nexport class ExpressionStatement extends Statement {\r\n kind = NodeKind.EXPRESSION;\r\n\r\n /** Expression being used as a statement.*/\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a field declaration within a `class`. */\r\nexport class FieldDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.FIELDDECLARATION;\r\n\r\n /** Parameter index within the constructor, if applicable. */\r\n parameterIndex: i32 = -1;\r\n}\r\n\r\n/** Represents a `for` statement. */\r\nexport class ForStatement extends Statement {\r\n kind = NodeKind.FOR;\r\n\r\n /**\r\n * Initializer statement, if present.\r\n * Either a {@link VariableStatement} or {@link ExpressionStatement}.\r\n */\r\n initializer: Statement | null;\r\n /** Condition expression, if present. */\r\n condition: Expression | null;\r\n /** Incrementor expression, if present. */\r\n incrementor: Expression | null;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Represents a `function` declaration. */\r\nexport class FunctionDeclaration extends DeclarationStatement {\r\n kind = NodeKind.FUNCTIONDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Function signature. */\r\n signature: SignatureNode;\r\n /** Body statement. Usually a block. */\r\n body: Statement | null;\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents an `if` statement. */\r\nexport class IfStatement extends Statement {\r\n kind = NodeKind.IF;\r\n\r\n /** Condition. */\r\n condition: Expression;\r\n /** Statement executed when condition is `true`. */\r\n ifTrue: Statement;\r\n /** Statement executed when condition is `false`. */\r\n ifFalse: Statement | null;\r\n}\r\n\r\n/** Represents an `import` declaration part of an {@link ImportStatement}. */\r\nexport class ImportDeclaration extends DeclarationStatement {\r\n kind = NodeKind.IMPORTDECLARATION;\r\n\r\n /** Identifier being imported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `import` statement. */\r\nexport class ImportStatement extends Statement {\r\n kind = NodeKind.IMPORT;\r\n\r\n /** Array of member declarations or `null` if an asterisk import. */\r\n declarations: ImportDeclaration[] | null;\r\n /** Name of the local namespace, if an asterisk import. */\r\n namespaceName: IdentifierExpression | null;\r\n /** Path being imported from. */\r\n path: StringLiteralExpression;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Mangled internal path being referenced. */\r\n internalPath: string;\r\n}\r\n\r\n/** Represents an `interfarce` declaration. */\r\nexport class InterfaceDeclaration extends ClassDeclaration {\r\n kind = NodeKind.INTERFACEDECLARATION;\r\n}\r\n\r\n/** Represents a method declaration within a `class`. */\r\nexport class MethodDeclaration extends FunctionDeclaration {\r\n kind = NodeKind.METHODDECLARATION;\r\n}\r\n\r\n/** Represents a `namespace` declaration. */\r\nexport class NamespaceDeclaration extends DeclarationStatement {\r\n kind = NodeKind.NAMESPACEDECLARATION;\r\n\r\n /** Array of namespace members. */\r\n members: Statement[];\r\n}\r\n\r\n/** Represents a `return` statement. */\r\nexport class ReturnStatement extends Statement {\r\n kind = NodeKind.RETURN;\r\n\r\n /** Value expression being returned, if present. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents a single `case` within a `switch` statement. */\r\nexport class SwitchCase extends Node {\r\n kind = NodeKind.SWITCHCASE;\r\n\r\n /** Label expression. `null` indicates the default case. */\r\n label: Expression | null;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `switch` statement. */\r\nexport class SwitchStatement extends Statement {\r\n kind = NodeKind.SWITCH;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Contained cases. */\r\n cases: SwitchCase[];\r\n}\r\n\r\n/** Represents a `throw` statement. */\r\nexport class ThrowStatement extends Statement {\r\n kind = NodeKind.THROW;\r\n\r\n /** Value expression being thrown. */\r\n value: Expression;\r\n}\r\n\r\n/** Represents a `try` statement. */\r\nexport class TryStatement extends Statement {\r\n kind = NodeKind.TRY;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Exception variable name, if a `catch` clause is present. */\r\n catchVariable: IdentifierExpression | null;\r\n /** Statements being executed on catch, if a `catch` clause is present. */\r\n catchStatements: Statement[] | null;\r\n /** Statements being executed afterwards, if a `finally` clause is present. */\r\n finallyStatements: Statement[] | null;\r\n}\r\n\r\n/** Represents a `type` declaration. */\r\nexport class TypeDeclaration extends DeclarationStatement {\r\n kind = NodeKind.TYPEDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Type being aliased. */\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents a variable declaration part of a {@link VariableStatement}. */\r\nexport class VariableDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.VARIABLEDECLARATION;\r\n}\r\n\r\n/** Represents a variable statement wrapping {@link VariableDeclaration}s. */\r\nexport class VariableStatement extends Statement {\r\n kind = NodeKind.VARIABLE;\r\n\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null;\r\n /** Array of member declarations. */\r\n declarations: VariableDeclaration[];\r\n}\r\n\r\n/** Represents a void statement dropping an expression's value. */\r\nexport class VoidStatement extends Statement {\r\n kind = NodeKind.VOID;\r\n\r\n /** Expression being dropped. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a `while` statement. */\r\nexport class WhileStatement extends Statement {\r\n kind = NodeKind.WHILE;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Finds the first decorator matching the specified kind. */\r\nexport function findDecorator(kind: DecoratorKind, decorators: DecoratorNode[] | null): DecoratorNode | null {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n if (decorator.decoratorKind == kind) return decorator;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Mangles a declaration's name to an internal name. */\r\nexport function mangleInternalName(declaration: DeclarationStatement, asGlobal: bool = false): string {\r\n var name = declaration.name.text;\r\n var parent = declaration.parent;\r\n if (!parent) return name;\r\n if (\r\n declaration.kind == NodeKind.VARIABLEDECLARATION &&\r\n parent.kind == NodeKind.VARIABLE\r\n ) { // skip over\r\n if (!(parent = parent.parent)) return name;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) + (\r\n declaration.is(CommonFlags.STATIC)\r\n ? STATIC_DELIMITER\r\n : INSTANCE_DELIMITER\r\n ) + name;\r\n }\r\n if (\r\n parent.kind == NodeKind.NAMESPACEDECLARATION ||\r\n parent.kind == NodeKind.ENUMDECLARATION\r\n ) {\r\n return mangleInternalName(parent, asGlobal) +\r\n STATIC_DELIMITER + name;\r\n }\r\n return asGlobal\r\n ? name\r\n : declaration.range.source.internalPath + PATH_DELIMITER + name;\r\n}\r\n\r\n/** Mangles an external to an internal path. */\r\nexport function mangleInternalPath(path: string): string {\r\n if (path.endsWith(\".ts\")) path = path.substring(0, path.length - 3);\r\n return path;\r\n}\r\n\r\n// Helpers\r\n\r\n/** Sets the parent node on an array of nodes. */\r\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\n/** Sets the parent node on an array of nullable nodes. */\r\nfunction setParentIfNotNull(nodes: (Node | null)[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n let node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\r\n}\r\n","/**\r\n * 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 = memory.allocate(16);\r\n return module;\r\n }\r\n\r\n static createFrom(buffer: Uint8Array): Module {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.cachedByValue = memory.allocate(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n memory.free(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n removeFunctionType(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunctionType(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocPtrArray(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, numNames, cStr, condition, value);\r\n } finally {\r\n memory.free(cStr);\r\n memory.free(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) memory.free(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createCallImport(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCallImport(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocPtrArray(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[] | null,\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes ? varTypes.length : 0, body);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n private cachedTemporaryName: usize = 0;\r\n private hasTemporaryFunction: bool = false;\r\n\r\n addTemporaryFunction(result: NativeType, paramTypes: NativeType[] | null, body: ExpressionRef): FunctionRef {\r\n this.hasTemporaryFunction = assert(!this.hasTemporaryFunction);\r\n var tempName = this.cachedTemporaryName;\r\n if (!tempName) this.cachedTemporaryName = tempName = allocString(\"\"); // works because strings are interned\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n let typeRef = _BinaryenAddFunctionType(this.ref, tempName, result, cArr, paramTypes ? paramTypes.length : 0);\r\n return _BinaryenAddFunction(this.ref, tempName, typeRef, 0, 0, body);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n removeTemporaryFunction(): void {\r\n this.hasTemporaryFunction = !assert(this.hasTemporaryFunction);\r\n var tempName = assert(this.cachedTemporaryName);\r\n _BinaryenRemoveFunction(this.ref, tempName);\r\n _BinaryenRemoveFunctionType(this.ref, tempName);\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n removeImport(internalName: string): void {\r\n var cStr = allocString(internalName);\r\n try {\r\n _BinaryenRemoveImport(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n memory.free(cArr3);\r\n memory.free(cArr2);\r\n memory.free(cArr1);\r\n for (let i = k - 1; i >= 0; --i) memory.free(segs[i]);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(funcs: FunctionRef[]): void {\r\n var cArr = allocPtrArray(funcs);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, funcs.length);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n getOptimizeLevel(): i32 {\r\n return _BinaryenGetOptimizeLevel();\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n getShrinkLevel(): i32 {\r\n return _BinaryenGetShrinkLevel();\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n memory.free(cArr);\r\n for (let i = numNames; i >= 0; --i) memory.free(names[i]);\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0; // for free'ing\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeExpression(expr: ExpressionRef): ExpressionRef {\r\n // remember the previous optimize levels and set to max instead, to be sure\r\n var previousOptimizeLevel = _BinaryenGetOptimizeLevel();\r\n var previousShrinkLevel = _BinaryenGetShrinkLevel();\r\n var previousDebugInfo = _BinaryenGetDebugInfo();\r\n _BinaryenSetOptimizeLevel(4);\r\n _BinaryenSetShrinkLevel(0);\r\n _BinaryenSetDebugInfo(false);\r\n\r\n // wrap the expression in a temp. function and run the precompute pass on it\r\n var type = _BinaryenExpressionGetType(expr);\r\n var func = this.addTemporaryFunction(type, null, expr);\r\n var names = this.cachedPrecomputeNames;\r\n if (!names) {\r\n let name = allocString(\"precompute\");\r\n this.cachedPrecomputeName = name;\r\n this.cachedPrecomputeNames = names = allocI32Array([ name ]);\r\n }\r\n _BinaryenFunctionRunPasses(func, this.ref, names, 1);\r\n expr = _BinaryenFunctionGetBody(func);\r\n this.removeTemporaryFunction();\r\n\r\n // reset optimize levels to previous\r\n _BinaryenSetOptimizeLevel(previousOptimizeLevel);\r\n _BinaryenSetShrinkLevel(previousShrinkLevel);\r\n _BinaryenSetDebugInfo(previousDebugInfo);\r\n return expr;\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): BinaryModule {\r\n var out = this.cachedByValue;\r\n var cStr = allocString(sourceMapUrl);\r\n var binaryPtr: usize = 0;\r\n var sourceMapPtr: usize = 0;\r\n try {\r\n _BinaryenModuleAllocateAndWrite(out, this.ref, cStr);\r\n binaryPtr = readInt(out);\r\n let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let ret = new BinaryModule();\r\n ret.output = readBuffer(binaryPtr, binaryBytes);\r\n ret.sourceMap = readString(sourceMapPtr);\r\n return ret;\r\n } finally {\r\n if (cStr) memory.free(cStr);\r\n if (binaryPtr) memory.free(binaryPtr);\r\n if (sourceMapPtr) memory.free(sourceMapPtr);\r\n }\r\n }\r\n\r\n toText(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n toAsmjs(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n dispose(): void {\r\n assert(this.ref);\r\n memory.free(this.cachedByValue);\r\n memory.free(this.cachedTemporaryName);\r\n memory.free(this.cachedPrecomputeName);\r\n memory.free(this.cachedPrecomputeNames);\r\n _BinaryenModuleDispose(this.ref);\r\n this.ref = 0;\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(\r\n expr: ExpressionRef,\r\n noSideEffects: bool = false,\r\n maxDepth: i32 = i32.MAX_VALUE\r\n ): ExpressionRef { // currently supports side effect free expressions only\r\n if (maxDepth < 0) return 0;\r\n maxDepth -= 1;\r\n\r\n var nested1: ExpressionRef,\r\n nested2: ExpressionRef;\r\n\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n }\r\n case ExpressionId.GetLocal: {\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n }\r\n case ExpressionId.GetGlobal: {\r\n let globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n }\r\n case ExpressionId.Load: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return (\r\n _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n );\r\n }\r\n case ExpressionId.Unary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n }\r\n case ExpressionId.Binary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\n// expressions\r\n\r\nexport function getExpressionId(expr: ExpressionRef): ExpressionId {\r\n return _BinaryenExpressionGetId(expr);\r\n}\r\n\r\nexport function getExpressionType(expr: ExpressionRef): NativeType {\r\n return _BinaryenExpressionGetType(expr);\r\n}\r\n\r\nexport function getConstValueI32(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI32(expr);\r\n}\r\n\r\nexport function getConstValueI64Low(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64Low(expr);\r\n}\r\n\r\nexport function getConstValueI64High(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64High(expr);\r\n}\r\n\r\nexport function getConstValueF32(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF32(expr);\r\n}\r\n\r\nexport function getConstValueF64(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF64(expr);\r\n}\r\n\r\nexport function getGetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenGetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenSetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSetLocalGetValue(expr);\r\n}\r\n\r\nexport function isTeeLocal(expr: ExpressionRef): bool {\r\n return _BinaryenSetLocalIsTee(expr);\r\n}\r\n\r\nexport function getBinaryOp(expr: ExpressionRef): BinaryOp {\r\n return _BinaryenBinaryGetOp(expr);\r\n}\r\n\r\nexport function getBinaryLeft(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetLeft(expr);\r\n}\r\n\r\nexport function getBinaryRight(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetRight(expr);\r\n}\r\n\r\nexport function getUnaryOp(expr: ExpressionRef): UnaryOp {\r\n return _BinaryenUnaryGetOp(expr);\r\n}\r\n\r\nexport function getUnaryValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenUnaryGetValue(expr);\r\n}\r\n\r\nexport function getLoadBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetBytes(expr);\r\n}\r\n\r\nexport function getLoadOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetOffset(expr);\r\n}\r\n\r\nexport function getLoadPtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoadGetPtr(expr);\r\n}\r\n\r\nexport function isLoadSigned(expr: ExpressionRef): bool {\r\n return _BinaryenLoadIsSigned(expr);\r\n}\r\n\r\nexport function getStoreBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetBytes(expr);\r\n}\r\n\r\nexport function getStoreOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetOffset(expr);\r\n}\r\n\r\nexport function getStorePtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetPtr(expr);\r\n}\r\n\r\nexport function getStoreValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetValue(expr);\r\n}\r\n\r\nexport function getBlockName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBlockGetName(expr));\r\n}\r\n\r\nexport function getBlockChildCount(expr: ExpressionRef): Index {\r\n return _BinaryenBlockGetNumChildren(expr);\r\n}\r\n\r\nexport function getBlockChild(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenBlockGetChild(expr, index);\r\n}\r\n\r\nexport function getIfCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetCondition(expr);\r\n}\r\n\r\nexport function getIfTrue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfTrue(expr);\r\n}\r\n\r\nexport function getIfFalse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfFalse(expr);\r\n}\r\n\r\nexport function getLoopName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenLoopGetName(expr));\r\n}\r\n\r\nexport function getLoopBody(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoopGetBody(expr);\r\n}\r\n\r\nexport function getBreakName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBreakGetName(expr));\r\n}\r\n\r\nexport function getBreakCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBreakGetCondition(expr);\r\n}\r\n\r\nexport function getSelectThen(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfTrue(expr);\r\n}\r\n\r\nexport function getSelectElse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfFalse(expr);\r\n}\r\n\r\nexport function getSelectCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetCondition(expr);\r\n}\r\n\r\nexport function getDropValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenDropGetValue(expr);\r\n}\r\n\r\nexport function getReturnValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenReturnGetValue(expr);\r\n}\r\n\r\nexport function getCallTarget(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenCallGetTarget(expr));\r\n}\r\n\r\nexport function getHostOp(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenHostGetOp(expr);\r\n}\r\n\r\nexport function getHostOperandCount(expr: ExpressionRef): Index {\r\n return _BinaryenHostGetNumOperands(expr);\r\n}\r\n\r\nexport function getHostOperand(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenHostGetOperand(expr, index);\r\n}\r\n\r\nexport function getHostName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenHostGetNameOperand(expr));\r\n}\r\n\r\n// functions\r\n\r\nexport function getFunctionBody(func: FunctionRef): ExpressionRef {\r\n return _BinaryenFunctionGetBody(func);\r\n}\r\n\r\nexport function getFunctionName(func: FunctionRef): string | null {\r\n return readString(_BinaryenFunctionGetName(func));\r\n}\r\n\r\nexport function getFunctionParamCount(func: FunctionRef): Index {\r\n return _BinaryenFunctionGetNumParams(func);\r\n}\r\n\r\nexport function getFunctionParamType(func: FunctionRef, index: Index): NativeType {\r\n return _BinaryenFunctionGetParam(func, index);\r\n}\r\n\r\nexport function getFunctionResultType(func: FunctionRef): NativeType {\r\n return _BinaryenFunctionGetResult(func);\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n }\r\n\r\n private constructor() {}\r\n\r\n addBlock(code: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlock(this.ref, code);\r\n }\r\n\r\n addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void {\r\n _RelooperAddBranch(from, to, condition, code);\r\n }\r\n\r\n addBlockWithSwitch(code: ExpressionRef, condition: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n }\r\n\r\n addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n }\r\n}\r\n\r\n// export function hasSideEffects(expr: ExpressionRef): bool {\r\n// switch (_BinaryenExpressionGetId(expr = getPtr(expr))) {\r\n// case ExpressionId.GetLocal:\r\n// case ExpressionId.GetGlobal:\r\n// case ExpressionId.Const:\r\n// case ExpressionId.Nop:\r\n// case ExpressionId.Unreachable: {\r\n// return false;\r\n// }\r\n// case ExpressionId.Block: {\r\n// for (let i = 0, k = _BinaryenBlockGetNumChildren(expr); i < k; ++i) {\r\n// if (hasSideEffects(_BinaryenBlockGetChild(expr, i))) return true;\r\n// }\r\n// return false;\r\n// }\r\n// case ExpressionId.If: {\r\n// return hasSideEffects(_BinaryenIfGetCondition(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfFalse(expr));\r\n// }\r\n// case ExpressionId.Unary: {\r\n// return hasSideEffects(_BinaryenUnaryGetValue(expr));\r\n// }\r\n// case ExpressionId.Binary: {\r\n// return hasSideEffects(_BinaryenBinaryGetLeft(expr))\r\n// || hasSideEffects(_BinaryenBinaryGetRight(expr));\r\n// }\r\n// case ExpressionId.Drop: {\r\n// return hasSideEffects(_BinaryenDropGetValue(expr));\r\n// }\r\n// case ExpressionId.Select: {\r\n// return hasSideEffects(_BinaryenSelectGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenSelectGetIfFalse(expr))\r\n// || hasSideEffects(_BinaryenSelectGetCondition(expr));\r\n// }\r\n// }\r\n// return true;\r\n// }\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var numValues = u8s.length;\r\n var ptr = memory.allocate(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = memory.allocate(i32s.length << 2);\r\n var idx = ptr;\r\n for (let i = 0, k = i32s.length; i < k; ++i) {\r\n let val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocPtrArray(ptrs: usize[] | null): usize {\r\n return allocI32Array(ptrs); // TODO: WASM64 one day\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = memory.allocate(stringLengthUTF8(str) + 1);\r\n // the following is based on Emscripten's stringToUTF8Array\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\nfunction readInt(ptr: usize): i32 {\r\n return (\r\n load(ptr ) |\r\n (load(ptr + 1) << 8) |\r\n (load(ptr + 2) << 16) |\r\n (load(ptr + 3) << 24)\r\n );\r\n}\r\n\r\nfunction readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (let i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n arr.push(cp);\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\nexport class BinaryModule {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n","/**\r\n * AssemblyScript's intermediate representation describing a program's elements.\r\n * @module program\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX,\r\n GETTER_PREFIX,\r\n SETTER_PREFIX,\r\n FILESPACE_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Options,\r\n Feature\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n Signature\r\n} from \"./types\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n CommonTypeNode,\r\n TypeParameterNode,\r\n DecoratorNode,\r\n DecoratorKind,\r\n\r\n Expression,\r\n IdentifierExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n StringLiteralExpression,\r\n\r\n ClassDeclaration,\r\n DeclarationStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportMember,\r\n ExportStatement,\r\n FieldDeclaration,\r\n FunctionDeclaration,\r\n ImportDeclaration,\r\n ImportStatement,\r\n InterfaceDeclaration,\r\n MethodDeclaration,\r\n NamespaceDeclaration,\r\n TypeDeclaration,\r\n VariableDeclaration,\r\n VariableLikeDeclarationStatement,\r\n VariableStatement,\r\n\r\n decoratorNameToKind,\r\n findDecorator\r\n} from \"./ast\";\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionRef,\r\n ExpressionId,\r\n BinaryOp,\r\n UnaryOp,\r\n\r\n getExpressionId,\r\n getGetLocalIndex,\r\n isTeeLocal,\r\n getSetLocalValue,\r\n getBinaryOp,\r\n getConstValueI32,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getUnaryOp,\r\n getExpressionType,\r\n getLoadBytes,\r\n isLoadSigned,\r\n getIfTrue,\r\n getIfFalse,\r\n getSelectThen,\r\n getSelectElse,\r\n getCallTarget,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getConstValueI64Low\r\n} from \"./module\";\r\n\r\nimport {\r\n CharCode\r\n} from \"./util\";\r\n\r\nimport {\r\n Resolver\r\n} from \"./resolver\";\r\n\r\n/** Represents a yet unresolved import. */\r\nclass QueuedImport {\r\n localName: string;\r\n externalName: string;\r\n externalNameAlt: string;\r\n declaration: ImportDeclaration | null; // not set if a filespace\r\n}\r\n\r\n/** Represents a yet unresolved export. */\r\nclass QueuedExport {\r\n externalName: string;\r\n isReExport: bool;\r\n member: ExportMember;\r\n}\r\n\r\n/** Represents a type alias. */\r\nclass TypeAlias {\r\n typeParameters: TypeParameterNode[] | null;\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents a module-level export. */\r\nclass ModuleExport {\r\n element: Element;\r\n identifier: IdentifierExpression;\r\n}\r\n\r\n/** Represents the kind of an operator overload. */\r\nexport enum OperatorKind {\r\n INVALID,\r\n\r\n // indexed access\r\n INDEXED_GET, // a[]\r\n INDEXED_SET, // a[]=b\r\n UNCHECKED_INDEXED_GET, // unchecked(a[])\r\n UNCHECKED_INDEXED_SET, // unchecked(a[]=b)\r\n\r\n // binary\r\n ADD, // a + b\r\n SUB, // a - b\r\n MUL, // a * b\r\n DIV, // a / b\r\n REM, // a % b\r\n POW, // a ** b\r\n BITWISE_AND, // a & b\r\n BITWISE_OR, // a | b\r\n BITWISE_XOR, // a ^ b\r\n BITWISE_SHL, // a << b\r\n BITWISE_SHR, // a >> b\r\n BITWISE_SHR_U, // a >>> b\r\n EQ, // a == b\r\n NE, // a != b\r\n GT, // a > b\r\n GE, // a >= b\r\n LT, // a < b\r\n LE, // a <= b\r\n\r\n // unary prefix\r\n PLUS, // +a\r\n MINUS, // -a\r\n NOT, // !a\r\n BITWISE_NOT, // ~a\r\n PREFIX_INC, // ++a\r\n PREFIX_DEC, // --a\r\n\r\n // unary postfix\r\n POSTFIX_INC, // a++\r\n POSTFIX_DEC // a--\r\n\r\n // not overridable:\r\n // IDENTITY // a === b\r\n // LOGICAL_AND // a && b\r\n // LOGICAL_OR // a || b\r\n}\r\n\r\n/** Returns the operator kind represented by the specified decorator and string argument. */\r\nfunction operatorKindFromDecorator(decoratorKind: DecoratorKind, arg: string): OperatorKind {\r\n assert(arg.length);\r\n switch (decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.OPENBRACKET: {\r\n if (arg == \"[]\") return OperatorKind.INDEXED_GET;\r\n if (arg == \"[]=\") return OperatorKind.INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.OPENBRACE: {\r\n if (arg == \"{}\") return OperatorKind.UNCHECKED_INDEXED_GET;\r\n if (arg == \"{}=\") return OperatorKind.UNCHECKED_INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.ADD;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.SUB;\r\n break;\r\n }\r\n case CharCode.ASTERISK: {\r\n if (arg == \"*\") return OperatorKind.MUL;\r\n if (arg == \"**\") return OperatorKind.POW;\r\n break;\r\n }\r\n case CharCode.SLASH: {\r\n if (arg == \"/\") return OperatorKind.DIV;\r\n break;\r\n }\r\n case CharCode.PERCENT: {\r\n if (arg == \"%\") return OperatorKind.REM;\r\n break;\r\n }\r\n case CharCode.AMPERSAND: {\r\n if (arg == \"&\") return OperatorKind.BITWISE_AND;\r\n break;\r\n }\r\n case CharCode.BAR: {\r\n if (arg == \"|\") return OperatorKind.BITWISE_OR;\r\n break;\r\n }\r\n case CharCode.CARET: {\r\n if (arg == \"^\") return OperatorKind.BITWISE_XOR;\r\n break;\r\n }\r\n case CharCode.EQUALS: {\r\n if (arg == \"==\") return OperatorKind.EQ;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!=\") return OperatorKind.NE;\r\n break;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n if (arg == \">\") return OperatorKind.GT;\r\n if (arg == \">=\") return OperatorKind.GE;\r\n if (arg == \">>\") return OperatorKind.BITWISE_SHR;\r\n if (arg == \">>>\") return OperatorKind.BITWISE_SHR_U;\r\n break;\r\n }\r\n case CharCode.LESSTHAN: {\r\n if (arg == \"<\") return OperatorKind.LT;\r\n if (arg == \"<=\") return OperatorKind.LE;\r\n if (arg == \"<<\") return OperatorKind.BITWISE_SHL;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_PREFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.PLUS;\r\n if (arg == \"++\") return OperatorKind.PREFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.MINUS;\r\n if (arg == \"--\") return OperatorKind.PREFIX_DEC;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!\") return OperatorKind.NOT;\r\n break;\r\n }\r\n case CharCode.TILDE: {\r\n if (arg == \"~\") return OperatorKind.BITWISE_NOT;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"++\") return OperatorKind.POSTFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"--\") return OperatorKind.POSTFIX_DEC;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n return OperatorKind.INVALID;\r\n}\r\n\r\nconst noTypesYet = new Map();\r\n\r\n/** Represents an AssemblyScript program. */\r\nexport class Program extends DiagnosticEmitter {\r\n\r\n /** Array of source files. */\r\n sources: Source[];\r\n /** Resolver instance. */\r\n resolver: Resolver;\r\n /** Diagnostic offset used where successively obtaining the next diagnostic. */\r\n diagnosticsOffset: i32 = 0;\r\n /** Compiler options. */\r\n options: Options;\r\n\r\n /** Elements by internal name. */\r\n elementsLookup: Map = new Map();\r\n /** Class and function instances by internal name. */\r\n instancesLookup: Map = new Map();\r\n /** Types by internal name. */\r\n typesLookup: Map = noTypesYet;\r\n /** Declared type aliases. */\r\n typeAliases: Map = new Map();\r\n /** File-level exports by exported name. */\r\n fileLevelExports: Map = new Map();\r\n /** Module-level exports by exported name. */\r\n moduleLevelExports: Map = new Map();\r\n\r\n /** Array prototype reference. */\r\n arrayPrototype: ClassPrototype | null = null;\r\n /** String instance reference. */\r\n stringInstance: Class | null = null;\r\n /** Start function reference. */\r\n startFunction: FunctionPrototype;\r\n /** Main function reference, if present. */\r\n mainFunction: FunctionPrototype | null = null;\r\n /** Abort function reference, if present. */\r\n abortInstance: Function | null = null;\r\n /** Memory allocation function. */\r\n memoryAllocateInstance: Function | null = null;\r\n\r\n /** 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 {\r\n let globalAliases = options.globalAliases;\r\n if (globalAliases) {\r\n for (let [alias, name] of globalAliases) {\r\n if (!name.length) continue; // explicitly disabled\r\n let element = this.elementsLookup.get(name);\r\n if (element) this.elementsLookup.set(alias, element);\r\n else throw new Error(\"element not found: \" + name);\r\n }\r\n }\r\n }\r\n\r\n // register 'Array'\r\n if (this.elementsLookup.has(\"Array\")) {\r\n let element = assert(this.elementsLookup.get(\"Array\"));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayPrototype = element;\r\n }\r\n\r\n // register 'String'\r\n if (this.elementsLookup.has(\"String\")) {\r\n let element = assert(this.elementsLookup.get(\"String\"));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n let instance = resolver.resolveClass(element, null);\r\n if (instance) {\r\n if (this.typesLookup.has(\"string\")) {\r\n let declaration = (element).declaration;\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n } else {\r\n this.stringInstance = instance;\r\n this.typesLookup.set(\"string\", instance.type);\r\n }\r\n }\r\n }\r\n\r\n // register 'start'\r\n {\r\n let element = assert(this.elementsLookup.get(\"start\"));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.startFunction = element;\r\n }\r\n\r\n // register 'main' if present\r\n if (this.moduleLevelExports.has(\"main\")) {\r\n let element = (this.moduleLevelExports.get(\"main\")).element;\r\n if (\r\n element.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n !(element).isAny(CommonFlags.GENERIC | CommonFlags.AMBIENT)\r\n ) {\r\n (element).set(CommonFlags.MAIN);\r\n this.mainFunction = element;\r\n }\r\n }\r\n\r\n // register 'abort' if present\r\n if (this.elementsLookup.has(\"abort\")) {\r\n let element = this.elementsLookup.get(\"abort\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let instance = this.resolver.resolveFunction(element, null);\r\n if (instance) this.abortInstance = instance;\r\n }\r\n\r\n // register 'memory.allocate' if present\r\n if (this.elementsLookup.has(\"memory\")) {\r\n let element = this.elementsLookup.get(\"memory\");\r\n let members = element.members;\r\n if (members) {\r\n if (members.has(\"allocate\")) {\r\n element = assert(members.get(\"allocate\"));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let instance = this.resolver.resolveFunction(element, null);\r\n if (instance) this.memoryAllocateInstance = instance;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Sets a constant integer value. */\r\n setConstantInteger(globalName: string, type: Type, value: I64): void {\r\n assert(type.is(TypeFlags.INTEGER));\r\n this.elementsLookup.set(globalName,\r\n new Global(this, globalName, globalName, type, null, DecoratorFlags.NONE)\r\n .withConstantIntegerValue(value)\r\n );\r\n }\r\n\r\n /** Sets a constant float value. */\r\n setConstantFloat(globalName: string, type: Type, value: f64): void {\r\n assert(type.is(TypeFlags.FLOAT));\r\n this.elementsLookup.set(globalName,\r\n new Global(this, globalName, globalName, type, null, DecoratorFlags.NONE)\r\n .withConstantFloatValue(value)\r\n );\r\n }\r\n\r\n /** Tries to locate an import by traversing exports and queued exports. */\r\n private tryLocateImport(\r\n externalName: string,\r\n queuedNamedExports: Map\r\n ): Element | null {\r\n var element: Element | null;\r\n var fileLevelExports = this.fileLevelExports;\r\n do {\r\n if (element = fileLevelExports.get(externalName)) return element;\r\n let queuedExport = queuedNamedExports.get(externalName);\r\n if (!queuedExport) break;\r\n if (queuedExport.isReExport) {\r\n externalName = queuedExport.externalName;\r\n continue;\r\n }\r\n return this.elementsLookup.get(queuedExport.externalName);\r\n } while (true);\r\n return null;\r\n }\r\n\r\n /** Checks that only supported decorators are present. */\r\n private checkDecorators(\r\n decorators: DecoratorNode[],\r\n acceptedFlags: DecoratorFlags\r\n ): DecoratorFlags {\r\n var presentFlags = DecoratorFlags.NONE;\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n let kind = decoratorNameToKind(decorator.name);\r\n let flag = decoratorKindToFlag(kind);\r\n if (flag) {\r\n if (flag == DecoratorFlags.BUILTIN) {\r\n if (decorator.range.source.isLibrary) {\r\n presentFlags |= flag;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n }\r\n } else if (!(acceptedFlags & flag)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else if (presentFlags & flag) {\r\n this.error(\r\n DiagnosticCode.Duplicate_decorator,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else {\r\n presentFlags |= flag;\r\n }\r\n }\r\n }\r\n return presentFlags;\r\n }\r\n\r\n /** Checks and sets up global options of an element. */\r\n private checkGlobal(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var parentNode = declaration.parent;\r\n // alias globally if explicitly annotated @global or exported from a top-level library file\r\n if (\r\n (element.hasDecorator(DecoratorFlags.GLOBAL)) ||\r\n (\r\n declaration.range.source.isLibrary &&\r\n element.is(CommonFlags.EXPORT) &&\r\n (\r\n assert(parentNode).kind == NodeKind.SOURCE ||\r\n (\r\n parentNode).kind == NodeKind.VARIABLE &&\r\n assert((parentNode).parent).kind == NodeKind.SOURCE\r\n )\r\n )\r\n ) {\r\n let globalName = declaration.programLevelInternalName;\r\n if (this.elementsLookup.has(globalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, element.internalName\r\n );\r\n } else {\r\n this.elementsLookup.set(globalName, element);\r\n }\r\n }\r\n // builtins use the global name directly\r\n if (element.hasDecorator(DecoratorFlags.BUILTIN)) {\r\n element.internalName = declaration.programLevelInternalName;\r\n }\r\n }\r\n\r\n /** Initializes a class declaration. */\r\n private initializeClass(\r\n declaration: ClassDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new ClassPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.SEALED |\r\n DecoratorFlags.UNMANAGED\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n var implementsTypes = declaration.implementsTypes;\r\n if (implementsTypes) {\r\n let numImplementsTypes = implementsTypes.length;\r\n if (prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (numImplementsTypes) {\r\n this.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_implement_interfaces,\r\n Range.join(\r\n declaration.name.range,\r\n implementsTypes[numImplementsTypes - 1].range\r\n )\r\n );\r\n }\r\n\r\n // remember classes that implement interfaces\r\n } else if (numImplementsTypes) {\r\n for (let i = 0; i < numImplementsTypes; ++i) {\r\n this.warning( // TODO\r\n DiagnosticCode.Operation_not_supported,\r\n implementsTypes[i].range\r\n );\r\n }\r\n queuedImplements.push(prototype);\r\n }\r\n }\r\n\r\n // remember classes that extend another one\r\n if (declaration.extendsType) queuedExtends.push(prototype);\r\n\r\n // add as namespace member if applicable\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // otherwise add to file-level exports if exported\r\n } else if (prototype.is(CommonFlags.EXPORT)) {\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (prototype.is(CommonFlags.EXPORT) && declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n // initialize members\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false); // should have been reported while parsing\r\n return;\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n /** Initializes a field of a class or interface. */\r\n private initializeField(\r\n declaration: FieldDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var decorators = declaration.decorators;\r\n var isInterface = classPrototype.kind == ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n // static fields become global variables\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n if (isInterface) {\r\n // should have been reported while parsing\r\n assert(false);\r\n }\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n let staticField = new Global(\r\n this,\r\n name,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators, DecoratorFlags.INLINE)\r\n : DecoratorFlags.NONE\r\n );\r\n staticField.parent = classPrototype;\r\n classPrototype.members.set(name, staticField);\r\n this.elementsLookup.set(internalName, staticField);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n staticField.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n if (staticField.hasDecorator(DecoratorFlags.INLINE) && !staticField.is(CommonFlags.READONLY)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n assert(findDecorator(DecoratorKind.INLINE, decorators)).range, \"inline\"\r\n );\r\n }\r\n\r\n // instance fields are remembered until resolved\r\n } else {\r\n if (isInterface) {\r\n // should have been reported while parsing\r\n assert(!declaration.isAny(CommonFlags.ABSTRACT | CommonFlags.GET | CommonFlags.SET));\r\n }\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instanceField = new FieldPrototype(\r\n classPrototype,\r\n name,\r\n internalName,\r\n declaration\r\n );\r\n if (decorators) this.checkDecorators(decorators, DecoratorFlags.NONE);\r\n classPrototype.instanceMembers.set(name, instanceField);\r\n }\r\n }\r\n\r\n /** Initializes a method of a class or interface. */\r\n private initializeMethod(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var prototype: FunctionPrototype | null = null;\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.checkDecorators(decorators,\r\n DecoratorFlags.OPERATOR_BINARY |\r\n DecoratorFlags.OPERATOR_PREFIX |\r\n DecoratorFlags.OPERATOR_POSTFIX |\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n // static methods become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n assert(declaration.name.kind != NodeKind.CONSTRUCTOR);\r\n\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0, declaration.name.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n classPrototype.members.set(simpleName, prototype);\r\n this.elementsLookup.set(internalName, prototype);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance methods are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n // if (classPrototype.isUnmanaged && instancePrototype.isAbstract) {\r\n // this.error( Unmanaged classes cannot declare abstract methods. );\r\n // }\r\n if (declaration.name.kind == NodeKind.CONSTRUCTOR) {\r\n if (classPrototype.constructorPrototype) {\r\n this.error(\r\n DiagnosticCode.Multiple_constructor_implementations_are_not_allowed,\r\n declaration.name.range\r\n );\r\n } else {\r\n prototype.set(CommonFlags.CONSTRUCTOR);\r\n classPrototype.constructorPrototype = prototype;\r\n }\r\n } else {\r\n classPrototype.instanceMembers.set(simpleName, prototype);\r\n }\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n this.checkOperatorOverloads(declaration.decorators, prototype, classPrototype);\r\n }\r\n\r\n private checkOperatorOverloads(\r\n decorators: DecoratorNode[] | null,\r\n prototype: FunctionPrototype,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n switch (decorator.decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY:\r\n case DecoratorKind.OPERATOR_PREFIX:\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n let numArgs = decorator.arguments && decorator.arguments.length || 0;\r\n if (numArgs == 1) {\r\n let firstArg = (decorator.arguments)[0];\r\n if (\r\n firstArg.kind == NodeKind.LITERAL &&\r\n (firstArg).literalKind == LiteralKind.STRING\r\n ) {\r\n let kind = operatorKindFromDecorator(\r\n decorator.decoratorKind,\r\n (firstArg).value\r\n );\r\n if (kind == OperatorKind.INVALID) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n firstArg.range\r\n );\r\n } else {\r\n let overloads = classPrototype.overloadPrototypes;\r\n if (overloads.has(kind)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_function_implementation,\r\n firstArg.range\r\n );\r\n } else {\r\n prototype.operatorKind = kind;\r\n overloads.set(kind, prototype);\r\n }\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n firstArg.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"1\", numArgs.toString(0)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeAccessor(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalPropertyName = declaration.fileLevelInternalName;\r\n var propertyElement = this.elementsLookup.get(internalPropertyName);\r\n var isGetter = declaration.is(CommonFlags.GET);\r\n var isNew = false;\r\n if (propertyElement) {\r\n if (\r\n propertyElement.kind != ElementKind.PROPERTY ||\r\n (isGetter\r\n ? (propertyElement).getterPrototype\r\n : (propertyElement).setterPrototype\r\n ) != null\r\n ) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n propertyElement = new Property(\r\n this,\r\n simpleName,\r\n internalPropertyName,\r\n classPrototype\r\n );\r\n isNew = true;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.checkDecorators(decorators,\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n var baseName = (isGetter ? GETTER_PREFIX : SETTER_PREFIX) + simpleName;\r\n\r\n // static accessors become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n let staticName = classPrototype.internalName + STATIC_DELIMITER + baseName;\r\n if (this.elementsLookup.has(staticName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n let staticPrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n staticName,\r\n declaration,\r\n null,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = staticPrototype;\r\n } else {\r\n (propertyElement).setterPrototype = staticPrototype;\r\n }\r\n if (isNew) {\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n classPrototype.members.set(simpleName, propertyElement); // check above\r\n } else {\r\n assert(classPrototype.members && classPrototype.members.has(simpleName));\r\n }\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance accessors are remembered until resolved\r\n } else {\r\n let instanceName = classPrototype.internalName + INSTANCE_DELIMITER + baseName;\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(baseName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instancePrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n instanceName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = instancePrototype;\r\n } else {\r\n (propertyElement).setterPrototype = instancePrototype;\r\n }\r\n classPrototype.instanceMembers.set(baseName, propertyElement);\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n instancePrototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n }\r\n\r\n private initializeEnum(\r\n declaration: EnumDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var element = new Enum(this, simpleName, internalName, declaration);\r\n element.parent = namespace;\r\n this.elementsLookup.set(internalName, element);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, element);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && element.is(CommonFlags.EXPORT)) {\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (element.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, element);\r\n this.currentFilespace.members.set(simpleName, element);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n var values = declaration.values;\r\n for (let i = 0, k = values.length; i < k; ++i) {\r\n this.initializeEnumValue(values[i], element);\r\n }\r\n\r\n this.checkGlobal(element, declaration);\r\n }\r\n\r\n private initializeEnumValue(\r\n declaration: EnumValueDeclaration,\r\n enm: Enum\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n if (enm.members) {\r\n if (enm.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n enm.members = new Map();\r\n }\r\n var value = new EnumValue(enm, this, name, internalName, declaration);\r\n enm.members.set(name, value);\r\n if (enm.is(CommonFlags.MODULE_EXPORT)) {\r\n value.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n private initializeExports(\r\n statement: ExportStatement,\r\n queuedExports: Map\r\n ): void {\r\n var members = statement.members;\r\n if (members) { // named\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n this.initializeExport(members[i], statement.internalPath, queuedExports);\r\n }\r\n } else { // TODO: filespace\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n }\r\n }\r\n\r\n private setExportAndCheckLibrary(\r\n internalName: string,\r\n element: Element,\r\n externalIdentifier: IdentifierExpression\r\n ): void {\r\n // add to file-level exports\r\n this.fileLevelExports.set(internalName, element);\r\n\r\n // add to filespace\r\n var internalPath = externalIdentifier.range.source.internalPath;\r\n var prefix = FILESPACE_PREFIX + internalPath;\r\n var filespace = this.elementsLookup.get(prefix);\r\n if (!filespace) filespace = assert(this.elementsLookup.get(prefix + PATH_DELIMITER + \"index\"));\r\n assert(filespace.kind == ElementKind.FILESPACE);\r\n var simpleName = externalIdentifier.text;\r\n (filespace).members.set(simpleName, element);\r\n\r\n // add global alias if a top-level export of a library file\r\n var source = externalIdentifier.range.source;\r\n if (source.isLibrary) {\r\n if (this.elementsLookup.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n externalIdentifier.range, simpleName\r\n );\r\n } else {\r\n element.internalName = simpleName;\r\n this.elementsLookup.set(simpleName, element);\r\n }\r\n\r\n // add module level export if a top-level export of an entry file\r\n } else if (source.isEntry) {\r\n this.moduleLevelExports.set(externalIdentifier.text, {\r\n element,\r\n identifier: externalIdentifier\r\n });\r\n }\r\n }\r\n\r\n private initializeExport(\r\n member: ExportMember,\r\n internalPath: string | null,\r\n queuedExports: Map\r\n ): void {\r\n var externalName = member.range.source.internalPath + PATH_DELIMITER + member.externalName.text;\r\n if (this.fileLevelExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n var referencedName: string;\r\n var referencedElement: Element | null;\r\n var queuedExport: QueuedExport | null;\r\n\r\n // export local element\r\n if (internalPath == null) {\r\n referencedName = member.range.source.internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the element exists\r\n if (this.elementsLookup.has(referencedName)) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n this.elementsLookup.get(referencedName),\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = false;\r\n queuedExport.externalName = referencedName; // -> here: local name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n\r\n // export external element\r\n } else {\r\n referencedName = internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the export exists\r\n referencedElement = this.elementsLookup.get(referencedName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // walk already known queued exports\r\n let seen = new Set();\r\n while (queuedExport = queuedExports.get(referencedName)) {\r\n if (queuedExport.isReExport) {\r\n referencedElement = this.fileLevelExports.get(queuedExport.externalName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n referencedName = queuedExport.externalName;\r\n if (seen.has(queuedExport)) break;\r\n seen.add(queuedExport);\r\n } else {\r\n referencedElement = this.elementsLookup.get(queuedExport.externalName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = true;\r\n queuedExport.externalName = referencedName; // -> here: external name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n }\r\n }\r\n\r\n private initializeFunction(\r\n declaration: FunctionDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var decorators = declaration.decorators;\r\n var prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n null,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE |\r\n DecoratorFlags.EXTERNAL\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.parent = namespace;\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n private initializeImports(\r\n statement: ImportStatement,\r\n queuedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var declarations = statement.declarations;\r\n if (declarations) {\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n this.initializeImport(\r\n declarations[i],\r\n statement.internalPath,\r\n queuedExports, queuedImports\r\n );\r\n }\r\n } else if (statement.namespaceName) { // import * as simpleName from \"file\"\r\n let simpleName = statement.namespaceName.text;\r\n let internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n simpleName\r\n );\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n statement.namespaceName.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n\r\n // resolve right away if the exact filespace exists\r\n let filespace = this.elementsLookup.get(statement.internalPath);\r\n if (filespace) {\r\n this.elementsLookup.set(internalName, filespace);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n let queuedImport = new QueuedImport();\r\n queuedImport.localName = internalName;\r\n let externalName = FILESPACE_PREFIX + statement.internalPath;\r\n queuedImport.externalName = externalName;\r\n queuedImport.externalNameAlt = externalName + PATH_DELIMITER + \"index\";\r\n queuedImport.declaration = null; // filespace\r\n queuedImports.push(queuedImport);\r\n }\r\n }\r\n\r\n private initializeImport(\r\n declaration: ImportDeclaration,\r\n internalPath: string,\r\n queuedNamedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var localName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(localName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, localName\r\n );\r\n return;\r\n }\r\n\r\n var externalName = internalPath + PATH_DELIMITER + declaration.externalName.text;\r\n\r\n // resolve right away if the exact export exists\r\n var element: Element | null;\r\n if (element = this.fileLevelExports.get(externalName)) {\r\n this.elementsLookup.set(localName, element);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n const indexPart = PATH_DELIMITER + \"index\";\r\n var queuedImport = new QueuedImport();\r\n queuedImport.localName = localName;\r\n if (internalPath.endsWith(indexPart)) {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath.substring(0, internalPath.length - indexPart.length + 1) +\r\n declaration.externalName.text\r\n );\r\n } else {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath +\r\n indexPart +\r\n PATH_DELIMITER +\r\n declaration.externalName.text\r\n );\r\n }\r\n queuedImport.declaration = declaration; // named\r\n queuedImports.push(queuedImport);\r\n }\r\n\r\n private initializeInterface(declaration: InterfaceDeclaration, namespace: Element | null = null): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new InterfacePrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators, DecoratorFlags.GLOBAL)\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(prototype.internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(prototype.internalName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"interface member expected\");\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n private initializeNamespace(\r\n declaration: NamespaceDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n parentNamespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n var simpleName = declaration.name.text;\r\n var namespace = this.elementsLookup.get(internalName);\r\n if (!namespace) {\r\n namespace = new Namespace(this, simpleName, internalName, declaration);\r\n namespace.parent = parentNamespace;\r\n this.elementsLookup.set(internalName, namespace);\r\n this.checkGlobal(namespace, declaration);\r\n }\r\n\r\n if (parentNamespace) {\r\n if (parentNamespace.members) {\r\n if (parentNamespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n parentNamespace.members = new Map();\r\n }\r\n parentNamespace.members.set(simpleName, namespace);\r\n if (parentNamespace.is(CommonFlags.MODULE_EXPORT) && namespace.is(CommonFlags.EXPORT)) {\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (namespace.is(CommonFlags.EXPORT)) { // no parent namespace\r\n let existingExport = this.fileLevelExports.get(internalName);\r\n if (existingExport) {\r\n if (!existingExport.is(CommonFlags.EXPORT)) {\r\n this.error(\r\n DiagnosticCode.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local,\r\n declaration.name.range, namespace.internalName\r\n ); // recoverable\r\n }\r\n namespace = existingExport; // join\r\n } else {\r\n this.fileLevelExports.set(internalName, namespace);\r\n }\r\n this.currentFilespace.members.set(simpleName, namespace);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n if (existingExport.element !== namespace) { // not merged\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n this.moduleLevelExports.set(simpleName, {\r\n element: namespace,\r\n identifier: declaration.name\r\n });\r\n }\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n var members = declaration.members;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n switch (members[i].kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(members[i], queuedExtends, queuedImplements, namespace);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(members[i], queuedExtends, queuedImplements, namespace);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // this.initializeTypeAlias(members[i], namespace);\r\n // TODO: what about namespaced types?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n members[i].range\r\n );\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(members[i], namespace);\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"namespace member expected\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeTypeAlias(declaration: TypeDeclaration, namespace: Element | null = null): void {\r\n // type aliases are program globals\r\n // TODO: what about namespaced types?\r\n var name = declaration.name.text;\r\n if (this.typesLookup.has(name) || this.typeAliases.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return;\r\n }\r\n var alias = new TypeAlias();\r\n alias.typeParameters = declaration.typeParameters;\r\n alias.type = declaration.type;\r\n this.typeAliases.set(name, alias);\r\n }\r\n\r\n private initializeVariables(statement: VariableStatement, namespace: Element | null = null): void {\r\n var declarations = statement.declarations;\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n let declaration = declarations[i];\r\n let decorators = declaration.decorators;\r\n let internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n let simpleName = declaration.name.text;\r\n let global = new Global(\r\n this,\r\n simpleName,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE |\r\n DecoratorFlags.EXTERNAL\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n global.parent = namespace;\r\n this.elementsLookup.set(internalName, global);\r\n\r\n if (global.hasDecorator(DecoratorFlags.INLINE) && !global.is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n assert(findDecorator(DecoratorKind.INLINE, decorators)).range, \"inline\"\r\n );\r\n }\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, global);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && global.is(CommonFlags.EXPORT)) {\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (global.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n } else {\r\n this.fileLevelExports.set(internalName, global);\r\n }\r\n this.currentFilespace.members.set(simpleName, global);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n continue;\r\n }\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: global,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n this.checkGlobal(global, declaration);\r\n }\r\n }\r\n}\r\n\r\n/** Indicates the specific kind of an {@link Element}. */\r\nexport enum ElementKind {\r\n /** A {@link Global}. */\r\n GLOBAL,\r\n /** A {@link Local}. */\r\n LOCAL,\r\n /** An {@link Enum}. */\r\n ENUM,\r\n /** An {@link EnumValue}. */\r\n ENUMVALUE,\r\n /** A {@link FunctionPrototype}. */\r\n FUNCTION_PROTOTYPE,\r\n /** A {@link Function}. */\r\n FUNCTION,\r\n /** A {@link FunctionTarget}. */\r\n FUNCTION_TARGET,\r\n /** A {@link ClassPrototype}. */\r\n CLASS_PROTOTYPE,\r\n /** A {@link Class}. */\r\n CLASS,\r\n /** An {@link InterfacePrototype}. */\r\n INTERFACE_PROTOTYPE,\r\n /** An {@link Interface}. */\r\n INTERFACE,\r\n /** A {@link FieldPrototype}. */\r\n FIELD_PROTOTYPE,\r\n /** A {@link Field}. */\r\n FIELD,\r\n /** A {@link Property}. */\r\n PROPERTY,\r\n /** A {@link Namespace}. */\r\n NAMESPACE,\r\n /** A {@link Filespace}. */\r\n FILESPACE,\r\n}\r\n\r\nexport enum DecoratorFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n /** Is a program global. */\r\n GLOBAL = 1 << 0,\r\n /** Is a binary operator overload. */\r\n OPERATOR_BINARY = 1 << 1,\r\n /** Is a unary prefix operator overload. */\r\n OPERATOR_PREFIX = 1 << 2,\r\n /** Is a unary postfix operator overload. */\r\n OPERATOR_POSTFIX = 1 << 3,\r\n /** Is an unmanaged class. */\r\n UNMANAGED = 1 << 4,\r\n /** Is a sealed class. */\r\n SEALED = 1 << 5,\r\n /** Is always inlined. */\r\n INLINE = 1 << 6,\r\n /** Is using a different external name. */\r\n EXTERNAL = 1 << 7,\r\n /** Is a builtin. */\r\n BUILTIN = 1 << 8\r\n}\r\n\r\nexport function decoratorKindToFlag(kind: DecoratorKind): DecoratorFlags {\r\n switch (kind) {\r\n case DecoratorKind.GLOBAL: return DecoratorFlags.GLOBAL;\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY: return DecoratorFlags.OPERATOR_BINARY;\r\n case DecoratorKind.OPERATOR_PREFIX: return DecoratorFlags.OPERATOR_PREFIX;\r\n case DecoratorKind.OPERATOR_POSTFIX: return DecoratorFlags.OPERATOR_POSTFIX;\r\n case DecoratorKind.UNMANAGED: return DecoratorFlags.UNMANAGED;\r\n case DecoratorKind.SEALED: return DecoratorFlags.SEALED;\r\n case DecoratorKind.INLINE: return DecoratorFlags.INLINE;\r\n case DecoratorKind.EXTERNAL: return DecoratorFlags.EXTERNAL;\r\n case DecoratorKind.BUILTIN: return DecoratorFlags.BUILTIN;\r\n default: return DecoratorFlags.NONE;\r\n }\r\n}\r\n\r\n/** Base class of all program elements. */\r\nexport abstract class Element {\r\n\r\n /** Specific element kind. */\r\n kind: ElementKind;\r\n /** Containing {@link Program}. */\r\n program: Program;\r\n /** Simple name. */\r\n simpleName: string;\r\n /** Internal name referring to this element. */\r\n internalName: string;\r\n /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n /** Decorator flags indicating annotated traits. */\r\n decoratorFlags: DecoratorFlags = DecoratorFlags.NONE;\r\n /** Namespaced member elements. */\r\n members: Map | null = null;\r\n /** Parent element, if applicable. */\r\n parent: Element | null = null;\r\n\r\n /** Constructs a new element, linking it to its containing {@link Program}. */\r\n protected constructor(program: Program, simpleName: string, internalName: string) {\r\n this.program = program;\r\n this.simpleName = simpleName;\r\n this.internalName = internalName;\r\n }\r\n\r\n /** Tests if this element has a specific flag or flags. */\r\n is(flag: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this element has any of the specified flags. */\r\n isAny(flags: CommonFlags): bool { return (this.flags & flags) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n /** Tests if this element has a specific decorator flag or flags. */\r\n hasDecorator(flag: DecoratorFlags): bool { return (this.decoratorFlags & flag) == flag; }\r\n}\r\n\r\n/** A filespace representing the implicit top-level namespace of a source. */\r\nexport class Filespace extends Element {\r\n\r\n kind = ElementKind.FILESPACE;\r\n\r\n /** File members (externally visible only). */\r\n members: Map; // more specific\r\n\r\n /** Constructs a new filespace. */\r\n constructor(\r\n program: Program,\r\n source: Source\r\n ) {\r\n super(program, source.internalPath, FILESPACE_PREFIX + source.internalPath);\r\n this.members = new Map();\r\n }\r\n}\r\n\r\n/** A namespace that differs from a filespace in being user-declared with a name. */\r\nexport class Namespace extends Element {\r\n\r\n // All elements have namespace semantics. This is an explicitly declared one.\r\n kind = ElementKind.NAMESPACE;\r\n\r\n /** Declaration reference. */\r\n declaration: NamespaceDeclaration; // more specific\r\n\r\n /** Constructs a new namespace. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: NamespaceDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** An enum. */\r\nexport class Enum extends Element {\r\n\r\n kind = ElementKind.ENUM;\r\n\r\n /** Declaration reference. */\r\n declaration: EnumDeclaration;\r\n\r\n /** Constructs a new enum. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: EnumDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** An enum value. */\r\nexport class EnumValue extends Element {\r\n\r\n kind = ElementKind.ENUMVALUE;\r\n\r\n /** Declaration reference. */\r\n declaration: EnumValueDeclaration;\r\n /** Constant value, if applicable. */\r\n constantValue: i32 = 0;\r\n\r\n constructor(\r\n enm: Enum,\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: EnumValueDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = enm;\r\n this.declaration = declaration;\r\n }\r\n}\r\n\r\nexport const enum ConstantValueKind {\r\n NONE,\r\n INTEGER,\r\n FLOAT\r\n}\r\n\r\nexport class VariableLikeElement extends Element {\r\n\r\n // kind varies\r\n\r\n /** Declaration reference. */\r\n declaration: VariableLikeDeclarationStatement | null;\r\n /** Variable type. Is {@link Type.void} for type-inferred {@link Global}s before compilation. */\r\n type: Type;\r\n /** Constant value kind. */\r\n constantValueKind: ConstantValueKind = ConstantValueKind.NONE;\r\n /** Constant integer value, if applicable. */\r\n constantIntegerValue: I64;\r\n /** Constant float value, if applicable. */\r\n constantFloatValue: f64;\r\n\r\n protected constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.type = type;\r\n this.declaration = declaration;\r\n }\r\n\r\n withConstantIntegerValue(value: I64): this {\r\n this.constantValueKind = ConstantValueKind.INTEGER;\r\n this.constantIntegerValue = value;\r\n this.set(CommonFlags.CONST | CommonFlags.INLINED);\r\n return this;\r\n }\r\n\r\n withConstantFloatValue(value: f64): this {\r\n this.constantValueKind = ConstantValueKind.FLOAT;\r\n this.constantFloatValue = value;\r\n this.set(CommonFlags.CONST | CommonFlags.INLINED);\r\n return this;\r\n }\r\n}\r\n\r\n/** A global variable. */\r\nexport class Global extends VariableLikeElement {\r\n\r\n kind = ElementKind.GLOBAL;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, type, declaration);\r\n this.flags = declaration ? declaration.flags : CommonFlags.NONE;\r\n this.decoratorFlags = decoratorFlags;\r\n this.type = type; // resolved later if `void`\r\n }\r\n}\r\n\r\n/** A function parameter. */\r\nexport class Parameter {\r\n\r\n // not an Element on its own\r\n\r\n /** Parameter name. */\r\n name: string;\r\n /** Parameter type. */\r\n type: Type;\r\n /** Parameter initializer. */\r\n initializer: Expression | null;\r\n\r\n /** Constructs a new function parameter. */\r\n constructor(name: string, type: Type, initializer: Expression | null = null) {\r\n this.name = name;\r\n this.type = type;\r\n this.initializer = initializer;\r\n }\r\n}\r\n\r\n/** A function local. */\r\nexport class Local extends VariableLikeElement {\r\n\r\n kind = ElementKind.LOCAL;\r\n\r\n /** Local index. */\r\n index: i32;\r\n /** Respective scoped global, if any. */\r\n scopedGlobal: Global | null = null;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n index: i32,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null = null\r\n ) {\r\n super(program, simpleName, simpleName, type, declaration);\r\n this.index = index;\r\n }\r\n}\r\n\r\n/** A yet unresolved function prototype. */\r\nexport class FunctionPrototype extends Element {\r\n\r\n kind = ElementKind.FUNCTION_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FunctionDeclaration;\r\n /** If an instance method, the class prototype reference. */\r\n classPrototype: ClassPrototype | null;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Class type arguments, if a partially resolved method of a generic class. Not set otherwise. */\r\n classTypeArguments: Type[] | null = null;\r\n /** Operator kind, if an overload. */\r\n operatorKind: OperatorKind = OperatorKind.INVALID;\r\n\r\n /** Constructs a new function prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FunctionDeclaration,\r\n classPrototype: ClassPrototype | null = null,\r\n decoratorFlags: DecoratorFlags = DecoratorFlags.NONE\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.classPrototype = classPrototype;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n toString(): string { return this.simpleName; }\r\n}\r\n\r\n/** A resolved function. */\r\nexport class Function extends Element {\r\n\r\n kind = ElementKind.FUNCTION;\r\n\r\n /** Prototype reference. */\r\n prototype: FunctionPrototype;\r\n /** Function signature. */\r\n signature: Signature;\r\n /** Map of locals by name. */\r\n localsByName: Map = new Map();\r\n /** Array of locals by index. */\r\n localsByIndex: Local[] = [];\r\n /** List of additional non-parameter locals. */\r\n additionalLocals: Type[] = [];\r\n /** Current break context label. */\r\n breakContext: string | null = null;\r\n /** Contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Current control flow. */\r\n flow: Flow;\r\n /** Remembered debug locations. */\r\n debugLocations: Range[] = [];\r\n /** Function reference, if compiled. */\r\n ref: FunctionRef = 0;\r\n /** Function table index, if any. */\r\n functionTableIndex: i32 = -1;\r\n /** Trampoline function for calling with omitted arguments. */\r\n trampoline: Function | null = null;\r\n /** The outer scope, if a function expression. */\r\n outerScope: Flow | null = null;\r\n\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\r\n nextInlineId: i32 = 0;\r\n\r\n /** Constructs a new concrete function. */\r\n constructor(\r\n prototype: FunctionPrototype,\r\n internalName: string,\r\n signature: Signature,\r\n parent: Element | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.signature = signature;\r\n this.parent = parent;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.contextualTypeArguments = contextualTypeArguments;\r\n if (!(prototype.is(CommonFlags.AMBIENT))) {\r\n let localIndex = 0;\r\n if (parent && parent.kind == ElementKind.CLASS) {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let local = new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n );\r\n this.localsByName.set(\"this\", local);\r\n this.localsByIndex[local.index] = local;\r\n let inheritedTypeArguments = (parent).contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments.has(inheritedName)) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n }\r\n } else {\r\n assert(!this.is(CommonFlags.INSTANCE)); // internal error\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n let parameterType = parameterTypes[i];\r\n let parameterName = signature.getParameterName(i);\r\n let local = new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n // FIXME: declaration?\r\n );\r\n this.localsByName.set(parameterName, local);\r\n this.localsByIndex[local.index] = local;\r\n }\r\n }\r\n this.flow = Flow.create(this);\r\n }\r\n\r\n /** Adds a local of the specified type, with an optional name. */\r\n addLocal(type: Type, name: string | null = null, declaration: VariableDeclaration | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = this.signature.parameterTypes.length + this.additionalLocals.length;\r\n if (this.is(CommonFlags.INSTANCE)) ++localIndex;\r\n var local = new Local(\r\n this.prototype.program,\r\n name\r\n ? name\r\n : \"var$\" + localIndex.toString(10),\r\n localIndex,\r\n type,\r\n declaration\r\n );\r\n if (name) {\r\n if (this.localsByName.has(name)) throw new Error(\"duplicate local name\");\r\n this.localsByName.set(name, local);\r\n }\r\n this.localsByIndex[local.index] = local;\r\n this.additionalLocals.push(type);\r\n return local;\r\n }\r\n\r\n private tempI32s: Local[] | null = null;\r\n private tempI64s: Local[] | null = null;\r\n private tempF32s: Local[] | null = null;\r\n private tempF64s: Local[] | null = null;\r\n\r\n /** Gets a free temporary local of the specified type. */\r\n getTempLocal(type: Type, wrapped: bool = false): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s;\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps && temps.length) {\r\n local = temps.pop();\r\n local.type = type;\r\n local.flags = CommonFlags.NONE;\r\n } else {\r\n local = this.addLocal(type);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n if (local.is(CommonFlags.INLINED)) return;\r\n assert(local.index >= 0);\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n assert(local.index >= 0);\r\n temps.push(local);\r\n }\r\n\r\n /** Gets and immediately frees a temporary local of the specified type. */\r\n getAndFreeTempLocal(type: Type, wrapped: bool): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps.length) {\r\n local = temps[temps.length - 1];\r\n local.type = type;\r\n } else {\r\n local = this.addLocal(type);\r\n temps.push(local);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Enters a(nother) break context. */\r\n enterBreakContext(): string {\r\n var id = this.nextBreakId++;\r\n if (!this.breakStack) this.breakStack = [ id ];\r\n else this.breakStack.push(id);\r\n return this.breakContext = id.toString(10);\r\n }\r\n\r\n /** Leaves the current break context. */\r\n leaveBreakContext(): void {\r\n assert(this.breakStack != null);\r\n var length = (this.breakStack).length;\r\n assert(length > 0);\r\n (this.breakStack).pop();\r\n if (length > 1) {\r\n this.breakContext = (this.breakStack)[length - 2].toString(10);\r\n } else {\r\n this.breakContext = null;\r\n this.breakStack = null;\r\n }\r\n }\r\n\r\n /** Finalizes the function once compiled, releasing no longer needed resources. */\r\n finalize(module: Module, ref: FunctionRef): void {\r\n this.ref = ref;\r\n assert(!this.breakStack || !this.breakStack.length); // internal error\r\n this.breakStack = null;\r\n this.breakContext = null;\r\n this.tempI32s = this.tempI64s = this.tempF32s = this.tempF64s = null;\r\n if (this.program.options.sourceMap) {\r\n let debugLocations = this.debugLocations;\r\n for (let i = 0, k = debugLocations.length; i < k; ++i) {\r\n let debugLocation = debugLocations[i];\r\n module.setDebugLocation(\r\n ref,\r\n debugLocation.debugInfoRef,\r\n debugLocation.source.debugInfoIndex,\r\n debugLocation.line,\r\n debugLocation.column\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n}\r\n\r\n/** A resolved function target, that is a function called indirectly by an index and signature. */\r\nexport class FunctionTarget extends Element {\r\n\r\n kind = ElementKind.FUNCTION_TARGET;\r\n\r\n /** Underlying signature. */\r\n signature: Signature;\r\n /** Function type. */\r\n type: Type;\r\n\r\n /** Constructs a new function target. */\r\n constructor(program: Program, signature: Signature) {\r\n super(program, \"\", \"\");\r\n var simpleName = signature.toSignatureString();\r\n this.simpleName = simpleName;\r\n this.internalName = simpleName;\r\n this.signature = signature;\r\n this.type = Type.u32.asFunction(signature);\r\n }\r\n}\r\n\r\n/** A yet unresolved instance field prototype. */\r\nexport class FieldPrototype extends Element {\r\n\r\n kind = ElementKind.FIELD_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FieldDeclaration;\r\n /** Parent class prototype. */\r\n classPrototype: ClassPrototype;\r\n\r\n /** Constructs a new field prototype. */\r\n constructor(\r\n classPrototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FieldDeclaration\r\n ) {\r\n super(classPrototype.program, simpleName, internalName);\r\n this.classPrototype = classPrototype;\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** A resolved instance field. */\r\nexport class Field extends VariableLikeElement {\r\n\r\n kind = ElementKind.FIELD;\r\n\r\n /** Field prototype reference. */\r\n prototype: FieldPrototype;\r\n /** Field memory offset, if an instance field. */\r\n memoryOffset: i32 = -1;\r\n\r\n /** Constructs a new field. */\r\n constructor(\r\n prototype: FieldPrototype,\r\n internalName: string,\r\n type: Type,\r\n declaration: FieldDeclaration,\r\n parent: Class\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName, type, declaration);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.type = type;\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A property comprised of a getter and a setter function. */\r\nexport class Property extends Element {\r\n\r\n kind = ElementKind.PROPERTY;\r\n\r\n /** Parent class prototype. */\r\n parent: ClassPrototype;\r\n /** Getter prototype. */\r\n getterPrototype: FunctionPrototype | null = null;\r\n /** Setter prototype. */\r\n setterPrototype: FunctionPrototype | null = null;\r\n\r\n /** Constructs a new property prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n parent: ClassPrototype\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A yet unresolved class prototype. */\r\nexport class ClassPrototype extends Element {\r\n\r\n kind = ElementKind.CLASS_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: ClassDeclaration;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Instance member prototypes. */\r\n instanceMembers: Map | null = null;\r\n /** Base class prototype, if applicable. */\r\n basePrototype: ClassPrototype | null = null; // set in Program#initialize\r\n /** Constructor prototype. */\r\n constructorPrototype: FunctionPrototype | null = null;\r\n /** Operator overload prototypes. */\r\n overloadPrototypes: Map = new Map();\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A resolved class. */\r\nexport class Class extends Element {\r\n\r\n kind = ElementKind.CLASS;\r\n\r\n /** Prototype reference. */\r\n prototype: ClassPrototype;\r\n /** Resolved type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Resolved class type. */\r\n type: Type;\r\n /** Base class, if applicable. */\r\n base: Class | null;\r\n /** Contextual type arguments for fields and methods. */\r\n contextualTypeArguments: Map | null = null;\r\n /** Current member memory offset. */\r\n currentMemoryOffset: u32 = 0;\r\n /** Constructor instance. */\r\n constructorInstance: Function | null = null;\r\n /** Operator overloads. */\r\n overloads: Map | null = null;\r\n\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","/**\r\n * Resolve infrastructure to obtain types and elements.\r\n * @module resolver\r\n *//***/\r\n\r\nimport {\r\n DiagnosticEmitter,\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Program,\r\n ElementKind,\r\n OperatorKind,\r\n FlowFlags,\r\n\r\n Element,\r\n Class,\r\n ClassPrototype,\r\n Function,\r\n FunctionTarget,\r\n FunctionPrototype,\r\n VariableLikeElement,\r\n Property,\r\n DecoratorFlags,\r\n FieldPrototype,\r\n Field\r\n} from \"./program\";\r\n\r\nimport {\r\n SignatureNode,\r\n ParameterKind,\r\n CommonTypeNode,\r\n NodeKind,\r\n TypeNode,\r\n TypeParameterNode,\r\n Node,\r\n Range,\r\n IdentifierExpression,\r\n CallExpression,\r\n ElementAccessExpression,\r\n PropertyAccessExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n ParenthesizedExpression,\r\n AssertionExpression,\r\n Expression\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n Signature,\r\n typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n PATH_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n CommonFlags\r\n} from \"./common\";\r\n\r\n/** Indicates whether errors are reported or not. */\r\nexport enum ReportMode {\r\n /** Report errors. */\r\n REPORT,\r\n /** Swallow errors. */\r\n SWALLOW\r\n}\r\n\r\n/** Provides tools to resolve types and expressions. */\r\nexport class Resolver extends DiagnosticEmitter {\r\n\r\n /** The program this resolver belongs to. */\r\n program: Program;\r\n\r\n /** Target expression of the previously resolved property or element access. */\r\n currentThisExpression: Expression | null = null;\r\n /** Element expression of the previously resolved element access. */\r\n currentElementExpression : Expression | null = null;\r\n\r\n /** Constructs the resolver for the specified program. */\r\n constructor(program: Program) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n }\r\n\r\n /** Resolves a {@link CommonTypeNode} to a concrete {@link Type}. */\r\n resolveType(\r\n node: CommonTypeNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode = ReportMode.REPORT\r\n ): Type | null {\r\n\r\n // handle signatures specifically\r\n if (node.kind == NodeKind.SIGNATURE) {\r\n let signature = this.resolveSignature(node, contextualTypeArguments, reportMode);\r\n if (!signature) return null;\r\n return node.isNullable ? signature.type.asNullable() : signature.type;\r\n }\r\n\r\n // now dealing with TypeNode\r\n assert(node.kind == NodeKind.TYPE);\r\n var typeNode = node;\r\n var simpleName = typeNode.name.text;\r\n var globalName = simpleName;\r\n var localName = typeNode.range.source.internalPath + PATH_DELIMITER + simpleName; // TODO cache\r\n\r\n // check file-global / program-global enum or class\r\n {\r\n let elementsLookup = this.program.elementsLookup;\r\n let element: Element | null;\r\n if (\r\n (element = elementsLookup.get(localName)) || // file-global\r\n (element = elementsLookup.get(globalName)) // program-global\r\n ) {\r\n switch (element.kind) {\r\n case ElementKind.ENUM: {\r\n if (typeNode.typeArguments !== null && typeNode.typeArguments.length) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n node.range, element.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n return Type.i32;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n let instance = this.resolveClassInclTypeArguments(\r\n element,\r\n typeNode.typeArguments,\r\n contextualTypeArguments,\r\n node\r\n ); // reports\r\n if (!instance) return null;\r\n return node.isNullable ? instance.type.asNullable() : instance.type;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // check (global) type alias\r\n {\r\n let alias = this.program.typeAliases.get(simpleName);\r\n if (alias) return this.resolveType(alias.type, contextualTypeArguments, reportMode);\r\n }\r\n\r\n // resolve parameters\r\n {\r\n let typeArgumentNodes = typeNode.typeArguments;\r\n if (typeArgumentNodes) {\r\n let numTypeArguments = typeArgumentNodes.length;\r\n let paramTypes = new Array(numTypeArguments);\r\n for (let i = 0; i < numTypeArguments; ++i) {\r\n let paramType = this.resolveType( // reports\r\n typeArgumentNodes[i],\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!paramType) return null;\r\n paramTypes[i] = paramType;\r\n }\r\n if (numTypeArguments) { // can't be a placeholder if it has parameters\r\n let instanceKey = typesToString(paramTypes);\r\n if (instanceKey.length) {\r\n localName += \"<\" + instanceKey + \">\";\r\n globalName += \"<\" + instanceKey + \">\";\r\n }\r\n } else if (contextualTypeArguments) {\r\n let placeholderType = contextualTypeArguments.get(globalName);\r\n if (placeholderType) return placeholderType;\r\n }\r\n }\r\n }\r\n\r\n // check file-global / program-global type\r\n {\r\n let typesLookup = this.program.typesLookup;\r\n let type: Type | null;\r\n if (\r\n (type = typesLookup.get(localName)) ||\r\n (type = typesLookup.get(globalName))\r\n ) {\r\n return type;\r\n }\r\n }\r\n\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n typeNode.name.range, globalName\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves a {@link SignatureNode} to a concrete {@link Signature}. */\r\n resolveSignature(\r\n node: SignatureNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Signature | null {\r\n var explicitThisType = node.explicitThisType;\r\n var thisType: Type | null = null;\r\n if (explicitThisType) {\r\n thisType = this.resolveType(explicitThisType, contextualTypeArguments, reportMode);\r\n if (!thisType) return null;\r\n }\r\n var parameterTypeNodes = node.parameters;\r\n var numParameters = parameterTypeNodes.length;\r\n var parameterTypes = new Array(numParameters);\r\n var parameterNames = new Array(numParameters);\r\n var requiredParameters = 0;\r\n var hasRest = false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let parameterTypeNode = parameterTypeNodes[i];\r\n switch (parameterTypeNode.parameterKind) {\r\n case ParameterKind.DEFAULT: {\r\n requiredParameters = i + 1;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n assert(i == numParameters);\r\n hasRest = true;\r\n break;\r\n }\r\n }\r\n let parameterType = this.resolveType(\r\n assert(parameterTypeNode.type),\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterTypeNode.name.text;\r\n }\r\n var returnTypeNode = node.returnType;\r\n var returnType: Type | null;\r\n if (returnTypeNode) {\r\n returnType = this.resolveType(returnTypeNode, contextualTypeArguments, reportMode);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Type.void;\r\n }\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n signature.hasRest = hasRest;\r\n return signature;\r\n }\r\n\r\n /** Resolves an array of type arguments to concrete types. */\r\n resolveTypeArguments(\r\n typeParameters: TypeParameterNode[],\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Type[] | null {\r\n var parameterCount = typeParameters.length;\r\n var argumentCount = typeArgumentNodes ? typeArgumentNodes.length : 0;\r\n if (parameterCount != argumentCount) {\r\n if (argumentCount) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n Range.join(\r\n (typeArgumentNodes)[0].range,\r\n (typeArgumentNodes)[argumentCount - 1].range\r\n ),\r\n parameterCount.toString(10), argumentCount.toString(10)\r\n );\r\n } else if (alternativeReportNode) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n alternativeReportNode.range.atEnd, parameterCount.toString(10), \"0\"\r\n );\r\n }\r\n return null;\r\n }\r\n var typeArguments = new Array(parameterCount);\r\n for (let i = 0; i < parameterCount; ++i) {\r\n let type = this.resolveType( // reports\r\n (typeArgumentNodes)[i],\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!type) return null;\r\n // TODO: check extendsType\r\n typeArguments[i] = type;\r\n }\r\n return typeArguments;\r\n }\r\n\r\n /** Resolves an identifier to the element it refers to. */\r\n resolveIdentifier(\r\n identifier: IdentifierExpression,\r\n context: Element | null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n var name = identifier.text;\r\n var element: Element | null;\r\n\r\n if (context) {\r\n\r\n switch (context.kind) {\r\n case ElementKind.FUNCTION: { // search locals, use prototype\r\n element = (context).flow.getScopedLocal(name);\r\n if (element) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element;\r\n }\r\n context = (context).prototype.parent;\r\n break;\r\n }\r\n case ElementKind.CLASS: { // use prototype\r\n context = (context).prototype.parent;\r\n break;\r\n }\r\n }\r\n\r\n // search context\r\n while (context) {\r\n let members = context.members;\r\n if (members) {\r\n if (element = members.get(name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element;\r\n }\r\n }\r\n context = context.parent;\r\n }\r\n }\r\n\r\n // search current file\r\n var elementsLookup = this.program.elementsLookup;\r\n if (element = elementsLookup.get(identifier.range.source.internalPath + PATH_DELIMITER + name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n // search global scope\r\n if (element = elementsLookup.get(name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n identifier.range, name\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves a property access to the element it refers to. */\r\n resolvePropertyAccess(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualFunction: Function,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = propertyAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction, reportMode); // reports\r\n if (!target) return null;\r\n\r\n // at this point we know exactly what the target is, so look up the element within\r\n var propertyName = propertyAccess.property.text;\r\n\r\n // Resolve variable-likes to the class type they reference first\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let 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.currentElementExpression;\r\n if (elementExpression) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementExpression.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (!(target = returnType.classReference)) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, returnType.toString()\r\n );\r\n return null;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // Look up the member within\r\n switch (target.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n case ElementKind.CLASS: {\r\n do {\r\n let members = target.members;\r\n let member: Element | null;\r\n if (members && (member = members.get(propertyName))) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = null;\r\n return member; // instance FIELD, static GLOBAL, FUNCTION_PROTOTYPE...\r\n }\r\n // traverse inherited static members on the base prototype if target is a class prototype\r\n if (target.kind == ElementKind.CLASS_PROTOTYPE) {\r\n if ((target).basePrototype) {\r\n target = (target).basePrototype;\r\n } else {\r\n break;\r\n }\r\n // traverse inherited instance members on the base class if target is a class instance\r\n } else if (target.kind == ElementKind.CLASS) {\r\n if ((target).base) {\r\n target = (target).base;\r\n } else {\r\n break;\r\n }\r\n } else {\r\n break;\r\n }\r\n } while (true);\r\n break;\r\n }\r\n default: { // enums or other namespace-like elements\r\n let members = target.members;\r\n if (members) {\r\n let member = members.get(propertyName);\r\n if (member) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = null;\r\n return member; // static ENUMVALUE, static GLOBAL, static FUNCTION_PROTOTYPE...\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveElementAccess(\r\n elementAccess: ElementAccessExpression,\r\n contextualFunction: Function,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n var targetExpression = elementAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction, reportMode);\r\n if (!target) return null;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (target = type.classReference) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS: { // element access on element access\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementAccess.range, (target).internalName\r\n );\r\n }\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (target = returnType.classReference) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n targetExpression.range\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n resolveExpression(\r\n expression: Expression,\r\n contextualFunction: Function,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n while (expression.kind == NodeKind.PARENTHESIZED) {\r\n expression = (expression).expression;\r\n }\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n let type = this.resolveType(\r\n (expression).toType,\r\n contextualFunction.flow.contextualTypeArguments,\r\n reportMode\r\n );\r\n if (type) {\r\n let classType = type.classReference;\r\n if (classType) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return classType;\r\n }\r\n }\r\n return null;\r\n }\r\n case NodeKind.BINARY: { // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n }\r\n case NodeKind.THIS: { // -> Class / ClassPrototype\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"this\");\r\n if (explicitLocal) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return parent;\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n }\r\n return null;\r\n }\r\n case NodeKind.SUPER: { // -> Class\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"super\");\r\n if (explicitLocal) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent && parent.kind == ElementKind.CLASS && (parent = (parent).base)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return parent;\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n }\r\n return null;\r\n }\r\n case NodeKind.IDENTIFIER: {\r\n return this.resolveIdentifier(expression, contextualFunction, reportMode);\r\n }\r\n case NodeKind.LITERAL: {\r\n switch ((expression).literalKind) {\r\n case LiteralKind.STRING: {\r\n this.currentThisExpression = expression;\r\n this.currentElementExpression = null;\r\n return this.program.stringInstance;\r\n }\r\n // case LiteralKind.ARRAY: // TODO\r\n }\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n return this.resolvePropertyAccess(\r\n expression,\r\n contextualFunction,\r\n reportMode\r\n );\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n return this.resolveElementAccess(\r\n expression,\r\n contextualFunction,\r\n reportMode\r\n );\r\n }\r\n case NodeKind.CALL: {\r\n let targetExpression = (expression).expression;\r\n let target = this.resolveExpression(targetExpression, contextualFunction, reportMode);\r\n if (!target) return null;\r\n if (target.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n let instance = this.resolveFunctionInclTypeArguments(\r\n target,\r\n (expression).typeArguments,\r\n contextualFunction.flow.contextualTypeArguments,\r\n expression,\r\n reportMode\r\n );\r\n if (!instance) return null;\r\n let returnType = instance.signature.returnType;\r\n let classType = returnType.classReference;\r\n if (classType) {\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return classType;\r\n } else {\r\n let signature = returnType.signatureReference;\r\n if (signature) {\r\n let functionTarget = signature.cachedFunctionTarget;\r\n if (!functionTarget) {\r\n functionTarget = new FunctionTarget(this.program, signature);\r\n signature.cachedFunctionTarget = functionTarget;\r\n }\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return functionTarget;\r\n }\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n targetExpression.range, target.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n break;\r\n }\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves a function prototype to an instance using the specified concrete type arguments. */\r\n resolveFunction(\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Function | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n var instance = prototype.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n var declaration = prototype.declaration;\r\n var isInstance = prototype.is(CommonFlags.INSTANCE);\r\n var classPrototype = prototype.classPrototype;\r\n\r\n // inherit contextual type arguments as provided. might be overridden.\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(\r\n inheritedName,\r\n inheritedType\r\n );\r\n }\r\n }\r\n\r\n // override with class type arguments if a partially resolved instance method\r\n var classTypeArguments = prototype.classTypeArguments;\r\n if (classTypeArguments) { // set only if partially resolved\r\n assert(prototype.is(CommonFlags.INSTANCE));\r\n let classDeclaration = assert(classPrototype).declaration;\r\n let classTypeParameters = classDeclaration.typeParameters;\r\n let numClassTypeParameters = classTypeParameters.length;\r\n assert(numClassTypeParameters == classTypeArguments.length);\r\n for (let i = 0; i < numClassTypeParameters; ++i) {\r\n contextualTypeArguments.set(\r\n classTypeParameters[i].name.text,\r\n classTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!classTypeArguments);\r\n }\r\n\r\n // override with function specific type arguments\r\n var signatureNode = declaration.signature;\r\n var functionTypeParameters = declaration.typeParameters;\r\n var numFunctionTypeArguments: i32;\r\n if (typeArguments && (numFunctionTypeArguments = typeArguments.length)) {\r\n assert(functionTypeParameters && numFunctionTypeArguments == functionTypeParameters.length);\r\n for (let i = 0; i < numFunctionTypeArguments; ++i) {\r\n contextualTypeArguments.set(\r\n (functionTypeParameters)[i].name.text,\r\n typeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!functionTypeParameters || functionTypeParameters.length == 0);\r\n }\r\n\r\n // resolve class if an instance method\r\n var classInstance: Class | null = null;\r\n var thisType: Type | null = null;\r\n if (isInstance) {\r\n classInstance = this.resolveClass(\r\n assert(classPrototype),\r\n classTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!classInstance) return null;\r\n thisType = classInstance.type;\r\n contextualTypeArguments.set(\"this\", thisType);\r\n }\r\n\r\n // resolve signature node\r\n var signatureParameters = signatureNode.parameters;\r\n var signatureParameterCount = signatureParameters.length;\r\n var parameterTypes = new Array(signatureParameterCount);\r\n var parameterNames = new Array(signatureParameterCount);\r\n var requiredParameters = 0;\r\n for (let i = 0; i < signatureParameterCount; ++i) {\r\n let parameterDeclaration = signatureParameters[i];\r\n if (parameterDeclaration.parameterKind == ParameterKind.DEFAULT) {\r\n requiredParameters = i + 1;\r\n }\r\n let typeNode = assert(parameterDeclaration.type);\r\n let parameterType = this.resolveType(typeNode, contextualTypeArguments, reportMode);\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterDeclaration.name.text;\r\n }\r\n\r\n var returnType: Type;\r\n if (prototype.is(CommonFlags.SET)) {\r\n returnType = Type.void; // not annotated\r\n } else if (prototype.is(CommonFlags.CONSTRUCTOR)) {\r\n returnType = assert(classInstance).type; // not annotated\r\n } else {\r\n let typeNode = assert(signatureNode.returnType);\r\n let type = this.resolveType(typeNode, contextualTypeArguments, reportMode);\r\n if (!type) return null;\r\n returnType = type;\r\n }\r\n\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n\r\n var internalName = prototype.internalName;\r\n if (instanceKey.length) internalName += \"<\" + instanceKey + \">\";\r\n instance = new Function(\r\n prototype,\r\n internalName,\r\n signature,\r\n classInstance\r\n ? classInstance\r\n : classPrototype,\r\n contextualTypeArguments\r\n );\r\n prototype.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n return instance;\r\n }\r\n\r\n /** Resolves a function prototype partially by applying the specified type arguments. */\r\n resolveFunctionPartially(\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): FunctionPrototype | null {\r\n assert(prototype.is(CommonFlags.INSTANCE));\r\n var classPrototype = assert(prototype.classPrototype);\r\n\r\n if (!(typeArguments && typeArguments.length)) return prototype; // no need to clone\r\n\r\n var simpleName = prototype.simpleName;\r\n var partialKey = typesToString(typeArguments);\r\n var partialPrototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n classPrototype.internalName + \"<\" + partialKey + \">\" + INSTANCE_DELIMITER + simpleName,\r\n prototype.declaration,\r\n classPrototype,\r\n prototype.decoratorFlags\r\n );\r\n partialPrototype.flags = prototype.flags;\r\n partialPrototype.operatorKind = prototype.operatorKind;\r\n partialPrototype.classTypeArguments = typeArguments;\r\n return partialPrototype;\r\n }\r\n\r\n /** Resolves a function prototype to an instance by first resolving the specified type arguments. */\r\n resolveFunctionInclTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Function | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (prototype.is(CommonFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.resolveTypeArguments( // reports\r\n assert(prototype.declaration.typeParameters),\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode,\r\n reportMode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n }\r\n return this.resolveFunction(\r\n prototype,\r\n resolvedTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n\r\n /** Resolves a class prototype using the specified concrete type arguments. */\r\n resolveClass(\r\n prototype: ClassPrototype,\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Class | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n\r\n // Check if this exact instance has already been resolved\r\n var instance = prototype.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n // Copy contextual type arguments so we don't pollute the original map\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n\r\n // Insert contextual type arguments for this operation. Internally, this method is always\r\n // called with matching type parameter / argument counts.\r\n var declaration = prototype.declaration;\r\n if (typeArguments) {\r\n let typeParameters = declaration.typeParameters;\r\n let expectedTypeArguments = typeParameters.length;\r\n let actualTypeArguments = typeArguments.length;\r\n assert(actualTypeArguments == expectedTypeArguments);\r\n for (let i = 0; i < actualTypeArguments; ++i) {\r\n contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n } else {\r\n assert(declaration.typeParameters.length == 0);\r\n }\r\n\r\n // Resolve base class if applicable\r\n var baseClass: Class | null = null;\r\n if (declaration.extendsType) {\r\n let baseClassType = this.resolveType(\r\n declaration.extendsType,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.classReference)) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.program.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n declaration.extendsType.range\r\n );\r\n }\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.SEALED)) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.program.error(\r\n DiagnosticCode.Class_0_is_sealed_and_cannot_be_extended,\r\n declaration.extendsType.range, baseClass.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.UNMANAGED) != prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.program.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa,\r\n Range.join(declaration.name.range, declaration.extendsType.range)\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n\r\n // Construct the instance and remember that it has been resolved already\r\n var simpleName = prototype.simpleName;\r\n var internalName = prototype.internalName;\r\n if (instanceKey.length) {\r\n simpleName += \"<\" + instanceKey + \">\";\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n instance = new Class(prototype, simpleName, internalName, typeArguments, baseClass);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n prototype.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n\r\n // Inherit base class members and set up the initial memory offset for own fields\r\n var memoryOffset: u32 = 0;\r\n if (baseClass) {\r\n if (baseClass.members) {\r\n if (!instance.members) instance.members = new Map();\r\n for (let inheritedMember of baseClass.members.values()) {\r\n instance.members.set(inheritedMember.simpleName, inheritedMember);\r\n }\r\n }\r\n memoryOffset = baseClass.currentMemoryOffset;\r\n }\r\n\r\n // Resolve constructor by first applying the class type arguments\r\n if (prototype.constructorPrototype) {\r\n let constructorPartial = this.resolveFunctionPartially(\r\n prototype.constructorPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!constructorPartial) return null;\r\n instance.constructorInstance = this.resolveFunction(constructorPartial, null, null, reportMode);\r\n }\r\n\r\n // Resolve instance members\r\n if (prototype.instanceMembers) {\r\n for (let member of prototype.instanceMembers.values()) {\r\n switch (member.kind) {\r\n\r\n // Lay out fields in advance\r\n case ElementKind.FIELD_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let fieldDeclaration = (member).declaration;\r\n let fieldType: Type | null = null;\r\n // TODO: handle duplicate non-private fields\r\n if (!fieldDeclaration.type) {\r\n if (baseClass !== null && baseClass.members !== null) {\r\n let baseField = baseClass.members.get((member).simpleName);\r\n if (baseField && !baseField.is(CommonFlags.PRIVATE)) {\r\n assert(baseField.kind == ElementKind.FIELD);\r\n fieldType = (baseField).type;\r\n }\r\n }\r\n if (!fieldType) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n fieldDeclaration.name.range.atEnd\r\n );\r\n }\r\n }\r\n } else {\r\n fieldType = this.resolveType(\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n if (!fieldType) break;\r\n let fieldInstance = new Field(\r\n member,\r\n internalName + INSTANCE_DELIMITER + (member).simpleName,\r\n fieldType,\r\n fieldDeclaration,\r\n instance\r\n );\r\n switch (fieldType.byteSize) { // align\r\n case 1: break;\r\n case 2: { if (memoryOffset & 1) ++memoryOffset; break; }\r\n case 4: { if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1; break; }\r\n case 8: { if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1; break; }\r\n default: assert(false);\r\n }\r\n fieldInstance.memoryOffset = memoryOffset;\r\n memoryOffset += fieldType.byteSize;\r\n instance.members.set(member.simpleName, fieldInstance);\r\n break;\r\n }\r\n\r\n // Partially resolve methods as these might have type arguments on their own\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let partialPrototype = this.resolveFunctionPartially(\r\n member,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialPrototype) return null;\r\n partialPrototype.internalName = internalName + INSTANCE_DELIMITER + partialPrototype.simpleName;\r\n instance.members.set(member.simpleName, partialPrototype);\r\n break;\r\n }\r\n\r\n // Clone properties and partially resolve the wrapped accessors for consistence with other methods\r\n case ElementKind.PROPERTY: {\r\n if (!instance.members) instance.members = new Map();\r\n let getterPrototype = assert((member).getterPrototype); // must be present\r\n let setterPrototype = (member).setterPrototype; // might be present\r\n let instanceProperty = new Property(\r\n this.program,\r\n member.simpleName,\r\n internalName + INSTANCE_DELIMITER + member.simpleName,\r\n prototype\r\n );\r\n let partialGetterPrototype = this.resolveFunctionPartially(\r\n getterPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialGetterPrototype) return null;\r\n partialGetterPrototype\r\n .internalName = internalName + INSTANCE_DELIMITER + partialGetterPrototype.simpleName;\r\n instanceProperty.getterPrototype = partialGetterPrototype;\r\n if (setterPrototype) {\r\n let partialSetterPrototype = this.resolveFunctionPartially(\r\n setterPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialSetterPrototype) return null;\r\n partialSetterPrototype\r\n .internalName = internalName + INSTANCE_DELIMITER + partialSetterPrototype.simpleName;\r\n instanceProperty.setterPrototype = partialSetterPrototype;\r\n }\r\n instance.members.set(member.simpleName, instanceProperty);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n // Finalize memory offset\r\n instance.currentMemoryOffset = memoryOffset;\r\n\r\n // Fully resolve operator overloads (don't have type parameters on their own)\r\n for (let [kind, overloadPrototype] of prototype.overloadPrototypes) {\r\n assert(kind != OperatorKind.INVALID);\r\n let operatorInstance: Function | null;\r\n if (overloadPrototype.is(CommonFlags.INSTANCE)) {\r\n let operatorPartial = this.resolveFunctionPartially(\r\n overloadPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!operatorPartial) continue;\r\n operatorInstance = this.resolveFunction(operatorPartial, null, null, reportMode);\r\n } else {\r\n operatorInstance = this.resolveFunction(overloadPrototype, null, null, reportMode);\r\n }\r\n if (!operatorInstance) continue;\r\n let overloads = instance.overloads;\r\n if (!overloads) instance.overloads = overloads = new Map();\r\n overloads.set(kind, operatorInstance);\r\n }\r\n return instance;\r\n }\r\n\r\n /** Resolves a class prototype by first resolving the specified type arguments. */\r\n resolveClassInclTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Class | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n\r\n // Resolve type arguments if generic\r\n if (prototype.is(CommonFlags.GENERIC)) {\r\n let typeParameterNodes = prototype.declaration.typeParameters;\r\n let expectedTypeArguments = typeParameterNodes.length;\r\n assert(expectedTypeArguments > 0);\r\n let actualTypeArguments = typeArgumentNodes !== null ? typeArgumentNodes.length : 0;\r\n if (expectedTypeArguments != actualTypeArguments) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, expectedTypeArguments.toString(10), actualTypeArguments.toString(10)\r\n );\r\n }\r\n return null;\r\n }\r\n resolvedTypeArguments = this.resolveTypeArguments(\r\n typeParameterNodes,\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode,\r\n reportMode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n\r\n // Otherwise make sure that no type arguments have been specified\r\n } else {\r\n if (typeArgumentNodes !== null && typeArgumentNodes.length) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n\r\n // Continue with concrete types\r\n return this.resolveClass(\r\n prototype,\r\n resolvedTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n}\r\n","/**\r\n * Generated from diagnosticsMessages.json. Do not edit.\r\n * @module diagnostics\r\n *//***/\r\n\r\n/* tslint:disable:max-line-length */\r\n\r\n/** Enum of available diagnostic codes. */\r\nexport enum DiagnosticCode {\r\n Operation_not_supported = 100,\r\n Operation_is_unsafe = 101,\r\n User_defined_0 = 102,\r\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\r\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\r\n Type_0_cannot_be_changed_to_type_1 = 202,\r\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\r\n Basic_type_0_cannot_be_nullable = 204,\r\n Cannot_export_a_mutable_global = 205,\r\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\r\n Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa = 207,\r\n Unmanaged_classes_cannot_implement_interfaces = 208,\r\n Invalid_regular_expression_flags = 209,\r\n Implementation_0_must_match_the_signature_1 = 210,\r\n Class_0_is_sealed_and_cannot_be_extended = 211,\r\n Decorator_0_is_not_valid_here = 212,\r\n Duplicate_decorator = 213,\r\n An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf = 214,\r\n Optional_parameter_must_have_an_initializer = 215,\r\n Constructor_of_class_0_must_not_require_any_arguments = 216,\r\n Function_0_cannot_be_inlined_into_itself = 217,\r\n Unterminated_string_literal = 1002,\r\n Identifier_expected = 1003,\r\n _0_expected = 1005,\r\n A_file_cannot_have_a_reference_to_itself = 1006,\r\n Trailing_comma_not_allowed = 1009,\r\n Unexpected_token = 1012,\r\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\r\n Parameter_cannot_have_question_mark_and_initializer = 1015,\r\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\r\n Statements_are_not_allowed_in_ambient_contexts = 1036,\r\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\r\n _0_modifier_cannot_be_used_here = 1042,\r\n A_rest_parameter_cannot_be_optional = 1047,\r\n A_rest_parameter_cannot_have_an_initializer = 1048,\r\n A_set_accessor_must_have_exactly_one_parameter = 1049,\r\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\r\n A_get_accessor_cannot_have_parameters = 1054,\r\n Enum_member_must_have_initializer = 1061,\r\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\r\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\r\n An_accessor_cannot_have_type_parameters = 1094,\r\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\r\n Type_parameter_list_cannot_be_empty = 1098,\r\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\r\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\r\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\r\n Expression_expected = 1109,\r\n Type_expected = 1110,\r\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\r\n Duplicate_label_0 = 1114,\r\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\r\n Digit_expected = 1124,\r\n Hexadecimal_digit_expected = 1125,\r\n Unexpected_end_of_text = 1126,\r\n Invalid_character = 1127,\r\n _case_or_default_expected = 1130,\r\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\r\n Type_argument_expected = 1140,\r\n String_literal_expected = 1141,\r\n Line_break_not_permitted_here = 1142,\r\n Declaration_expected = 1146,\r\n _const_declarations_must_be_initialized = 1155,\r\n Unterminated_regular_expression_literal = 1161,\r\n Interface_declaration_cannot_have_implements_clause = 1176,\r\n Binary_digit_expected = 1177,\r\n Octal_digit_expected = 1178,\r\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\r\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\r\n Unterminated_Unicode_escape_sequence = 1199,\r\n Decorators_are_not_valid_here = 1206,\r\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\r\n Method_0_cannot_have_an_implementation_because_it_is_marked_abstract = 1245,\r\n A_class_may_only_extend_another_class = 1311,\r\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\r\n Duplicate_identifier_0 = 2300,\r\n Cannot_find_name_0 = 2304,\r\n Module_0_has_no_exported_member_1 = 2305,\r\n Generic_type_0_requires_1_type_argument_s = 2314,\r\n Type_0_is_not_generic = 2315,\r\n Type_0_is_not_assignable_to_type_1 = 2322,\r\n Index_signature_is_missing_in_type_0 = 2329,\r\n _this_cannot_be_referenced_in_current_location = 2332,\r\n _super_can_only_be_referenced_in_a_derived_class = 2335,\r\n Property_0_does_not_exist_on_type_1 = 2339,\r\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\r\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\r\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\r\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\r\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\r\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\r\n _get_and_set_accessor_must_have_the_same_type = 2380,\r\n Constructor_implementation_is_missing = 2390,\r\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\r\n Multiple_constructor_implementations_are_not_allowed = 2392,\r\n Duplicate_function_implementation = 2393,\r\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\r\n Type_0_has_no_property_1 = 2460,\r\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\r\n In_const_enum_declarations_member_initializer_must_be_constant_expression = 2474,\r\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\r\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\r\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\r\n Index_signature_in_type_0_only_permits_reading = 2542,\r\n Expected_0_arguments_but_got_1 = 2554,\r\n Expected_at_least_0_arguments_but_got_1 = 2555,\r\n Expected_0_type_arguments_but_got_1 = 2558,\r\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\r\n Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration = 2673,\r\n Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration = 2674,\r\n Namespace_0_has_no_exported_member_1 = 2694,\r\n File_0_not_found = 6054,\r\n Numeric_separators_are_not_allowed_here = 6188,\r\n Multiple_consecutive_numeric_separators_are_not_permitted = 6189\r\n}\r\n\r\n/** Translates a diagnostic code to its respective string. */\r\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\r\n switch (code) {\r\n case 100: return \"Operation not supported.\";\r\n case 101: return \"Operation is unsafe.\";\r\n case 102: return \"User-defined: {0}\";\r\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\r\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\r\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\r\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\r\n case 204: return \"Basic type '{0}' cannot be nullable.\";\r\n case 205: return \"Cannot export a mutable global.\";\r\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\r\n case 207: return \"Unmanaged classes cannot extend managed classes and vice-versa.\";\r\n case 208: return \"Unmanaged classes cannot implement interfaces.\";\r\n case 209: return \"Invalid regular expression flags.\";\r\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\r\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\r\n case 212: return \"Decorator '{0}' is not valid here.\";\r\n case 213: return \"Duplicate decorator.\";\r\n case 214: return \"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.\";\r\n case 215: return \"Optional parameter must have an initializer.\";\r\n case 216: return \"Constructor of class '{0}' must not require any arguments.\";\r\n case 217: return \"Function '{0}' cannot be inlined into itself.\";\r\n case 1002: return \"Unterminated string literal.\";\r\n case 1003: return \"Identifier expected.\";\r\n case 1005: return \"'{0}' expected.\";\r\n case 1006: return \"A file cannot have a reference to itself.\";\r\n case 1009: return \"Trailing comma not allowed.\";\r\n case 1012: return \"Unexpected token.\";\r\n case 1014: return \"A rest parameter must be last in a parameter list.\";\r\n case 1015: return \"Parameter cannot have question mark and initializer.\";\r\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\r\n case 1036: return \"Statements are not allowed in ambient contexts.\";\r\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\r\n case 1042: return \"'{0}' modifier cannot be used here.\";\r\n case 1047: return \"A rest parameter cannot be optional.\";\r\n case 1048: return \"A rest parameter cannot have an initializer.\";\r\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\r\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\r\n case 1054: return \"A 'get' accessor cannot have parameters.\";\r\n case 1061: return \"Enum member must have initializer.\";\r\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\r\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\r\n case 1094: return \"An accessor cannot have type parameters.\";\r\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\r\n case 1098: return \"Type parameter list cannot be empty.\";\r\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\r\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\r\n case 1108: return \"A 'return' statement can only be used within a function body.\";\r\n case 1109: return \"Expression expected.\";\r\n case 1110: return \"Type expected.\";\r\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\r\n case 1114: return \"Duplicate label '{0}'.\";\r\n case 1121: return \"Octal literals are not allowed in strict mode.\";\r\n case 1124: return \"Digit expected.\";\r\n case 1125: return \"Hexadecimal digit expected.\";\r\n case 1126: return \"Unexpected end of text.\";\r\n case 1127: return \"Invalid character.\";\r\n case 1130: return \"'case' or 'default' expected.\";\r\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\r\n case 1140: return \"Type argument expected.\";\r\n case 1141: return \"String literal expected.\";\r\n case 1142: return \"Line break not permitted here.\";\r\n case 1146: return \"Declaration expected.\";\r\n case 1155: return \"'const' declarations must be initialized.\";\r\n case 1161: return \"Unterminated regular expression literal.\";\r\n case 1176: return \"Interface declaration cannot have 'implements' clause.\";\r\n case 1177: return \"Binary digit expected.\";\r\n case 1178: return \"Octal digit expected.\";\r\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\r\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\r\n case 1199: return \"Unterminated Unicode escape sequence.\";\r\n case 1206: return \"Decorators are not valid here.\";\r\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\r\n case 1245: return \"Method '{0}' cannot have an implementation because it is marked abstract.\";\r\n case 1311: return \"A class may only extend another class.\";\r\n case 1317: return \"A parameter property cannot be declared using a rest parameter.\";\r\n case 2300: return \"Duplicate identifier '{0}'.\";\r\n case 2304: return \"Cannot find name '{0}'.\";\r\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\r\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\r\n case 2315: return \"Type '{0}' is not generic.\";\r\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\r\n case 2329: return \"Index signature is missing in type '{0}'.\";\r\n case 2332: return \"'this' cannot be referenced in current location.\";\r\n case 2335: return \"'super' can only be referenced in a derived class.\";\r\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\r\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\r\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\r\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\r\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\r\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\r\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\r\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\r\n case 2390: return \"Constructor implementation is missing.\";\r\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\r\n case 2392: return \"Multiple constructor implementations are not allowed.\";\r\n case 2393: return \"Duplicate function implementation.\";\r\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\r\n case 2460: return \"Type '{0}' has no property '{1}'.\";\r\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\r\n case 2474: return \"In 'const' enum declarations member initializer must be constant expression.\";\r\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\r\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\r\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\r\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\r\n case 2554: return \"Expected {0} arguments, but got {1}.\";\r\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\r\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\r\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\r\n case 2673: return \"Constructor of class '{0}' is private and only accessible within the class declaration.\";\r\n case 2674: return \"Constructor of class '{0}' is protected and only accessible within the class declaration.\";\r\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\r\n case 6054: return \"File '{0}' not found.\";\r\n case 6188: return \"Numeric separators are not allowed here.\";\r\n case 6189: return \"Multiple consecutive numeric separators are not permitted.\";\r\n default: return \"\";\r\n }\r\n}\r\n","/**\r\n * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileAllocate,\r\n compileAbort,\r\n compileIterateRoots\r\n} from \"./builtins\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module,\r\n MemorySegment,\r\n ExpressionRef,\r\n UnaryOp,\r\n BinaryOp,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionId,\r\n FunctionTypeRef,\r\n GlobalRef,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getGetLocalIndex,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName\r\n} 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 inline functions stack. */\r\n currentInlineFunctions: Function[] = [];\r\n /** Current enum in compilation. */\r\n currentEnum: Enum | null = null;\r\n /** Current type in compilation. */\r\n currentType: Type = Type.void;\r\n /** Start function being compiled. */\r\n startFunctionInstance: Function;\r\n /** Start function statements. */\r\n startFunctionBody: ExpressionRef[];\r\n /** Counting memory offset. */\r\n memoryOffset: I64;\r\n /** Memory segments being compiled. */\r\n memorySegments: MemorySegment[] = [];\r\n /** Map of already compiled static string segments. */\r\n stringSegments: Map = new Map();\r\n /** Function table being compiled. */\r\n functionTable: 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 /** Indicates whether the iterateRoots function must be generated. */\r\n needsIterateRoots: bool = false;\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n this.resolver = program.resolver;\r\n if (!options) options = new Options();\r\n this.options = options;\r\n this.memoryOffset = i64_new(\r\n // leave space for `null`. also functions as a sentinel for erroneous stores at offset 0.\r\n // note that Binaryen's asm.js output utilizes the first 8 bytes for reinterpretations (#1547)\r\n max(options.memoryBase, 8)\r\n );\r\n this.module = Module.create();\r\n }\r\n\r\n /** Performs compilation of the underlying {@link Program} to a {@link Module}. */\r\n compile(): Module {\r\n var options = this.options;\r\n var module = this.module;\r\n var program = this.program;\r\n\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n program.initialize(options);\r\n\r\n // set up the start function\r\n var startFunctionInstance = new Function(program.startFunction, \"start\", new Signature([], Type.void));\r\n this.startFunctionInstance = startFunctionInstance;\r\n var startFunctionBody = new Array();\r\n this.startFunctionBody = startFunctionBody;\r\n this.currentFunction = startFunctionInstance;\r\n\r\n // compile entry file(s) while traversing reachable elements\r\n var sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].isEntry) this.compileSource(sources[i]);\r\n }\r\n\r\n // compile the start function if not empty or called by main\r\n if (startFunctionBody.length || program.mainFunction !== null) {\r\n let signature = startFunctionInstance.signature;\r\n let funcRef = module.addFunction(\r\n startFunctionInstance.internalName,\r\n this.ensureFunctionType(\r\n signature.parameterTypes,\r\n signature.returnType,\r\n signature.thisType\r\n ),\r\n typesToNativeTypes(startFunctionInstance.additionalLocals),\r\n module.createBlock(null, startFunctionBody)\r\n );\r\n startFunctionInstance.finalize(module, funcRef);\r\n if (!program.mainFunction) module.setStart(funcRef);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n var memoryOffset = this.memoryOffset;\r\n memoryOffset = i64_align(memoryOffset, options.usizeType.byteSize);\r\n this.memoryOffset = memoryOffset;\r\n if (options.isWasm64) {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I64,\r\n false,\r\n module.createI64(i64_low(memoryOffset), i64_high(memoryOffset))\r\n );\r\n } else {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I32,\r\n false,\r\n module.createI32(i64_low(memoryOffset))\r\n );\r\n }\r\n\r\n // determine initial page size\r\n var numPages = this.memorySegments.length\r\n ? i64_low(i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0)))\r\n : 0;\r\n module.setMemory(\r\n numPages,\r\n this.options.isWasm64\r\n ? Module.MAX_MEMORY_WASM64\r\n : Module.MAX_MEMORY_WASM32,\r\n this.memorySegments,\r\n options.target,\r\n \"memory\"\r\n );\r\n\r\n // import memory if requested (default memory is named '0' by Binaryen)\r\n if (options.importMemory) module.addMemoryImport(\"0\", \"env\", \"memory\");\r\n\r\n // set up function table\r\n var functionTable = this.functionTable;\r\n var functionTableSize = functionTable.length;\r\n var functionTableExported = false;\r\n if (functionTableSize) {\r\n 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 // set up module exports\r\n for (let [name, moduleExport] of program.moduleLevelExports) {\r\n this.makeModuleExport(name, moduleExport.element);\r\n }\r\n\r\n // set up gc\r\n if (this.needsIterateRoots) compileIterateRoots(this);\r\n\r\n return module;\r\n }\r\n\r\n /** Applies the respective module export(s) for the specified element. */\r\n private makeModuleExport(name: string, element: Element, prefix: string = \"\"): void {\r\n\r\n // traverse members\r\n var members = element.members;\r\n if (members) {\r\n let subPrefix = prefix + name + (element.kind == ElementKind.CLASS\r\n ? INSTANCE_DELIMITER\r\n : STATIC_DELIMITER\r\n );\r\n if (element.kind == ElementKind.NAMESPACE) {\r\n for (let member of members.values()) {\r\n if (!member.is(CommonFlags.EXPORT)) continue;\r\n this.makeModuleExport(member.simpleName, member, subPrefix);\r\n }\r\n } else {\r\n for (let member of members.values()) {\r\n if (member.is(CommonFlags.PRIVATE)) continue;\r\n this.makeModuleExport(member.simpleName, member, subPrefix);\r\n }\r\n }\r\n }\r\n\r\n switch (element.kind) {\r\n\r\n // export global\r\n case ElementKind.GLOBAL: {\r\n let isConst = element.is(CommonFlags.CONST) || element.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n if (!isConst && !this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n let declaration = (element).declaration;\r\n if (declaration) {\r\n this.error(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n this.module.addGlobalExport(element.internalName, prefix + name);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUMVALUE: {\r\n if (!assert(element.parent).is(CommonFlags.CONST) && !this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n let declaration = (element).declaration;\r\n if (declaration) {\r\n this.error(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n this.module.addGlobalExport(element.internalName, prefix + name);\r\n }\r\n break;\r\n }\r\n\r\n // export function\r\n case ElementKind.FUNCTION: {\r\n let instance = element;\r\n let signature = instance.signature;\r\n if (signature.requiredParameters < signature.parameterTypes.length) {\r\n // utilize trampoline to fill in omitted arguments\r\n instance = this.ensureTrampoline(instance);\r\n this.ensureArgcSet();\r\n }\r\n if (instance.is(CommonFlags.COMPILED)) this.module.addFunctionExport(instance.internalName, prefix + name);\r\n break;\r\n }\r\n\r\n // export getter and setter\r\n case ElementKind.PROPERTY: {\r\n let getter = assert((element).getterPrototype);\r\n this.makeModuleExport(GETTER_PREFIX + name, getter, prefix);\r\n let setter = (element).setterPrototype;\r\n if (setter) this.makeModuleExport(SETTER_PREFIX + name, setter, prefix);\r\n break;\r\n }\r\n\r\n // export a getter and a setter\r\n case ElementKind.FIELD: {\r\n let module = this.module;\r\n let type = (element).type;\r\n let nativeType = type.toNativeType();\r\n let offset = (element).memoryOffset;\r\n let usizeType = this.options.usizeType;\r\n let nativeSizeType = this.options.nativeSizeType;\r\n\r\n // make a getter\r\n let getterName = prefix + GETTER_PREFIX + name;\r\n module.addFunction(\r\n getterName,\r\n this.ensureFunctionType(null, type, usizeType),\r\n null,\r\n module.createLoad(\r\n type.byteSize,\r\n type.is(TypeFlags.SIGNED),\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(getterName, getterName);\r\n\r\n // make a setter\r\n if (!element.is(CommonFlags.READONLY)) {\r\n let setterName = prefix + SETTER_PREFIX + name;\r\n module.addFunction(\r\n setterName,\r\n this.ensureFunctionType([ type ], Type.void, usizeType),\r\n null,\r\n module.createStore(\r\n type.byteSize,\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createGetLocal(1, nativeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(setterName, setterName);\r\n }\r\n break;\r\n }\r\n\r\n // skip prototype and export instances\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n let instanceName = name;\r\n if (instance.is(CommonFlags.GENERIC)) {\r\n let fullName = instance.internalName;\r\n instanceName += fullName.substring(fullName.lastIndexOf(\"<\"));\r\n }\r\n this.makeModuleExport(instanceName, instance, prefix);\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n let instanceName = name;\r\n if (instance.is(CommonFlags.GENERIC)) {\r\n let fullName = instance.internalName;\r\n instanceName += fullName.substring(fullName.lastIndexOf(\"<\"));\r\n }\r\n let ctor = instance.constructorInstance;\r\n if (ctor) this.makeModuleExport(instanceName + INSTANCE_DELIMITER + ctor.simpleName, ctor, prefix);\r\n this.makeModuleExport(instanceName, instance, prefix);\r\n }\r\n break;\r\n }\r\n\r\n // all possible members already handled above\r\n case ElementKind.ENUM:\r\n case ElementKind.CLASS:\r\n case ElementKind.NAMESPACE: break;\r\n\r\n default: assert(false);\r\n }\r\n }\r\n\r\n // sources\r\n\r\n /** Compiles a source by looking it up by path first. */\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var source = this.program.lookupSourceByPath(normalizedPathWithoutExtension);\r\n if (source) this.compileSource(source);\r\n else {\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n }\r\n\r\n /** Compiles a source. */\r\n compileSource(source: Source): void {\r\n if (source.is(CommonFlags.COMPILED)) return;\r\n source.set(CommonFlags.COMPILED);\r\n\r\n // compile top-level statements\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var startFunctionInstance = this.startFunctionInstance;\r\n var startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let statement = statements[i];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileClassDeclaration(statement, [], null);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: break;\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileEnumDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(statement, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileNamespaceDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: { // global, always compiled as initializers might have side effects\r\n let variableInit = this.compileVariableStatement(statement);\r\n if (variableInit) startFunctionBody.push(variableInit);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n if ((statement).normalizedPath != null) {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n }\r\n if (noTreeShaking || isEntry) {\r\n this.compileExportStatement(statement);\r\n }\r\n break;\r\n }\r\n default: { // otherwise a top-level statement that is part of the start function's body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = startFunctionInstance;\r\n startFunctionBody.push(this.compileStatement(statement));\r\n this.currentFunction = previousFunction;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // globals\r\n\r\n compileGlobalDeclaration(declaration: VariableDeclaration): Global | null {\r\n // look up the initialized program element\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.GLOBAL);\r\n if (!this.compileGlobal(element)) return null; // reports\r\n return element;\r\n }\r\n\r\n compileGlobal(global: Global): bool {\r\n if (global.is(CommonFlags.COMPILED)) return true;\r\n global.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n var declaration = global.declaration;\r\n var initExpr: ExpressionRef = 0;\r\n\r\n if (global.type == Type.void) { // type is void if not yet resolved or not annotated\r\n if (declaration) {\r\n\r\n // resolve now if annotated\r\n if (declaration.type) {\r\n let resolvedType = this.resolver.resolveType(declaration.type); // reports\r\n if (!resolvedType) return false;\r\n if (resolvedType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.type.range\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n\r\n // infer from initializer if not annotated\r\n } else if (declaration.initializer) { // infer type using void/NONE for literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.WRAP\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.initializer.range, this.currentType.toString(), \"\"\r\n );\r\n return false;\r\n }\r\n global.type = this.currentType;\r\n\r\n // must either be annotated or have an initializer\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n return false;\r\n }\r\n } else {\r\n assert(false); // must have a declaration if 'void' (and thus resolved later on)\r\n }\r\n }\r\n\r\n // ambient builtins like 'HEAP_BASE' need to be resolved but are added explicitly\r\n if (global.is(CommonFlags.AMBIENT) && global.hasDecorator(DecoratorFlags.BUILTIN)) return true;\r\n\r\n var nativeType = global.type.toNativeType();\r\n var isDeclaredConstant = global.is(CommonFlags.CONST) || global.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n\r\n // handle imports\r\n if (global.is(CommonFlags.AMBIENT)) {\r\n\r\n // constant global\r\n if (isDeclaredConstant || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n global.set(CommonFlags.MODULE_IMPORT);\r\n if (declaration) {\r\n mangleImportName(global, declaration, global.parent);\r\n } else {\r\n mangleImportName_moduleName = \"env\";\r\n mangleImportName_elementName = global.simpleName;\r\n }\r\n module.addGlobalImport(\r\n global.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n nativeType\r\n );\r\n global.set(CommonFlags.COMPILED);\r\n return true;\r\n\r\n // importing mutable globals is not supported in the MVP\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n assert(declaration).range\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n // the MVP does not yet support initializer expressions other than constant values (and constant\r\n // get_globals), hence such initializations must be performed in the start function for now.\r\n var initializeInStart = false;\r\n\r\n // evaluate initializer if present\r\n if (declaration !== null && declaration.initializer !== null) {\r\n if (!initExpr) {\r\n initExpr = this.compileExpression(\r\n declaration.initializer,\r\n global.type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n }\r\n\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (isDeclaredConstant) {\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n initializeInStart = true;\r\n }\r\n } else {\r\n initializeInStart = true;\r\n }\r\n }\r\n\r\n // explicitly inline if annotated\r\n if (global.hasDecorator(DecoratorFlags.INLINE)) {\r\n if (!initializeInStart) { // reported above\r\n assert(getExpressionId(initExpr) == ExpressionId.Const);\r\n let exprType = getExpressionType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(getConstValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return false;\r\n }\r\n }\r\n global.set(CommonFlags.INLINED); // inline the value from now on\r\n }\r\n }\r\n\r\n // initialize to zero if there's no initializer\r\n } else {\r\n initExpr = global.type.toNativeZero(module);\r\n }\r\n\r\n var internalName = global.internalName;\r\n\r\n if (initializeInStart) { // initialize to mutable zero and set the actual value in start\r\n module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(module));\r\n this.startFunctionBody.push(module.createSetGlobal(internalName, initExpr));\r\n\r\n } else { // compile normally\r\n module.addGlobal(internalName, nativeType, !isDeclaredConstant, initExpr);\r\n }\r\n return true;\r\n }\r\n\r\n // enums\r\n\r\n compileEnumDeclaration(declaration: EnumDeclaration): Enum | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(element)) return null;\r\n return element;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(CommonFlags.COMPILED)) return true;\r\n element.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n var previousValueIsMut = false;\r\n\r\n if (element.members) {\r\n for (let member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n let initInStart = false;\r\n let val = member;\r\n let valueDeclaration = val.declaration;\r\n val.set(CommonFlags.COMPILED);\r\n let initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(\r\n valueDeclaration.value,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.error(\r\n DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,\r\n valueDeclaration.value.range\r\n );\r\n initInStart = true;\r\n }\r\n } else {\r\n initInStart = true;\r\n }\r\n }\r\n } else if (previousValue == null) {\r\n initExpr = module.createI32(0);\r\n } else {\r\n if (previousValueIsMut) {\r\n this.error(\r\n DiagnosticCode.Enum_member_must_have_initializer,\r\n valueDeclaration.range\r\n );\r\n }\r\n initExpr = module.createBinary(BinaryOp.AddI32,\r\n module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n module.createI32(1)\r\n );\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n }\r\n if (initInStart) {\r\n module.addGlobal(val.internalName, NativeType.I32, true, module.createI32(0));\r\n this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr));\r\n previousValueIsMut = true;\r\n } else {\r\n module.addGlobal(val.internalName, NativeType.I32, !element.is(CommonFlags.CONST), initExpr);\r\n previousValueIsMut = false;\r\n }\r\n previousValue = val;\r\n }\r\n }\r\n this.currentEnum = null;\r\n return true;\r\n }\r\n\r\n // functions\r\n\r\n /** Compiles a top-level function given its declaration. */\r\n compileFunctionDeclaration(\r\n declaration: FunctionDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n null, // no outer scope (is top level)\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n /** Resolves the specified type arguments prior to compiling the resulting function instance. */\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n outerScope: Flow | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!instance) return null;\r\n instance.outerScope = outerScope;\r\n if (!this.compileFunction(instance)) return null; // reports\r\n return instance;\r\n }\r\n\r\n /** Either reuses or creates the function type matching the specified signature. */\r\n ensureFunctionType(\r\n parameterTypes: Type[] | null,\r\n returnType: Type,\r\n thisType: Type | null = null\r\n ): FunctionTypeRef {\r\n var numParameters = parameterTypes ? parameterTypes.length : 0;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n if (parameterTypes) {\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = parameterTypes[i].toNativeType();\r\n }\r\n }\r\n var resultType = returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n let name = Signature.makeSignatureString(parameterTypes, returnType, thisType);\r\n typeRef = module.addFunctionType(name, resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n assert(!(instance.is(CommonFlags.AMBIENT) && instance.hasDecorator(DecoratorFlags.BUILTIN)));\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n // check that modifiers are matching\r\n var declaration = instance.prototype.declaration;\r\n var body = declaration.body;\r\n if (body) {\r\n if (instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n if (!instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n declaration.name.range\r\n );\r\n }\r\n }\r\n\r\n var ref: FunctionRef;\r\n var signature = instance.signature;\r\n var typeRef = this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n if (body) {\r\n let isConstructor = instance.is(CommonFlags.CONSTRUCTOR);\r\n let returnType = instance.signature.returnType;\r\n\r\n // compile body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n let flow = instance.flow;\r\n let stmt: ExpressionRef;\r\n if (body.kind == NodeKind.EXPRESSION) { // () => expression\r\n assert(!instance.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.GET | CommonFlags.SET | CommonFlags.MAIN));\r\n assert(instance.is(CommonFlags.ARROW));\r\n stmt = this.compileExpression(\r\n (body).expression,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n flow.set(FlowFlags.RETURNS);\r\n if (!flow.canOverflow(stmt, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n flow.finalize();\r\n } else {\r\n assert(body.kind == NodeKind.BLOCK);\r\n let stmts = this.compileStatements((body).statements);\r\n if (instance.is(CommonFlags.MAIN)) {\r\n module.addGlobal(\"~started\", NativeType.I32, true, module.createI32(0));\r\n stmts.unshift(\r\n module.createIf(\r\n module.createUnary(\r\n UnaryOp.EqzI32,\r\n module.createGetGlobal(\"~started\", NativeType.I32)\r\n ),\r\n module.createBlock(null, [\r\n module.createCall(\"start\", null, NativeType.None),\r\n module.createSetGlobal(\"~started\", module.createI32(1))\r\n ])\r\n )\r\n );\r\n }\r\n flow.finalize();\r\n if (isConstructor) {\r\n let nativeSizeType = this.options.nativeSizeType;\r\n assert(instance.is(CommonFlags.INSTANCE));\r\n\r\n // implicitly return `this` if the constructor doesn't always return on its own\r\n if (!flow.is(FlowFlags.RETURNS)) {\r\n\r\n // if all branches are guaranteed to allocate, skip the final conditional allocation\r\n if (flow.is(FlowFlags.ALLOCATES)) {\r\n stmts.push(module.createGetLocal(0, nativeSizeType));\r\n\r\n // if not all branches are guaranteed to allocate, also append a conditional allocation\r\n } else {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n stmts.push(module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, declaration.name)\r\n ));\r\n }\r\n }\r\n\r\n // make sure all branches return\r\n } else if (returnType != Type.void && !flow.is(FlowFlags.RETURNS)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n }\r\n stmt = !stmts.length\r\n ? module.createNop()\r\n : stmts.length == 1\r\n ? stmts[0]\r\n : module.createBlock(null, stmts, returnType.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n\r\n // create the function\r\n ref = module.addFunction(\r\n instance.internalName,\r\n typeRef,\r\n typesToNativeTypes(instance.additionalLocals),\r\n stmt\r\n );\r\n\r\n // concrete functions cannot have an annotated external name\r\n if (instance.hasDecorator(DecoratorFlags.EXTERNAL)) {\r\n let decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n }\r\n\r\n } else {\r\n instance.set(CommonFlags.MODULE_IMPORT);\r\n mangleImportName(instance, declaration, instance.prototype.parent); // TODO: check for duplicates\r\n\r\n // create the function import\r\n ref = module.addFunctionImport(\r\n instance.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n typeRef\r\n );\r\n }\r\n\r\n instance.finalize(module, ref);\r\n return true;\r\n }\r\n\r\n // namespaces\r\n\r\n compileNamespaceDeclaration(declaration: NamespaceDeclaration): void {\r\n var members = declaration.members;\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n switch (member.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n let variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n compileNamespace(ns: Namespace): void {\r\n if (!ns.members) return;\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let element of ns.members.values()) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking || (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n if (element.hasDecorator(DecoratorFlags.BUILTIN)) break;\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var fileLevelExports = this.program.fileLevelExports;\r\n var members = statement.members;\r\n if (!members) return; // filespace\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n let element = fileLevelExports.get(\r\n statement.range.source.internalPath + PATH_DELIMITER + member.externalName.text\r\n );\r\n if (!element) continue; // reported in Program#initialize\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (!(element).is(CommonFlags.GENERIC)) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // classes\r\n\r\n compileClassDeclaration(\r\n declaration: ClassDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): void {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.compileClassUsingTypeArguments(\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n declaration\r\n );\r\n }\r\n\r\n compileClassUsingTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var instance = this.resolver.resolveClassInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode || prototype.declaration\r\n );\r\n if (!instance) return;\r\n this.compileClass(instance);\r\n }\r\n\r\n compileClass(instance: Class): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n var staticMembers = instance.prototype.members;\r\n if (staticMembers) {\r\n for (let element of staticMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [], null, null,\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], null, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], null, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n var ctorInstance = instance.constructorInstance;\r\n if (ctorInstance) this.compileFunction(ctorInstance);\r\n var instanceMembers = instance.members;\r\n if (instanceMembers) {\r\n for (let element of instanceMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n instance.contextualTypeArguments,\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n element.set(CommonFlags.COMPILED);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], instance.contextualTypeArguments, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], instance.contextualTypeArguments, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n compileInterfaceDeclaration(\r\n declaration: InterfaceDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n // TODO\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n }\r\n\r\n // memory\r\n\r\n /** Adds a static memory segment with the specified data. */\r\n addMemorySegment(buffer: Uint8Array, alignment: i32 = 8): MemorySegment {\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n }\r\n\r\n // function table\r\n\r\n /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(CommonFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var functionTable = this.functionTable;\r\n var index = functionTable.length;\r\n if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) {\r\n // insert the trampoline if the function has optional parameters\r\n func = this.ensureTrampoline(func);\r\n }\r\n functionTable.push(func);\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 = module.precomputeExpression(condExpr);\r\n if (getExpressionId(condPre) == ExpressionId.Const) {\r\n assert(getExpressionType(condPre) == NativeType.I32);\r\n if (getConstValueI32(condPre) != 0) alwaysTrue = true;\r\n // TODO: could skip compilation if the condition is always false here, but beware that the\r\n // initializer could still declare new 'var's that are used later on.\r\n }\r\n // recompile to original\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n } else {\r\n // omitted condition is always true\r\n condExpr = module.createI32(1);\r\n alwaysTrue = true;\r\n }\r\n var incrExpr = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : 0;\r\n var 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 = module.precomputeExpression(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileStatement(ifTrue)\r\n : ifFalse\r\n ? this.compileStatement(ifFalse)\r\n : module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Each arm initiates a branch\r\n var parentFlow = currentFunction.flow;\r\n var ifTrueFlow = parentFlow.fork();\r\n currentFunction.flow = ifTrueFlow;\r\n var ifTrueExpr = this.compileStatement(ifTrue);\r\n currentFunction.flow = ifTrueFlow.free();\r\n\r\n var ifFalseExpr: ExpressionRef = 0;\r\n if (ifFalse) {\r\n let ifFalseFlow = parentFlow.fork();\r\n currentFunction.flow = ifFalseFlow;\r\n ifFalseExpr = this.compileStatement(ifFalse);\r\n currentFunction.flow = ifFalseFlow.free();\r\n parentFlow.inheritMutual(ifTrueFlow, ifFalseFlow);\r\n } else {\r\n parentFlow.inheritConditional(ifTrueFlow);\r\n }\r\n return module.createIf(condExpr, ifTrueExpr, ifFalseExpr);\r\n }\r\n\r\n compileReturnStatement(statement: ReturnStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var expr: ExpressionRef = 0;\r\n var flow = currentFunction.flow;\r\n\r\n // Remember that this flow returns\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n if (statement.value) {\r\n let returnType = flow.returnType;\r\n if (returnType == Type.void) {\r\n this.compileExpressionRetainType(statement.value, returnType, WrapMode.NONE);\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n statement.value.range, this.currentType.toString(), returnType.toString()\r\n );\r\n this.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n expr = this.compileExpression(\r\n statement.value,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n currentFunction.is(CommonFlags.MODULE_EXPORT)\r\n ? WrapMode.WRAP\r\n : WrapMode.NONE\r\n );\r\n\r\n // Remember whether returning a properly wrapped value\r\n if (!flow.canOverflow(expr, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n }\r\n\r\n // If the last statement anyway, make it the block's return value\r\n if (isLastStatement(statement)) return expr ? expr : module.createNop();\r\n\r\n // When inlining, break to the end of the inlined function's block (no need to wrap)\r\n return flow.is(FlowFlags.INLINE_CONTEXT)\r\n ? module.createBreak(assert(flow.returnLabel), 0, expr)\r\n : module.createReturn(expr);\r\n }\r\n\r\n compileSwitchStatement(statement: SwitchStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n var cases = statement.cases;\r\n var numCases = cases.length;\r\n if (!numCases) {\r\n return this.compileExpression(statement.condition, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n\r\n // Everything within a switch uses the same break context\r\n var context = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n\r\n // introduce a local for evaluating the condition (exactly once)\r\n var tempLocal = currentFunction.getTempLocal(Type.u32, false);\r\n var tempLocalIndex = tempLocal.index;\r\n\r\n // Prepend initializer to inner block. Does not initiate a new branch, yet.\r\n var breaks = new Array(1 + numCases);\r\n breaks[0] = module.createSetLocal( // initializer\r\n tempLocalIndex,\r\n this.compileExpression(statement.condition, Type.u32, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n );\r\n\r\n // make one br_if per (possibly dynamic) labeled case (binaryen optimizes to br_table where possible)\r\n var breakIndex = 1;\r\n var defaultIndex = -1;\r\n for (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let label = case_.label;\r\n if (label) {\r\n breaks[breakIndex++] = module.createBreak(\"case\" + i.toString(10) + \"|\" + context,\r\n module.createBinary(BinaryOp.EqI32,\r\n module.createGetLocal(tempLocalIndex, NativeType.I32),\r\n this.compileExpression(label, Type.u32, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n )\r\n );\r\n } else {\r\n defaultIndex = i;\r\n }\r\n }\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n\r\n // otherwise br to default respectively out of the switch if there is no default case\r\n breaks[breakIndex] = module.createBreak((defaultIndex >= 0\r\n ? \"case\" + defaultIndex.toString(10)\r\n : \"break\"\r\n ) + \"|\" + context);\r\n\r\n // nest blocks in order\r\n var currentBlock = module.createBlock(\"case0|\" + context, breaks, NativeType.None);\r\n var alwaysReturns = true;\r\n var alwaysReturnsWrapped = true;\r\n var alwaysThrows = true;\r\n var alwaysAllocates = true;\r\n for (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let statements = case_.statements;\r\n let numStatements = statements.length;\r\n\r\n // Each switch case initiates a new branch\r\n let flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n let breakLabel = \"break|\" + context;\r\n flow.breakLabel = breakLabel;\r\n\r\n let isLast = i == numCases - 1;\r\n let nextLabel = isLast ? breakLabel : \"case\" + (i + 1).toString(10) + \"|\" + context;\r\n let stmts = new Array(1 + numStatements);\r\n stmts[0] = currentBlock;\r\n let count = 1;\r\n let terminated = false;\r\n for (let j = 0; j < numStatements; ++j) {\r\n let stmt = this.compileStatement(statements[j]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n stmts[count++] = stmt;\r\n if (flow.isAny(FlowFlags.ANY_TERMINATING)) {\r\n terminated = true;\r\n break;\r\n }\r\n }\r\n }\r\n stmts.length = count;\r\n if (terminated || isLast) {\r\n if (!flow.is(FlowFlags.RETURNS)) alwaysReturns = false;\r\n if (!flow.is(FlowFlags.RETURNS_WRAPPED)) alwaysReturnsWrapped = false;\r\n if (!flow.is(FlowFlags.THROWS)) alwaysThrows = false;\r\n if (!flow.is(FlowFlags.ALLOCATES)) alwaysAllocates = false;\r\n }\r\n\r\n // Switch back to the parent flow\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS\r\n );\r\n currentFunction.flow = flow.free();\r\n currentBlock = module.createBlock(nextLabel, stmts, NativeType.None); // must be a labeled block\r\n }\r\n currentFunction.leaveBreakContext();\r\n\r\n // If the switch has a default (guaranteed to handle any value), propagate common flags\r\n if (defaultIndex >= 0) {\r\n if (alwaysReturns) parentFlow.set(FlowFlags.RETURNS);\r\n if (alwaysReturnsWrapped) parentFlow.set(FlowFlags.RETURNS_WRAPPED);\r\n if (alwaysThrows) parentFlow.set(FlowFlags.THROWS);\r\n if (alwaysAllocates) parentFlow.set(FlowFlags.ALLOCATES);\r\n }\r\n return currentBlock;\r\n }\r\n\r\n compileThrowStatement(statement: ThrowStatement): ExpressionRef {\r\n var flow = this.currentFunction.flow;\r\n\r\n // Remember that this branch throws\r\n flow.set(FlowFlags.THROWS);\r\n\r\n // FIXME: without try-catch it is safe to assume RETURNS as well for now\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n // TODO: requires exception-handling spec.\r\n return compileAbort(this, null, statement);\r\n }\r\n\r\n compileTryStatement(statement: TryStatement): ExpressionRef {\r\n // TODO\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n /**\r\n * Compiles a variable statement. Returns `0` if an initializer is not\r\n * necessary.\r\n */\r\n compileVariableStatement(statement: VariableStatement, isKnownGlobal: bool = false): ExpressionRef {\r\n var program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var declarations = statement.declarations;\r\n var numDeclarations = declarations.length;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n currentFunction == this.startFunctionInstance &&\r\n statement.parent && statement.parent.kind == NodeKind.SOURCE\r\n )) {\r\n // NOTE that the above condition also covers top-level variables declared with 'let', even\r\n // though such variables could also become start function locals if, and only if, not used\r\n // within any function declared in the same source, which is unknown at this point. the only\r\n // efficient way to deal with this would be to keep track of all occasions it is used and\r\n // replace these instructions afterwards, dynamically. (TOOD: what about a Binaryen pass?)\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n this.compileGlobalDeclaration(declarations[i]);\r\n }\r\n return 0;\r\n }\r\n\r\n // other variables become locals\r\n var initializers = new Array();\r\n var flow = this.currentFunction.flow;\r\n var resolver = this.resolver;\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n let declaration = declarations[i];\r\n let name = declaration.name.text;\r\n let type: Type | null = null;\r\n let initExpr: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = resolver.resolveType( // reports\r\n declaration.type,\r\n flow.contextualTypeArguments\r\n );\r\n if (!type) continue;\r\n if (declaration.initializer) {\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n } else if (declaration.initializer) { // infer type using void/NONE for proper literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.NONE\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.range, this.currentType.toString(), \"\"\r\n );\r\n continue;\r\n }\r\n type = this.currentType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n continue;\r\n }\r\n let isInlined = false;\r\n if (declaration.is(CommonFlags.CONST)) {\r\n if (initExpr) {\r\n initExpr = this.module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) == ExpressionId.Const) {\r\n let local = new Local(program, name, -1, type);\r\n switch (getExpressionType(initExpr)) {\r\n case NativeType.I32: {\r\n local = local.withConstantIntegerValue(\r\n i64_new(\r\n getConstValueI32(initExpr),\r\n 0\r\n )\r\n );\r\n break;\r\n }\r\n case NativeType.I64: {\r\n local = local.withConstantIntegerValue(\r\n i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n )\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n local = local.withConstantFloatValue(getConstValueF32(initExpr));\r\n break;\r\n }\r\n case NativeType.F64: {\r\n local = local.withConstantFloatValue(getConstValueF64(initExpr));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n // Create a virtual local that doesn't actually exist in WebAssembly\r\n let scopedLocals = currentFunction.flow.scopedLocals;\r\n if (!scopedLocals) currentFunction.flow.scopedLocals = scopedLocals = new Map();\r\n else if (scopedLocals.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n scopedLocals.set(name, local);\r\n isInlined = true;\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n declaration.range\r\n );\r\n }\r\n }\r\n if (!isInlined) {\r\n let local: Local;\r\n if (\r\n declaration.isAny(CommonFlags.LET | CommonFlags.CONST) ||\r\n flow.is(FlowFlags.INLINE_CONTEXT)\r\n ) { // here: not top-level\r\n local = flow.addScopedLocal(type, name, false, declaration); // reports\r\n } else {\r\n local = currentFunction.addLocal(type, name, declaration); // reports\r\n }\r\n if (initExpr) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, initExpr));\r\n if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, !flow.canOverflow(initExpr, type));\r\n }\r\n } else if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, true); // zero\r\n }\r\n }\r\n }\r\n return initializers.length // we can unwrap these here because the\r\n ? initializers.length == 1 // source didn't tell us exactly what to do\r\n ? initializers[0]\r\n : this.module.createBlock(null, initializers, NativeType.None)\r\n : 0;\r\n }\r\n\r\n compileVoidStatement(statement: VoidStatement): ExpressionRef {\r\n return this.compileExpression(statement.expression, Type.void, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n compileWhileStatement(statement: WhileStatement): ExpressionRef {\r\n var module = this.module;\r\n\r\n // The condition does not yet initialize a branch\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary loops if the condition is constant\r\n let condExprPrecomp = module.precomputeExpression(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n if (!getConstValueI32(condExprPrecomp)) return module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Statements initiate a new branch with its own break context\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n var breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysTrue = false; // TODO\r\n var 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 // monkey-patch for converting built-in floats to f32 implicitly\r\n if (!(element.hasDecorator(DecoratorFlags.BUILTIN) && contextualType == Type.f32)) {\r\n return this.module.createF64((element).constantFloatValue);\r\n }\r\n // otherwise fall-through: basically precomputes f32.demote/f64 of NaN / Infinity\r\n this.currentType = Type.f32;\r\n }\r\n case TypeKind.F32: {\r\n return this.module.createF32((element).constantFloatValue);\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n\r\n compileExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n this.currentType = contextualType;\r\n\r\n var expr: ExpressionRef;\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n expr = this.compileAssertionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.BINARY: {\r\n expr = this.compileBinaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.CALL: {\r\n expr = this.compileCallExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.COMMA: {\r\n expr = this.compileCommaExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n expr = this.compileElementAccessExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.FUNCTION: {\r\n expr = this.compileFunctionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.FALSE:\r\n case NodeKind.NULL:\r\n case NodeKind.THIS:\r\n case NodeKind.SUPER:\r\n case NodeKind.TRUE: {\r\n expr = this.compileIdentifierExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.INSTANCEOF: {\r\n expr = this.compileInstanceOfExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.LITERAL: {\r\n expr = this.compileLiteralExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.NEW: {\r\n expr = this.compileNewExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PARENTHESIZED: {\r\n expr = this.compileParenthesizedExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n expr = this.compilePropertyAccessExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.TERNARY: {\r\n expr = this.compileTernaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.UNARYPOSTFIX: {\r\n expr = this.compileUnaryPostfixExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.UNARYPREFIX: {\r\n expr = this.compileUnaryPrefixExpression(expression, contextualType);\r\n break;\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n\r\n var currentType = this.currentType;\r\n if (conversionKind != ConversionKind.NONE && currentType != contextualType) {\r\n expr = this.convertExpression(expr, currentType, contextualType, conversionKind, wrapMode, expression);\r\n this.currentType = contextualType;\r\n } else if (wrapMode == WrapMode.WRAP) {\r\n expr = this.ensureSmallIntegerWrap(expr, currentType);\r\n }\r\n\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(\r\n expression: Expression,\r\n contextualType: Type,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.compileExpression(\r\n expression,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n wrapMode\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.module.precomputeExpression(\r\n this.compileExpression(expression, contextualType, conversionKind, wrapMode)\r\n );\r\n }\r\n\r\n convertExpression(\r\n expr: ExpressionRef,\r\n fromType: Type,\r\n toType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n assert(conversionKind != ConversionKind.NONE);\r\n var module = this.module;\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.VOID) {\r\n assert(toType.kind != TypeKind.VOID); // convertExpression should not be called with void -> void\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) return module.createDrop(expr);\r\n\r\n if (!fromType.isAssignableTo(toType)) {\r\n if (conversionKind == ConversionKind.IMPLICIT) {\r\n this.error(\r\n DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (fromType.is(TypeFlags.FLOAT)) {\r\n\r\n // float to float\r\n if (toType.is(TypeFlags.FLOAT)) {\r\n if (fromType.kind == TypeKind.F32) {\r\n\r\n // f32 to f64\r\n if (toType.kind == TypeKind.F64) {\r\n expr = module.createUnary(UnaryOp.PromoteF32, expr);\r\n }\r\n\r\n // otherwise f32 to f32\r\n\r\n // f64 to f32\r\n } else if (toType.kind == TypeKind.F32) {\r\n expr = module.createUnary(UnaryOp.DemoteF64, expr);\r\n }\r\n\r\n // otherwise f64 to f64\r\n\r\n // float to int\r\n } else if (toType.is(TypeFlags.INTEGER)) {\r\n\r\n // f32 to int\r\n if (fromType.kind == TypeKind.F32) {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU32, expr);\r\n }\r\n }\r\n\r\n // f64 to int\r\n } else {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU32, expr);\r\n }\r\n }\r\n }\r\n\r\n // float to void\r\n } else {\r\n assert(toType.flags == TypeFlags.NONE, \"void type expected\");\r\n expr = module.createDrop(expr);\r\n }\r\n\r\n // int to float\r\n } else if (fromType.is(TypeFlags.INTEGER) && toType.is(TypeFlags.FLOAT)) {\r\n\r\n // int to f32\r\n if (toType.kind == TypeKind.F32) {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF32\r\n : UnaryOp.ConvertU64ToF32,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF32\r\n : UnaryOp.ConvertU32ToF32,\r\n expr\r\n );\r\n }\r\n\r\n // int to f64\r\n } else {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF64\r\n : UnaryOp.ConvertU64ToF64,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF64\r\n : UnaryOp.ConvertU32ToF64,\r\n expr\r\n );\r\n }\r\n }\r\n\r\n // int to int\r\n } else {\r\n // i64 to ...\r\n if (fromType.is(TypeFlags.LONG)) {\r\n\r\n // i64 to i32 or smaller\r\n if (!toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits\r\n }\r\n\r\n // i32 or smaller to i64\r\n } else if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n 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.currentElementExpression) { // indexed access\r\n let isUnchecked = currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, (target).internalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (target).internalName\r\n );\r\n }\r\n return this.module.createUnreachable();\r\n }\r\n assert(indexedSet.signature.parameterTypes.length == 2); // parser must guarantee this\r\n targetType = indexedSet.signature.parameterTypes[1]; // 2nd parameter is the element\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n // compile the value and do the assignment\r\n assert(targetType != Type.void);\r\n var valueExpr = this.compileExpression(valueExpression, targetType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n return this.compileAssignmentWithValue(\r\n expression,\r\n valueExpr,\r\n contextualType != Type.void\r\n );\r\n }\r\n\r\n compileAssignmentWithValue(\r\n expression: Expression,\r\n valueWithCorrectType: ExpressionRef,\r\n tee: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var target = this.resolver.resolveExpression(expression, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = this.currentFunction.flow;\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped((target).index, !flow.canOverflow(valueWithCorrectType, type));\r\n }\r\n return tee\r\n ? module.createTeeLocal((target).index, valueWithCorrectType)\r\n : module.createSetLocal((target).index, valueWithCorrectType);\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) return module.createUnreachable();\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range,\r\n target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type); // guaranteed\r\n if (tee) {\r\n let nativeType = type.toNativeType();\r\n let internalName = target.internalName;\r\n return module.createBlock(null, [ // emulated teeGlobal\r\n module.createSetGlobal(internalName, valueWithCorrectType),\r\n module.createGetGlobal(internalName, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createSetGlobal(target.internalName, valueWithCorrectType);\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n const declaration = (target).declaration;\r\n if (\r\n (target).is(CommonFlags.READONLY) &&\r\n !(\r\n this.currentFunction.is(CommonFlags.CONSTRUCTOR) ||\r\n declaration == null ||\r\n declaration.initializer != null\r\n )\r\n ) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (target).internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let type = (target).type;\r\n this.currentType = tee ? type : Type.void;\r\n let nativeType = type.toNativeType();\r\n if (type.kind == TypeKind.BOOL) {\r\n // make sure bools are wrapped (usually are) when storing as 8 bits\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type);\r\n }\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let flow = currentFunction.flow;\r\n let tempLocal = currentFunction.getAndFreeTempLocal(\r\n type,\r\n !flow.canOverflow(valueWithCorrectType, type)\r\n );\r\n let tempLocalIndex = tempLocal.index;\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n 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.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n return this.makeCallDirect(setterInstance, [ thisExpr, valueWithCorrectType ]);\r\n } else {\r\n return this.makeCallDirect(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n\r\n // otherwise call the setter first, then the getter\r\n let getterPrototype = (target).getterPrototype;\r\n assert(getterPrototype != null); // must have one if there is a setter\r\n let getterInstance = this.resolver.resolveFunction(getterPrototype, null);\r\n if (!getterInstance) return module.createUnreachable();\r\n let returnType = getterInstance.signature.returnType;\r\n let nativeReturnType = returnType.toNativeType();\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(returnType, false);\r\n let tempLocalIndex = tempLocal.index;\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ // set and remember the target\r\n module.createTeeLocal(tempLocalIndex, thisExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [ // get from remembered target\r\n module.createGetLocal(tempLocalIndex, nativeReturnType)\r\n ])\r\n ], nativeReturnType);\r\n } else {\r\n // note that this must be performed here because `resolved` is shared\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCallDirect(getterInstance)\r\n ], nativeReturnType);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, target.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.resolver.currentElementExpression;\r\n if (elementExpression) {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, target.internalName\r\n );\r\n this.currentType = tee ? indexedGet.signature.returnType : Type.void;\r\n return module.createUnreachable();\r\n }\r\n let targetType = (target).type;\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let elementExpr = this.compileExpression(\r\n elementExpression,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let tempLocalTarget = currentFunction.getTempLocal(targetType, false);\r\n let tempLocalElement = currentFunction.getAndFreeTempLocal(this.currentType, false);\r\n let returnType = indexedGet.signature.returnType;\r\n this.currentFunction.freeTempLocal(tempLocalTarget);\r\n return module.createBlock(null, [\r\n this.makeCallDirect(indexedSet, [\r\n module.createTeeLocal(tempLocalTarget.index, thisExpr),\r\n module.createTeeLocal(tempLocalElement.index, elementExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(indexedGet, [\r\n module.createGetLocal(tempLocalTarget.index, tempLocalTarget.type.toNativeType()),\r\n module.createGetLocal(tempLocalElement.index, tempLocalElement.type.toNativeType())\r\n ])\r\n ], returnType.toNativeType());\r\n } else {\r\n return this.makeCallDirect(indexedSet, [\r\n thisExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n }\r\n // fall-through\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var target = this.resolver.resolveExpression(expression.expression, currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n var signature: Signature | null;\r\n var indexArg: ExpressionRef;\r\n switch (target.kind) {\r\n\r\n // direct call: concrete function\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let prototype = target;\r\n let typeArguments = expression.typeArguments;\r\n\r\n // builtins handle present respectively omitted type arguments on their own\r\n if (prototype.hasDecorator(DecoratorFlags.BUILTIN)) {\r\n return this.compileCallExpressionBuiltin(prototype, expression, contextualType);\r\n }\r\n\r\n let instance: Function | null = null;\r\n\r\n // resolve generic call if type arguments have been provided\r\n if (typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.expression.range, prototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n instance = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n\r\n // infer generic call if type arguments have been omitted\r\n } else if (prototype.is(CommonFlags.GENERIC)) {\r\n let inferredTypes = new Map();\r\n let typeParameters = assert(prototype.declaration.typeParameters);\r\n let numTypeParameters = typeParameters.length;\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n inferredTypes.set(typeParameters[i].name.text, null);\r\n }\r\n // let numInferred = 0;\r\n let parameterTypes = prototype.declaration.signature.parameters;\r\n let numParameterTypes = parameterTypes.length;\r\n let argumentExpressions = expression.arguments;\r\n let numArguments = argumentExpressions.length;\r\n let argumentExprs = new Array(numArguments);\r\n for (let i = 0; i < numParameterTypes; ++i) {\r\n let typeNode = parameterTypes[i].type;\r\n let name = typeNode.kind == NodeKind.TYPE ? (typeNode).name.text : null;\r\n let argumentExpression = i < numArguments\r\n ? argumentExpressions[i]\r\n : prototype.declaration.signature.parameters[i].initializer;\r\n if (!argumentExpression) { // missing initializer -> too few arguments\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n expression.range, numParameterTypes.toString(10), numArguments.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (name !== null && inferredTypes.has(name)) {\r\n let inferredType = inferredTypes.get(name);\r\n if (inferredType) {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, inferredType, WrapMode.NONE);\r\n let commonType: Type | null;\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, true))) {\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, false))) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n parameterTypes[i].type.range, this.currentType.toString(), inferredType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n inferredType = commonType;\r\n } else {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, Type.i32, WrapMode.NONE);\r\n inferredType = this.currentType;\r\n // ++numInferred;\r\n }\r\n inferredTypes.set(name, inferredType);\r\n } else {\r\n let concreteType = this.resolver.resolveType(\r\n parameterTypes[i].type,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!concreteType) return module.createUnreachable();\r\n argumentExprs[i] = this.compileExpression(\r\n argumentExpression,\r\n concreteType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n let resolvedTypeArguments = new Array(numTypeParameters);\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n let inferredType = assert(inferredTypes.get(typeParameters[i].name.text)); // TODO\r\n resolvedTypeArguments[i] = inferredType;\r\n }\r\n instance = this.resolver.resolveFunction(\r\n prototype,\r\n resolvedTypeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n return this.makeCallDirect(instance, argumentExprs);\r\n // TODO: this skips inlining because inlining requires compiling its temporary locals in\r\n // the scope of the inlined flow. might need another mechanism to lock temp. locals early,\r\n // so inlining can be performed in `makeCallDirect` instead?\r\n\r\n // otherwise resolve the non-generic call as usual\r\n } else {\r\n instance = this.resolver.resolveFunction(\r\n prototype,\r\n null,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n }\r\n if (!instance) return this.module.createUnreachable();\r\n\r\n // compile 'this' expression if an instance method\r\n let thisExpr: ExpressionRef = 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n thisExpr = this.compileExpressionRetainType(\r\n assert(this.resolver.currentThisExpression),\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n return this.compileCallDirect(\r\n instance,\r\n expression.arguments,\r\n expression,\r\n thisExpr,\r\n instance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n // indirect call: index argument with signature (non-generic, can't be inlined)\r\n case ElementKind.LOCAL: {\r\n if (signature = (target).type.signatureReference) {\r\n 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.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n indexArg = module.createLoad(\r\n 4,\r\n false,\r\n thisExpr,\r\n NativeType.I32,\r\n (target).memoryOffset\r\n );\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (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 if (this.currentInlineFunctions.includes(instance)) {\r\n this.warning(\r\n DiagnosticCode.Function_0_cannot_be_inlined_into_itself,\r\n reportNode.range, instance.internalName\r\n );\r\n } else {\r\n this.currentInlineFunctions.push(instance);\r\n let expr = this.compileCallInlineUnchecked(instance, argumentExpressions, reportNode, thisArg);\r\n this.currentInlineFunctions.pop();\r\n return expr;\r\n }\r\n }\r\n\r\n // Otherwise compile to just a call\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallDirect(instance, operands);\r\n }\r\n\r\n // Depends on being pre-checked in compileCallDirect\r\n private compileCallInlineUnchecked(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n var declaration = instance.prototype.declaration;\r\n\r\n // Create an empty child flow with its own scope and mark it for inlining\r\n var previousFlow = currentFunction.flow;\r\n var returnLabel = instance.internalName + \"|inlined.\" + (instance.nextInlineId++).toString(10);\r\n var returnType = instance.signature.returnType;\r\n var flow = Flow.create(currentFunction);\r\n flow.set(FlowFlags.INLINE_CONTEXT);\r\n flow.returnLabel = returnLabel;\r\n flow.returnType = returnType;\r\n flow.contextualTypeArguments = instance.contextualTypeArguments;\r\n\r\n // Convert provided call arguments to temporary locals. It is important that these are compiled\r\n // here, with their respective locals being blocked. There is no 'makeCallInline'.\r\n var body = [];\r\n if (thisArg) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n if (getExpressionId(thisArg) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(thisArg),\r\n (parent).type,\r\n \"this\"\r\n );\r\n } else {\r\n let thisLocal = flow.addScopedLocal((parent).type, \"this\", false);\r\n body.push(\r\n module.createSetLocal(thisLocal.index, thisArg)\r\n );\r\n }\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i) {\r\n let paramExpr = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(paramExpr) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(paramExpr),\r\n parameterTypes[i],\r\n signature.getParameterName(i)\r\n );\r\n // inherits wrap status\r\n } else {\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(paramExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, paramExpr)\r\n );\r\n }\r\n }\r\n\r\n // Compile optional parameter initializers in the scope of the inlined flow\r\n currentFunction.flow = flow;\r\n var numParameters = signature.parameterTypes.length;\r\n for (let i = numArguments; i < numParameters; ++i) {\r\n let initExpr = this.compileExpression(\r\n assert(declaration.signature.parameters[i].initializer),\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(initExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, initExpr)\r\n );\r\n }\r\n\r\n // Compile the called function's body in the scope of the inlined flow\r\n var bodyStatement = assert(declaration.body);\r\n if (bodyStatement.kind == NodeKind.BLOCK) {\r\n let statements = (bodyStatement).statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let stmt = this.compileStatement(statements[i]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n body.push(stmt);\r\n if (flow.isAny(FlowFlags.ANY_TERMINATING)) break;\r\n }\r\n }\r\n } else {\r\n body.push(this.compileStatement(bodyStatement));\r\n }\r\n\r\n // Free any new scoped locals and reset to the original flow\r\n var scopedLocals = flow.scopedLocals;\r\n if (scopedLocals) {\r\n for (let scopedLocal of scopedLocals.values()) {\r\n if (scopedLocal.is(CommonFlags.SCOPED)) { // otherwise an alias\r\n currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n }\r\n flow.scopedLocals = null;\r\n }\r\n flow.finalize();\r\n this.currentFunction.flow = previousFlow;\r\n this.currentType = returnType;\r\n\r\n // Check that all branches are terminated\r\n if (returnType != Type.void && !flow.isAny(FlowFlags.ANY_TERMINATING)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n return module.createBlock(returnLabel, body, returnType.toNativeType());\r\n }\r\n\r\n /** Gets the trampoline for the specified function. */\r\n ensureTrampoline(original: Function): Function {\r\n // A trampoline is a function that takes a fixed amount of operands with some of them possibly\r\n // being zeroed. It takes one additional argument denoting the number of actual operands\r\n // provided to the call, and takes appropriate steps to initialize zeroed operands to their\r\n // default values using the optional parameter initializers of the original function. Doing so\r\n // allows calls to functions with optional parameters to circumvent the trampoline when all\r\n // parameters are provided as a fast route, respectively setting up omitted operands in a proper\r\n // context otherwise.\r\n var trampoline = original.trampoline;\r\n if (trampoline) return trampoline;\r\n\r\n var originalSignature = original.signature;\r\n var originalName = original.internalName;\r\n var originalParameterTypes = originalSignature.parameterTypes;\r\n var originalParameterDeclarations = original.prototype.declaration.signature.parameters;\r\n var commonReturnType = originalSignature.returnType;\r\n var commonThisType = originalSignature.thisType;\r\n var isInstance = original.is(CommonFlags.INSTANCE);\r\n\r\n // arguments excl. `this`, operands incl. `this`\r\n var minArguments = originalSignature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = originalParameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (isInstance) {\r\n ++minOperands;\r\n ++maxOperands;\r\n }\r\n var numOptional = assert(maxOperands - minOperands);\r\n\r\n var forwardedOperands = new Array(minOperands);\r\n var operandIndex = 0;\r\n\r\n // forward `this` if applicable\r\n var module = this.module;\r\n if (isInstance) {\r\n forwardedOperands[0] = module.createGetLocal(0, this.options.nativeSizeType);\r\n operandIndex = 1;\r\n }\r\n\r\n // forward required arguments\r\n for (let i = 0; i < minArguments; ++i, ++operandIndex) {\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, originalParameterTypes[i].toNativeType());\r\n }\r\n assert(operandIndex == minOperands);\r\n\r\n // create the trampoline element\r\n var trampolineSignature = new Signature(originalParameterTypes, commonReturnType, commonThisType);\r\n var trampolineName = originalName + \"|trampoline\";\r\n trampolineSignature.requiredParameters = maxArguments;\r\n trampoline = new Function(\r\n original.prototype,\r\n trampolineName,\r\n trampolineSignature,\r\n original.parent,\r\n original.contextualTypeArguments\r\n );\r\n trampoline.set(original.flags | CommonFlags.TRAMPOLINE | CommonFlags.COMPILED);\r\n original.trampoline = trampoline;\r\n\r\n // compile initializers of omitted arguments in scope of the trampoline function\r\n // this is necessary because initializers might need additional locals and a proper this context\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = trampoline;\r\n\r\n // create a br_table switching over the number of optional parameters provided\r\n var numNames = numOptional + 1; // incl. outer block\r\n var names = new Array(numNames);\r\n var ofN = \"of\" + numOptional.toString(10);\r\n for (let i = 0; i < numNames; ++i) {\r\n let label = i.toString(10) + ofN;\r\n names[i] = label;\r\n }\r\n var body = module.createBlock(names[0], [\r\n module.createBlock(\"outOfRange\", [\r\n module.createSwitch(names, \"outOfRange\",\r\n // condition is number of provided optional arguments, so subtract required arguments\r\n minArguments\r\n ? module.createBinary(\r\n BinaryOp.SubI32,\r\n module.createGetGlobal(\"~argc\", NativeType.I32),\r\n module.createI32(minArguments)\r\n )\r\n : module.createGetGlobal(\"~argc\", NativeType.I32)\r\n )\r\n ]),\r\n module.createUnreachable()\r\n ]);\r\n for (let i = 0; i < numOptional; ++i, ++operandIndex) {\r\n let type = originalParameterTypes[minArguments + i];\r\n let declaration = originalParameterDeclarations[minArguments + i];\r\n let initializer = declaration.initializer;\r\n let initExpr: ExpressionRef;\r\n if (initializer) {\r\n initExpr = module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n )\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Optional_parameter_must_have_an_initializer,\r\n declaration.range\r\n );\r\n initExpr = module.createUnreachable();\r\n }\r\n body = module.createBlock(names[i + 1], [\r\n body,\r\n initExpr,\r\n ]);\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, type.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n assert(operandIndex == maxOperands);\r\n\r\n var funcRef = module.addFunction(\r\n trampolineName,\r\n this.ensureFunctionType(\r\n trampolineSignature.parameterTypes,\r\n trampolineSignature.returnType,\r\n trampolineSignature.thisType\r\n ),\r\n typesToNativeTypes(trampoline.additionalLocals),\r\n module.createBlock(null, [\r\n body,\r\n module.createCall(\r\n originalName,\r\n forwardedOperands,\r\n commonReturnType.toNativeType()\r\n )\r\n ], commonReturnType.toNativeType())\r\n );\r\n trampoline.finalize(module, funcRef);\r\n return trampoline;\r\n }\r\n\r\n /** Makes sure that the argument count helper global is present and returns its name. */\r\n private ensureArgcVar(): string {\r\n var internalName = \"~argc\";\r\n if (!this.argcVar) {\r\n let module = this.module;\r\n this.argcVar = module.addGlobal(\r\n internalName,\r\n NativeType.I32,\r\n true,\r\n module.createI32(0)\r\n );\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Makes sure that the argument count helper setter is present and returns its name. */\r\n private ensureArgcSet(): string {\r\n var internalName = \"~setargc\";\r\n if (!this.argcSet) {\r\n let module = this.module;\r\n this.argcSet = module.addFunction(internalName,\r\n this.ensureFunctionType([ Type.u32 ], Type.void),\r\n null,\r\n module.createSetGlobal(this.ensureArgcVar(),\r\n module.createGetLocal(0, NativeType.I32)\r\n )\r\n );\r\n module.addFunctionExport(internalName, \"_setargc\");\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Creates a direct call to the specified function. */\r\n makeCallDirect(\r\n instance: Function,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = instance.signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = instance.signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n var module = this.module;\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n var returnType = instance.signature.returnType;\r\n var isCallImport = instance.is(CommonFlags.MODULE_IMPORT);\r\n\r\n // fill up omitted arguments with their initializers, if constant, otherwise with zeroes.\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = instance.signature.parameterTypes;\r\n let parameterNodes = instance.prototype.declaration.signature.parameters;\r\n let allOptionalsAreConstant = true;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n let initializer = parameterNodes[i].initializer;\r\n if (!(initializer !== null && nodeIsConstantValue(initializer.kind))) {\r\n allOptionalsAreConstant = false;\r\n break;\r\n }\r\n }\r\n if (allOptionalsAreConstant) { // inline into the call\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(\r\n this.compileExpression(\r\n parameterNodes[i].initializer,\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n )\r\n );\r\n }\r\n } else { // otherwise fill up with zeroes and call the trampoline\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n if (!isCallImport) {\r\n let original = instance;\r\n instance = this.ensureTrampoline(instance);\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n instance.flow.flags = original.flow.flags;\r\n this.program.instancesLookup.set(instance.internalName, instance); // so canOverflow can find it\r\n let nativeReturnType = returnType.toNativeType();\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), module.createI32(numArguments)),\r\n module.createCall(instance.internalName, operands, nativeReturnType)\r\n ], nativeReturnType);\r\n }\r\n }\r\n }\r\n\r\n // otherwise just call through\r\n this.currentType = returnType;\r\n if (isCallImport) return module.createCallImport(instance.internalName, operands, returnType.toNativeType());\r\n var ret = module.createCall(instance.internalName, operands, returnType.toNativeType());\r\n return ret;\r\n }\r\n\r\n /** Compiles an indirect call using an index argument and a signature. */\r\n compileCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallIndirect(signature, indexArg, operands);\r\n }\r\n\r\n /** Creates an indirect call to the function at `indexArg` in the function table. */\r\n makeCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (signature.thisType) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n\r\n // fill up omitted arguments with zeroes\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n }\r\n\r\n var returnType = signature.returnType;\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), // might still be calling a trampoline\r\n module.createI32(numArguments)\r\n ),\r\n module.createCallIndirect(indexArg, operands, signature.toSignatureString())\r\n ], returnType.toNativeType()); // not necessarily wrapped\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var numExpressions = expressions.length;\r\n var exprs = new Array(numExpressions--);\r\n for (let i = 0; i < numExpressions; ++i) {\r\n exprs[i] = this.compileExpression(\r\n expressions[i],\r\n Type.void, // drop all\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n exprs[numExpressions] = this.compileExpression(\r\n expressions[numExpressions],\r\n contextualType, // except last\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.module.createBlock(null, exprs, this.currentType.toNativeType());\r\n }\r\n\r\n compileElementAccessExpression(expression: ElementAccessExpression, contextualType: Type): ExpressionRef {\r\n var target = this.resolver.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n switch (target.kind) {\r\n case ElementKind.CLASS: {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n let thisArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.compileCallDirect(indexedGet, [\r\n expression.elementExpression\r\n ], expression, thisArg);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var name = declaration.name;\r\n var simpleName = (name.text.length\r\n ? name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var currentFunction = this.currentFunction;\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n currentFunction.internalName + INNER_DELIMITER + simpleName,\r\n declaration,\r\n null,\r\n DecoratorFlags.NONE\r\n );\r\n var flow = currentFunction.flow;\r\n var instance = this.compileFunctionUsingTypeArguments(\r\n prototype,\r\n [],\r\n flow.contextualTypeArguments,\r\n flow,\r\n declaration\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = instance.signature.type; // TODO: get cached type?\r\n // NOTE that, in order to make this work in every case, the function must be represented by a\r\n // value, so we add it and rely on the optimizer to figure out where it can be called directly.\r\n var index = this.ensureFunctionTableEntry(instance); // reports\r\n return index < 0\r\n ? this.module.createUnreachable()\r\n : this.module.createI32(index);\r\n }\r\n\r\n /**\r\n * Compiles an identifier in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compileIdentifierExpression(\r\n expression: IdentifierExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // check special keywords first\r\n switch (expression.kind) {\r\n case NodeKind.NULL: {\r\n let options = this.options;\r\n if (!contextualType.classReference) {\r\n this.currentType = options.usizeType;\r\n }\r\n return options.isWasm64\r\n ? module.createI64(0)\r\n : module.createI32(0);\r\n }\r\n case NodeKind.TRUE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(1);\r\n }\r\n case NodeKind.FALSE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\r\n case NodeKind.THIS: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n this.currentType = scopedThis.type;\r\n return module.createGetLocal(scopedThis.index, scopedThis.type.toNativeType());\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisType = (parent).type;\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n if (!flow.is(FlowFlags.ALLOCATES)) {\r\n flow.set(FlowFlags.ALLOCATES);\r\n // must be conditional because `this` could have been provided by a derived class\r\n this.currentType = thisType;\r\n return module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, expression)\r\n );\r\n }\r\n }\r\n this.currentType = thisType;\r\n return module.createGetLocal(0, thisType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n case NodeKind.SUPER: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n let scopedThisClass = assert(scopedThis.type.classReference);\r\n let base = scopedThisClass.base;\r\n if (base) {\r\n this.currentType = base.type;\r\n return module.createGetLocal(scopedThis.index, base.type.toNativeType());\r\n }\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let base = (parent).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return module.createGetLocal(0, superType.toNativeType());\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var target = this.resolver.resolveIdentifier( // reports\r\n expression,\r\n this.currentEnum || currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let localType = (target).type;\r\n assert(localType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n let localIndex = (target).index;\r\n assert(localIndex >= 0);\r\n this.currentType = localType;\r\n return this.module.createGetLocal(localIndex, localType.toNativeType());\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return this.module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum\r\n if (!target.is(CommonFlags.COMPILED)) {\r\n this.error(\r\n DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,\r\n expression.range\r\n );\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.module.createI32((target).constantValue);\r\n }\r\n return this.module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let instance = this.resolver.resolveFunction(\r\n target,\r\n null,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!(instance && this.compileFunction(instance))) return module.createUnreachable();\r\n let index = this.ensureFunctionTableEntry(instance);\r\n this.currentType = instance.signature.type;\r\n return this.module.createI32(index);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileInstanceOfExpression(\r\n expression: InstanceOfExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n // NOTE that this differs from TypeScript in that the rhs is a type, not an expression. at the\r\n // time of implementation, this seemed more useful because dynamic rhs expressions are not\r\n // possible in AS anyway.\r\n var expr = this.compileExpressionRetainType(expression.expression, this.options.usizeType, WrapMode.NONE);\r\n var type = this.currentType;\r\n var isType = this.resolver.resolveType(expression.isType);\r\n this.currentType = Type.bool;\r\n if (!isType) return module.createUnreachable();\r\n return type.is(TypeFlags.NULLABLE) && !isType.is(TypeFlags.NULLABLE)\r\n ? type.nonNullableType.isAssignableTo(isType)\r\n ? module.createBinary( // not precomputeable\r\n type.is(TypeFlags.LONG)\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n expr,\r\n type.toNativeZero(module)\r\n )\r\n : module.createI32(0)\r\n : module.createI32(type.isAssignableTo(isType, true) ? 1 : 0);\r\n }\r\n\r\n compileLiteralExpression(\r\n expression: LiteralExpression,\r\n contextualType: Type,\r\n implicitNegate: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n switch (expression.literalKind) {\r\n case LiteralKind.ARRAY: {\r\n assert(!implicitNegate);\r\n let classType = contextualType.classReference;\r\n if (\r\n classType &&\r\n classType.prototype == this.program.arrayPrototype\r\n ) {\r\n return this.compileArrayLiteral(\r\n assert(classType.typeArguments)[0],\r\n (expression).elementExpressions,\r\n 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 = module.precomputeExpression(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 compileAllocate(this, classReference, expression)\r\n );\r\n\r\n // once all field values have been set, return 'this'\r\n exprs[exprs.length - 1] = module.createGetLocal(tempLocal.index, this.options.nativeSizeType);\r\n\r\n return module.createBlock(null, exprs, this.options.nativeSizeType);\r\n }\r\n\r\n compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var currentFunction = this.currentFunction;\r\n\r\n // obtain the class being instantiated\r\n var target = this.resolver.resolveExpression( // reports\r\n expression.expression,\r\n currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n if (target.kind != ElementKind.CLASS_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature,\r\n expression.expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n var classPrototype = target;\r\n var classInstance: Class | null = null;\r\n var typeArguments = expression.typeArguments;\r\n var classReference: Class | null;\r\n if (\r\n !typeArguments &&\r\n (classReference = contextualType.classReference) !== null &&\r\n classReference.is(CommonFlags.GENERIC)\r\n ) {\r\n classInstance = this.resolver.resolveClass(\r\n classPrototype,\r\n classReference.typeArguments,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n } else {\r\n classInstance = this.resolver.resolveClassInclTypeArguments(\r\n classPrototype,\r\n typeArguments,\r\n currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n }\r\n if (!classInstance) return module.createUnreachable();\r\n\r\n var expr: ExpressionRef;\r\n\r\n // traverse to the top-most visible constructor\r\n var currentClassInstance: Class | null = classInstance;\r\n var constructorInstance: Function | null = null;\r\n do {\r\n constructorInstance = currentClassInstance.constructorInstance;\r\n if (constructorInstance) break; // TODO: check visibility\r\n } while (currentClassInstance = currentClassInstance.base);\r\n\r\n // if a constructor is present, call it with a zero `this`\r\n if (constructorInstance) {\r\n expr = this.compileCallDirect(constructorInstance, expression.arguments, expression,\r\n options.usizeType.toNativeZero(module)\r\n );\r\n\r\n // otherwise simply allocate a new instance and initialize its fields\r\n } else {\r\n expr = this.makeAllocate(classInstance, expression);\r\n }\r\n\r\n this.currentType = classInstance.type;\r\n return expr;\r\n }\r\n\r\n compileParenthesizedExpression(\r\n expression: ParenthesizedExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n // does not change types, just order\r\n return this.compileExpression(\r\n expression.expression,\r\n contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n /**\r\n * Compiles a property access in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compilePropertyAccessExpression(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n var target = this.resolver.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: { // static property\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // enum value\r\n let parent = (target).parent;\r\n assert(parent !== null && parent.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(parent)) {\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return module.createI32((target).constantValue);\r\n }\r\n return module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FIELD: { // instance field\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n assert((target).memoryOffset >= 0);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = (target).type;\r\n return module.createLoad(\r\n (target).type.byteSize,\r\n (target).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n thisExpr,\r\n (target).type.toNativeType(),\r\n (target).memoryOffset\r\n );\r\n }\r\n case ElementKind.PROPERTY: { // instance property (here: getter)\r\n 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.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], 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.module.precomputeExpression(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE)\r\n : this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n var ifThenFlow = parentFlow.fork();\r\n currentFunction.flow = ifThenFlow;\r\n var ifThenExpr = this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE);\r\n var ifThenType = this.currentType;\r\n ifThenFlow.free();\r\n\r\n var ifElseFlow = parentFlow.fork();\r\n currentFunction.flow = ifElseFlow;\r\n var ifElseExpr = this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n var ifElseType = this.currentType;\r\n currentFunction.flow = ifElseFlow.free();\r\n\r\n parentFlow.inheritMutual(ifThenFlow, ifElseFlow);\r\n\r\n var commonType = Type.commonCompatible(ifThenType, ifElseType, false);\r\n if (!commonType) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n expression.range, ifThenType.toString(), ifElseType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n ifThenExpr = this.convertExpression(\r\n ifThenExpr,\r\n ifThenType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifThen\r\n );\r\n ifElseExpr = this.convertExpression(\r\n ifElseExpr,\r\n ifElseType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifElse\r\n );\r\n this.currentType = commonType;\r\n return this.module.createIf(condExpr, ifThenExpr, ifElseExpr);\r\n }\r\n\r\n compileUnaryPostfixExpression(expression: UnaryPostfixExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // make a getter for the expression (also obtains the type)\r\n var getValue = this.compileExpression( // reports\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n // shortcut if compiling the getter already failed\r\n if (getExpressionId(getValue) == ExpressionId.Unreachable) return getValue;\r\n var currentType = this.currentType;\r\n\r\n var op: BinaryOp;\r\n var nativeType: NativeType;\r\n var nativeOne: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS_PLUS: {\r\n\r\n // TODO: check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n op = BinaryOp.AddI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.AddI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.AddF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.AddF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n\r\n // TODO: check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n op = BinaryOp.SubI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.SubI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.SubF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.SubF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // simplify if dropped anyway\r\n if (contextualType == Type.void) {\r\n return this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n getValue,\r\n nativeOne\r\n ),\r\n false\r\n );\r\n }\r\n\r\n // otherwise use a temp local for the intermediate value (always possibly overflows)\r\n var tempLocal = currentFunction.getTempLocal(currentType, false);\r\n var setValue = this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n this.module.createGetLocal(tempLocal.index, nativeType),\r\n nativeOne\r\n ),\r\n false\r\n );\r\n this.currentType = assert(tempLocal).type;\r\n currentFunction.freeTempLocal(tempLocal);\r\n\r\n var localIndex = (tempLocal).index;\r\n return module.createBlock(null, [\r\n module.createSetLocal(localIndex, getValue),\r\n setValue,\r\n module.createGetLocal(localIndex, nativeType)\r\n ], nativeType); // result of 'x++' / 'x--' might overflow\r\n }\r\n\r\n compileUnaryPrefixExpression(\r\n expression: UnaryPrefixExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PLUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // nop\r\n break;\r\n }\r\n case Token.MINUS: {\r\n if (expression.operand.kind == NodeKind.LITERAL && (\r\n (expression.operand).literalKind == LiteralKind.INTEGER ||\r\n (expression.operand).literalKind == LiteralKind.FLOAT\r\n )) {\r\n // implicitly negate integer and float literals. also enables proper checking of literal ranges.\r\n expr = this.compileLiteralExpression(expression.operand, contextualType, true);\r\n // compileExpression normally does this:\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n break;\r\n }\r\n\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MINUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, module.createI32(0), expr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n this.currentType.toNativeZero(module),\r\n expr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, module.createI64(0), expr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createUnary(UnaryOp.NegF32, expr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createUnary(UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PLUS_PLUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_INC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_DEC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, expr, module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.EXCLAMATION: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n // allow '!' for references even without an overload\r\n }\r\n\r\n expr = this.makeIsFalseish(expr, this.currentType);\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.TILDE: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n } else {\r\n expr = this.convertExpression(\r\n expr,\r\n this.currentType, this.currentType.intType,\r\n ConversionKind.IMPLICIT, WrapMode.NONE,\r\n expression.operand\r\n );\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.XorI32, expr, module.createI32(-1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n expr,\r\n this.currentType.toNativeNegOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, expr, module.createI64(-1, -1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.TYPEOF: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.operand, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n /** Makes sure that a 32-bit integer value is wrapped to a valid value of the specified type. */\r\n ensureSmallIntegerWrap(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n var flow = this.currentFunction.flow;\r\n switch (type.kind) {\r\n case TypeKind.I8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI8ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(24)\r\n ),\r\n module.createI32(24)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI16ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(16)\r\n ),\r\n module.createI32(16)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'false' in a broader sense. */\r\n makeIsFalseish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return module.createUnary(UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createUnary(UnaryOp.EqzI64, expr);\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.EqF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.EqF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(1);\r\n }\r\n }\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'true' in a broader sense. */\r\n makeIsTrueish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return expr;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return type.size == 64\r\n ? module.createBinary(BinaryOp.NeI64, expr, module.createI64(0))\r\n : expr;\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.NeF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.NeF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(0);\r\n }\r\n }\r\n }\r\n\r\n /** Makes an allocation expression for an instance of the specified class. */\r\n makeAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n\r\n // allocate the necessary memory and tee the pointer to a temp. local for reuse\r\n var tempLocal = currentFunction.getTempLocal(classInstance.type, false);\r\n var initializers = new Array();\r\n initializers.push(\r\n module.createSetLocal(tempLocal.index,\r\n compileAllocate(this, classInstance, reportNode)\r\n )\r\n );\r\n\r\n // apply field initializers\r\n if (classInstance.members) {\r\n for (let member of classInstance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n let field = member;\r\n let fieldType = field.type;\r\n let nativeFieldType = fieldType.toNativeType();\r\n let fieldDeclaration = field.prototype.declaration;\r\n assert(!field.isAny(CommonFlags.CONST));\r\n if (fieldDeclaration.initializer) { // use initializer\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n this.compileExpression( // reports\r\n fieldDeclaration.initializer,\r\n fieldType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n ),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n } else { // initialize with zero\r\n // TODO: might be unnecessary if the ctor initializes the field\r\n let parameterIndex = (field.prototype.declaration).parameterIndex;\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n parameterIndex >= 0 // initialized via parameter\r\n ? module.createGetLocal(1 + parameterIndex, nativeFieldType)\r\n : fieldType.toNativeZero(module),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // return `this`\r\n initializers.push(\r\n module.createGetLocal(tempLocal.index, nativeSizeType)\r\n );\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = classInstance.type;\r\n return module.createBlock(null, initializers, nativeSizeType);\r\n }\r\n\r\n /** Makes a conditional allocation expression inside of the constructor of the specified class. */\r\n makeConditionalAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n // requires that `this` is the first local\r\n var module = this.module;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n this.currentType = classInstance.type;\r\n return module.createIf(\r\n nativeSizeType == NativeType.I64\r\n ? module.createBinary(\r\n BinaryOp.NeI64,\r\n module.createGetLocal(0, NativeType.I64),\r\n module.createI64(0)\r\n )\r\n : module.createGetLocal(0, NativeType.I32),\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createTeeLocal(0,\r\n this.makeAllocate(classInstance, reportNode)\r\n )\r\n );\r\n }\r\n\r\n /** Adds the debug location of the specified expression at the specified range to the source map. */\r\n addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n var currentFunction = this.currentFunction;\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n range.debugInfoRef = expr;\r\n currentFunction.debugLocations.push(range);\r\n }\r\n}\r\n\r\n// helpers\r\n\r\nfunction mangleImportName(\r\n element: Element,\r\n declaration: DeclarationStatement,\r\n parentElement: Element | null = null\r\n): void {\r\n mangleImportName_moduleName = parentElement ? parentElement.simpleName : declaration.range.source.simplePath;\r\n mangleImportName_elementName = element.simpleName;\r\n\r\n if (!element.hasDecorator(DecoratorFlags.EXTERNAL)) return;\r\n\r\n var program = element.program;\r\n var decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n var args = decorator.arguments;\r\n if (args && args.length) {\r\n let arg = args[0];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length >= 2) {\r\n arg = args[1];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_moduleName = mangleImportName_elementName;\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length > 2) {\r\n program.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"2\", args.length.toString()\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n decorator.range, \"1\", \"0\"\r\n );\r\n }\r\n}\r\n\r\nvar mangleImportName_moduleName: string;\r\nvar mangleImportName_elementName: string;\r\n","/**\r\n * A TypeScript parser for the AssemblyScript subset.\r\n * @module parser\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n LIBRARY_PREFIX,\r\n PATH_DELIMITER\r\n} from \"./common\";\r\n\r\nimport {\r\n Program\r\n} from \"./program\";\r\n\r\nimport {\r\n Tokenizer,\r\n Token,\r\n Range,\r\n CommentHandler,\r\n IdentifierHandling\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n normalizePath\r\n} from \"./util\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n SourceKind,\r\n CommonTypeNode,\r\n TypeNode,\r\n SignatureNode,\r\n\r\n Expression,\r\n AssertionKind,\r\n CallExpression,\r\n ClassExpression,\r\n FunctionExpression,\r\n IdentifierExpression,\r\n StringLiteralExpression,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DecoratorNode,\r\n DoStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportImportStatement,\r\n ExportMember,\r\n ExportStatement,\r\n ExpressionStatement,\r\n ForStatement,\r\n FunctionDeclaration,\r\n IfStatement,\r\n ImportDeclaration,\r\n ImportStatement,\r\n NamespaceDeclaration,\r\n ParameterNode,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameterNode,\r\n VariableStatement,\r\n VariableDeclaration,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n mangleInternalPath,\r\n nodeIsCallable,\r\n nodeIsGenericCallable\r\n} from \"./ast\";\r\n\r\n/** Parser interface. */\r\nexport class Parser extends DiagnosticEmitter {\r\n\r\n /** Program being created. */\r\n program: Program;\r\n /** Source file names to be requested next. */\r\n backlog: string[] = new Array();\r\n /** Source file names already seen, that is processed or backlogged. */\r\n seenlog: Set = new Set();\r\n /** Source file names already completely processed. */\r\n donelog: Set = new Set();\r\n /** Optional handler to intercept comments while tokenizing. */\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new parser. */\r\n constructor() {\r\n super();\r\n this.program = new Program(this.diagnostics);\r\n }\r\n\r\n /** Parses a file and adds its definitions to the program. */\r\n parseFile(\r\n text: string,\r\n path: string,\r\n isEntry: bool\r\n ): void {\r\n var normalizedPath = normalizePath(path);\r\n var internalPath = mangleInternalPath(normalizedPath);\r\n\r\n // check if already processed\r\n if (this.donelog.has(internalPath)) return;\r\n this.donelog.add(internalPath); // do not parse again\r\n this.seenlog.add(internalPath); // do not request again\r\n\r\n // create the source element\r\n var source = new Source(\r\n normalizedPath,\r\n text,\r\n isEntry\r\n ? SourceKind.ENTRY\r\n : path.startsWith(LIBRARY_PREFIX) && path.indexOf(PATH_DELIMITER, LIBRARY_PREFIX.length) < 0\r\n ? SourceKind.LIBRARY\r\n : SourceKind.DEFAULT\r\n );\r\n var program = this.program;\r\n program.sources.push(source);\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, program.diagnostics);\r\n tn.onComment = this.onComment;\r\n source.tokenizer = tn;\r\n var statements = source.statements;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n let statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n statements.push(statement);\r\n }\r\n }\r\n tn.finish();\r\n }\r\n\r\n /** Parses a top-level statement. */\r\n parseTopLevelStatement(\r\n tn: Tokenizer,\r\n namespace: Node | null = null\r\n ): Statement | null {\r\n var flags = CommonFlags.NONE;\r\n var startPos: i32 = -1;\r\n\r\n // check decorators\r\n var decorators: DecoratorNode[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) {\r\n this.skipStatement(tn);\r\n continue;\r\n }\r\n if (!decorators) decorators = [];\r\n decorators.push(decorator);\r\n }\r\n\r\n // check modifiers\r\n var exportStart: i32 = 0;\r\n var exportEnd: i32 = 0;\r\n if (tn.skip(Token.EXPORT)) {\r\n if (tn.skip(Token.DEFAULT)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n flags |= CommonFlags.EXPORT;\r\n exportStart = tn.tokenPos;\r\n exportEnd = tn.pos;\r\n }\r\n\r\n var declareStart: i32 = 0;\r\n var declareEnd: i32 = 0;\r\n var contextIsAmbient = namespace != null && namespace.is(CommonFlags.AMBIENT);\r\n if (tn.skip(Token.DECLARE)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n if (contextIsAmbient) {\r\n this.error(\r\n DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n flags |= CommonFlags.DECLARE | CommonFlags.AMBIENT;\r\n } else if (contextIsAmbient) {\r\n flags |= CommonFlags.AMBIENT;\r\n }\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n\r\n // handle declarations\r\n var first = tn.peek();\r\n if (startPos < 0) startPos = tn.nextTokenPos;\r\n switch (first) {\r\n case Token.CONST: {\r\n tn.next();\r\n flags |= CommonFlags.CONST;\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n break;\r\n } else {\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n }\r\n break;\r\n }\r\n case Token.LET: flags |= CommonFlags.LET;\r\n case Token.VAR: {\r\n tn.next();\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ENUM: {\r\n tn.next();\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.FUNCTION: {\r\n tn.next();\r\n statement = this.parseFunction(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ABSTRACT: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (!tn.skip(Token.CLASS)) {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n break;\r\n } else {\r\n tn.discard(state);\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n // fall through\r\n }\r\n case Token.CLASS:\r\n case Token.INTERFACE: {\r\n tn.next();\r\n statement = this.parseClassOrInterface(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.NAMESPACE: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n case Token.IMPORT: {\r\n tn.next();\r\n flags |= CommonFlags.IMPORT;\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExportImport(tn, startPos);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n default: {\r\n\r\n // handle plain exports\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExport(tn, flags, startPos);\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (exportEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(exportStart, exportEnd), \"export\"\r\n ); // recoverable\r\n }\r\n if (declareEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(declareStart, declareEnd), \"declare\"\r\n ); // recoverable\r\n }\r\n if (!namespace) {\r\n statement = this.parseStatement(tn, true);\r\n } // TODO: else?\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorators[i].range\r\n );\r\n }\r\n }\r\n return statement;\r\n }\r\n\r\n /** Obtains the next file to parse. */\r\n nextFile(): string | null {\r\n var backlog = this.backlog;\r\n return backlog.length ? backlog.shift() : null;\r\n }\r\n\r\n /** Finishes parsing and returns the program. */\r\n finish(): Program {\r\n if (this.backlog.length) throw new Error(\"backlog is not empty\");\r\n this.backlog = [];\r\n this.seenlog.clear();\r\n this.donelog.clear();\r\n return this.program;\r\n }\r\n\r\n /** Parses a type. */\r\n parseType(\r\n tn: Tokenizer,\r\n acceptParenthesized: bool = true,\r\n suppressErrors: bool = false\r\n ): CommonTypeNode | null {\r\n\r\n // NOTE: this parses our limited subset\r\n var token = tn.next();\r\n var startPos = tn.tokenPos;\r\n\r\n var type: CommonTypeNode;\r\n\r\n // '(' ...\r\n if (token == Token.OPENPAREN) {\r\n\r\n // '(' FunctionSignature ')' '|' 'null'?\r\n let isNullableSignature = tn.skip(Token.OPENPAREN);\r\n // FunctionSignature?\r\n let signature = this.tryParseSignature(tn);\r\n if (signature) {\r\n if (isNullableSignature) {\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.BAR)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"|\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.NULL)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n signature.isNullable = true;\r\n }\r\n return signature;\r\n } else if (isNullableSignature || this.tryParseSignatureIsSignature) {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // Type (',' Type)* ')'\r\n if (acceptParenthesized) {\r\n let innerType = this.parseType(tn, false, suppressErrors);\r\n if (!innerType) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"}\"\r\n );\r\n }\r\n return null;\r\n }\r\n type = innerType;\r\n type.range.start = startPos;\r\n type.range.end = tn.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // 'void'\r\n } else if (token == Token.VOID) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"void\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'this'\r\n } else if (token == Token.THIS) {\r\n type = Node.createType(\r\n Node.createThisExpression(tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'true'\r\n } else if (token == Token.TRUE || token == Token.FALSE) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"bool\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // StringLiteral\r\n } else if (token == Token.STRINGLITERAL) {\r\n tn.readString();\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"string\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // Identifier\r\n } else if (token == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let parameters = new Array();\r\n let nullable = false;\r\n\r\n // Name\r\n if (tn.skip(Token.LESSTHAN)) {\r\n do {\r\n let parameter = this.parseType(tn, true, suppressErrors);\r\n if (!parameter) return null;\r\n parameters.push(parameter);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \">\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n // ... | null\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(identifier, parameters, nullable, tn.range(startPos, tn.pos));\r\n\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n // ... [][]\r\n while (tn.skip(Token.OPENBRACKET)) {\r\n let bracketStart = tn.tokenPos;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n }\r\n return null;\r\n }\r\n let bracketRange = tn.range(bracketStart, tn.pos);\r\n\r\n // ...[] | null\r\n let nullable = false;\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"Array\", bracketRange),\r\n [ type ],\r\n nullable,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (nullable) break;\r\n }\r\n\r\n return type;\r\n }\r\n\r\n // Indicates whether tryParseSignature determined that it is handling a Signature\r\n private tryParseSignatureIsSignature: bool = false;\r\n\r\n /** Parses a function signature, as used in type declarations. */\r\n tryParseSignature(\r\n tn: Tokenizer\r\n ): SignatureNode | null {\r\n\r\n // at '(': ('...'? Identifier '?'? ':' Type (',' '...'? Identifier '?'? ':' Type)* )? ')' '=>' Type\r\n\r\n var state = tn.mark();\r\n var startPos = tn.tokenPos;\r\n var parameters: ParameterNode[] | null = null;\r\n var thisType: TypeNode | null = null;\r\n var isSignature: bool = false;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n parameters = [];\r\n\r\n } else {\r\n isSignature = false; // not yet known\r\n do {\r\n let kind = ParameterKind.DEFAULT;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n kind = ParameterKind.REST;\r\n }\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let t = this.parseType(tn, false);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n this.tryParseSignatureIsSignature = true;\r\n return null;\r\n }\r\n thisType = t;\r\n } else {\r\n tn.reset(state);\r\n this.tryParseSignatureIsSignature = false;\r\n return null;\r\n }\r\n } else if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range(tn.tokenPos, tn.pos));\r\n if (tn.skip(Token.QUESTION)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n if (kind == ParameterKind.REST) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n tn.range()\r\n ); // recoverable\r\n } else {\r\n kind = ParameterKind.OPTIONAL;\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let type = this.parseType(tn); // not suppressing errors because known\r\n if (!type) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n let param = new ParameterNode();\r\n param.parameterKind = kind;\r\n param.name = name;\r\n param.type = type;\r\n if (!parameters) parameters = [ param ];\r\n else parameters.push(param);\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null;\r\n if (tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n returnType = this.parseType(tn);\r\n if (!returnType) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=>\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n this.tryParseSignatureIsSignature = true;\r\n return Node.createSignature(\r\n parameters || [],\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n\r\n // statements\r\n\r\n parseDecorator(\r\n tn: Tokenizer\r\n ): DecoratorNode | null {\r\n\r\n // at '@': Identifier ('.' Identifier)* '(' Arguments\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skipIdentifier()) {\r\n let name = tn.readIdentifier();\r\n let expression: Expression = Node.createIdentifierExpression(name, tn.range(startPos, tn.pos));\r\n while (tn.skip(Token.DOT)) {\r\n if (tn.skipIdentifier()) {\r\n name = tn.readIdentifier();\r\n expression = Node.createPropertyAccessExpression(\r\n expression,\r\n Node.createIdentifierExpression(name, tn.range()),\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let args: Expression[] | null;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n args = this.parseArguments(tn);\r\n if (args) {\r\n return Node.createDecorator(expression, args, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n return Node.createDecorator(expression, null, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVariable(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): VariableStatement | null {\r\n\r\n // at ('const' | 'let' | 'var'): VariableDeclaration (',' VariableDeclaration)* ';'?\r\n\r\n var members = new Array();\r\n do {\r\n let member = this.parseVariableDeclaration(tn, flags, decorators);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n\r\n var ret = Node.createVariableStatement(members, decorators, flags, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseVariableDeclaration(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags,\r\n parentDecorators: DecoratorNode[] | null\r\n ): VariableDeclaration | null {\r\n\r\n // before: Identifier (':' Type)? ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var flags = parentFlags;\r\n\r\n var type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n }\r\n\r\n var initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n } else {\r\n if (flags & CommonFlags.CONST) {\r\n if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n identifier.range\r\n ); // recoverable\r\n }\r\n } else if (!type) { // neither type nor initializer\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range(tn.pos)\r\n ); // recoverable\r\n }\r\n }\r\n return Node.createVariableDeclaration(\r\n identifier,\r\n type,\r\n initializer,\r\n parentDecorators,\r\n flags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseEnum(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): EnumDeclaration | null {\r\n\r\n // at 'enum': Identifier '{' (EnumValueDeclaration (',' EnumValueDeclaration )*)? '}' ';'?\r\n\r\n if (tn.next() != Token.IDENTIFIER) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.next() != Token.OPENBRACE) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n var members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseEnumValue(tn, CommonFlags.NONE);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n var ret = Node.createEnumDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseEnumValue(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags\r\n ): EnumValueDeclaration | null {\r\n\r\n // before: Identifier ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var value: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n }\r\n return Node.createEnumValueDeclaration(\r\n identifier,\r\n value,\r\n parentFlags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseReturn(\r\n tn: Tokenizer\r\n ): ReturnStatement | null {\r\n\r\n // at 'return': Expression | (';' | '}' | ...'\\n')\r\n\r\n var expr: Expression | null = null;\r\n if (\r\n tn.peek(true) != Token.SEMICOLON &&\r\n tn.nextToken != Token.CLOSEBRACE &&\r\n !tn.nextTokenOnNewLine\r\n ) {\r\n if (!(expr = this.parseExpression(tn))) return null;\r\n }\r\n\r\n var ret = Node.createReturnStatement(expr, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTypeParameters(\r\n tn: Tokenizer\r\n ): TypeParameterNode[] | null {\r\n\r\n // at '<': TypeParameter (',' TypeParameter)* '>'\r\n\r\n var typeParameters = new Array();\r\n while (!tn.skip(Token.GREATERTHAN)) {\r\n let typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.GREATERTHAN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (typeParameters.length === 0) {\r\n this.error(\r\n DiagnosticCode.Type_parameter_list_cannot_be_empty,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n return typeParameters;\r\n }\r\n\r\n parseTypeParameter(\r\n tn: Tokenizer\r\n ): TypeParameterNode | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n let extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n return Node.createTypeParameter(\r\n identifier,\r\n extendsType,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private parseParametersThis: TypeNode | null = null;\r\n\r\n parseParameters(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: ParameterNode | null = null;\r\n var seenOptional = false;\r\n var reportedRest = false;\r\n var thisType: CommonTypeNode | null = null;\r\n\r\n // check if there is a leading `this` parameter\r\n this.parseParametersThis = null;\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n thisType = this.parseType(tn); // reports\r\n if (!thisType) return null;\r\n if (thisType.kind == NodeKind.TYPE) {\r\n this.parseParametersThis = thisType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n thisType.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n return parameters;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let param = this.parseParameter(tn, isConstructor); // reports\r\n if (!param) return null;\r\n if (seenRest && !reportedRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,\r\n seenRest.name.range\r\n );\r\n reportedRest = true;\r\n }\r\n switch (param.parameterKind) {\r\n default: {\r\n if (seenOptional) {\r\n this.error(\r\n DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,\r\n param.name.range\r\n );\r\n }\r\n break;\r\n }\r\n case ParameterKind.OPTIONAL: {\r\n seenOptional = true;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n seenRest = param;\r\n break;\r\n }\r\n }\r\n parameters.push(param);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: ('public' | 'private' | 'protected' | '...')? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n var accessFlags: CommonFlags = CommonFlags.NONE;\r\n if (isConstructor) {\r\n if (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.peek() == Token.READONLY) {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek() != Token.COLON) { // modifier\r\n tn.discard(state);\r\n if (!startRange) startRange = tn.range();\r\n accessFlags |= CommonFlags.READONLY;\r\n } else { // identifier\r\n tn.reset(state);\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n if (accessFlags) {\r\n this.error(\r\n DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,\r\n tn.range()\r\n );\r\n } else {\r\n startRange = tn.range();\r\n }\r\n isRest = true;\r\n }\r\n if (tn.skipIdentifier()) {\r\n if (!isRest) startRange = tn.range();\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let type: CommonTypeNode | null = null;\r\n if (isOptional = tn.skip(Token.QUESTION)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n identifier.range\r\n );\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n type = Node.createOmittedType(tn.range(tn.pos));\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n if (isOptional) {\r\n this.error(\r\n DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,\r\n identifier.range\r\n );\r\n } else {\r\n isOptional = true;\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n }\r\n let param = Node.createParameter(\r\n identifier,\r\n type,\r\n initializer,\r\n isRest\r\n ? ParameterKind.REST\r\n : isOptional\r\n ? ParameterKind.OPTIONAL\r\n : ParameterKind.DEFAULT,\r\n Range.join(startRange, tn.range())\r\n );\r\n param.flags |= accessFlags;\r\n return param;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseFunction(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): FunctionDeclaration | null {\r\n\r\n // at 'function':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // '(' Parameters (':' Type)?\r\n // '{' Statement* '}'\r\n // ';'?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(tn.pos)\r\n );\r\n return null;\r\n }\r\n\r\n var name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var signatureStart: i32 = -1;\r\n\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n signatureStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n if (signatureStart < 0) {\r\n signatureStart = tn.tokenPos;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n var thisType = this.parseParametersThis;\r\n\r\n var isSetter = (flags & CommonFlags.SET) != 0;\r\n if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n ); // recoverable\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn, true, isSetter);\r\n if (!returnType) return null;\r\n }\r\n\r\n if (!returnType) {\r\n returnType = Node.createOmittedType(\r\n tn.range(tn.pos)\r\n );\r\n if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range(tn.pos)\r\n );\r\n }\r\n\r\n var ret = Node.createFunctionDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseFunctionExpression(tn: Tokenizer): FunctionExpression | null {\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n var isArrow = false;\r\n\r\n // either at 'function':\r\n // Identifier?\r\n // '(' Parameters (':' Type)?\r\n // Statement\r\n\r\n if (tn.token == Token.FUNCTION) {\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n // or at '(' of arrow function:\r\n // Parameters (':' Type)?\r\n // Statement\r\n\r\n } else {\r\n isArrow = true;\r\n assert(tn.token == Token.OPENPAREN);\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var signatureStart = tn.pos;\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, name, parameters, isArrow, startPos, signatureStart);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n name: IdentifierExpression,\r\n parameters: ParameterNode[],\r\n isArrow: bool,\r\n startPos: i32 = -1,\r\n signatureStart: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = name.range.start;\r\n if (signatureStart < 0) signatureStart = startPos;\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n\r\n if (isArrow) {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"=>\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null, // TODO?\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null;\r\n if (isArrow) {\r\n body = this.parseStatement(tn, false);\r\n } else {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n }\r\n if (!body) return null;\r\n\r\n var declaration = Node.createFunctionDeclaration(\r\n name,\r\n null,\r\n signature,\r\n body,\r\n null,\r\n isArrow ? CommonFlags.ARROW : CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n return Node.createFunctionExpression(declaration);\r\n }\r\n\r\n parseClassOrInterface(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): ClassDeclaration | null {\r\n\r\n // at ('class' | 'interface'):\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // ('extends' Type)?\r\n // ('implements' Type (',' Type)*)?\r\n // '{' ClassMember* '}'\r\n\r\n var isInterface = tn.token == Token.INTERFACE;\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n var typeParameters: TypeParameterNode[] | null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n } else {\r\n typeParameters = [];\r\n }\r\n\r\n var extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n\r\n var implementsTypes: TypeNode[] | null = null;\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Interface_declaration_cannot_have_implements_clause,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n do {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n if (!isInterface) {\r\n if (!implementsTypes) implementsTypes = [];\r\n implementsTypes.push(type);\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration: ClassDeclaration;\r\n if (isInterface) {\r\n assert(!implementsTypes);\r\n declaration = Node.createInterfaceDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n declaration = Node.createClassDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n implementsTypes,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return declaration;\r\n }\r\n\r\n parseClassExpression(tn: Tokenizer): ClassExpression | null {\r\n\r\n // at 'class': Identifier? '{' ... '}'\r\n\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration = Node.createClassDeclaration(\r\n name,\r\n [],\r\n null,\r\n null,\r\n members,\r\n null,\r\n CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return Node.createClassExpression(declaration);\r\n }\r\n\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parent: ClassDeclaration\r\n ): DeclarationStatement | null {\r\n\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\r\n // 'readonly'?\r\n // ('get' | 'set')?\r\n // Identifier ...\r\n\r\n var startPos = tn.pos;\r\n var isInterface = parent.kind == NodeKind.INTERFACEDECLARATION;\r\n\r\n var decorators = new Array();\r\n while (tn.skip(Token.AT)) {\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorator.range\r\n );\r\n }\r\n decorators.push(decorator);\r\n }\r\n\r\n // inherit ambient status\r\n var flags = parent.flags & CommonFlags.AMBIENT;\r\n\r\n // implemented methods are virtual\r\n if (isInterface) flags |= CommonFlags.VIRTUAL;\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"public\"\r\n );\r\n }\r\n flags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"private\"\r\n );\r\n }\r\n flags |= CommonFlags.PRIVATE;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"protected\"\r\n );\r\n }\r\n flags |= CommonFlags.PROTECTED;\r\n }\r\n\r\n var staticStart: i32 = 0;\r\n var staticEnd: i32 = 0;\r\n var abstractStart: i32 = 0;\r\n var abstractEnd: i32 = 0;\r\n if (tn.skip(Token.STATIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"static\"\r\n );\r\n }\r\n flags |= CommonFlags.STATIC;\r\n staticStart = tn.tokenPos;\r\n staticEnd = tn.pos;\r\n } else {\r\n flags |= CommonFlags.INSTANCE;\r\n if (tn.skip(Token.ABSTRACT)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"abstract\"\r\n );\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n abstractStart = tn.tokenPos;\r\n abstractEnd = tn.pos;\r\n }\r\n if (parent.flags & CommonFlags.GENERIC) {\r\n flags |= CommonFlags.GENERIC_CONTEXT;\r\n }\r\n }\r\n\r\n var readonlyStart: i32 = 0;\r\n var readonlyEnd: i32 = 0;\r\n if (tn.skip(Token.READONLY)) {\r\n flags |= CommonFlags.READONLY;\r\n readonlyStart = tn.tokenPos;\r\n readonlyEnd = tn.pos;\r\n }\r\n\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n var state = tn.mark();\r\n var isConstructor = false;\r\n var isGetter = false;\r\n var getStart: i32 = 0;\r\n var getEnd: i32 = 0;\r\n var isSetter = false;\r\n var setStart: i32 = 0;\r\n var setEnd: i32 = 0;\r\n if (!isInterface) {\r\n if (tn.skip(Token.GET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.GET;\r\n isGetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.SET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.SET | CommonFlags.SET;\r\n isSetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.CONSTRUCTOR)) {\r\n flags |= CommonFlags.CONSTRUCTOR;\r\n isConstructor = true;\r\n if (flags & CommonFlags.STATIC) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(staticStart, staticEnd), \"static\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n }\r\n }\r\n\r\n if (!isConstructor && !tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var name = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n let typeParametersStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.An_accessor_cannot_have_type_parameters,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else {\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n }\r\n\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let signatureStart = tn.tokenPos;\r\n let parameters = this.parseParameters(tn, isConstructor);\r\n if (!parameters) return null;\r\n let thisType = this.parseParametersThis;\r\n if (isConstructor) {\r\n for (let i = 0, k = parameters.length; i < k; ++i) {\r\n let parameter = parameters[i];\r\n if (parameter.isAny(\r\n CommonFlags.PUBLIC |\r\n CommonFlags.PROTECTED |\r\n CommonFlags.PRIVATE |\r\n CommonFlags.READONLY\r\n )) {\r\n let implicitFieldDeclaration = Node.createFieldDeclaration(\r\n parameter.name,\r\n parameter.type,\r\n null, // initialized via parameter\r\n null,\r\n parameter.flags | CommonFlags.INSTANCE,\r\n parameter.range\r\n );\r\n implicitFieldDeclaration.parameterIndex = i;\r\n implicitFieldDeclaration.parent = parent;\r\n parameter.implicitFieldDeclaration = implicitFieldDeclaration;\r\n parent.members.push(implicitFieldDeclaration);\r\n }\r\n }\r\n } else if (isGetter) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n );\r\n }\r\n } else if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n );\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n );\r\n }\r\n }\r\n\r\n let returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (name.kind == NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n );\r\n } else if (isSetter) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,\r\n tn.range()\r\n );\r\n }\r\n returnType = this.parseType(tn, name.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n if (!isSetter && name.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n let signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n let body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n } else if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract,\r\n tn.range(), name.text\r\n ); // recoverable\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT) && !isInterface) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n let retMethod = Node.createMethodDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retMethod;\r\n\r\n } else if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Constructor_implementation_is_missing,\r\n name.range\r\n );\r\n\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n name.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(getStart, getEnd), \"get\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.SET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(setStart, setEnd), \"set\"\r\n ); // recoverable\r\n }\r\n\r\n let type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n initializer = this.parseExpression(tn);\r\n if (!initializer) return null;\r\n }\r\n let retField = Node.createFieldDeclaration(\r\n name,\r\n type,\r\n initializer,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retField;\r\n }\r\n return null;\r\n }\r\n\r\n parseNamespace(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): NamespaceDeclaration | null {\r\n\r\n // at 'namespace': Identifier '{' (Variable | Function)* '}'\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n let ns = Node.createNamespaceDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseTopLevelStatement(tn, ns);\r\n if (!member) return null;\r\n member.parent = ns;\r\n members.push(member);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ns;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExport(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n startPos: i32\r\n ): ExportStatement | null {\r\n\r\n // at 'export': '{' ExportMember (',' ExportMember)* }' ('from' StringLiteral)? ';'?\r\n\r\n var path: StringLiteralExpression | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseExportMember(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let ret = Node.createExportStatement(members, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = ret.internalPath;\r\n if (internalPath !== null && !this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret = Node.createExportStatement(null, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = assert(ret.internalPath);\r\n let source = tn.source;\r\n if (!source.exportPaths) source.exportPaths = new Set();\r\n source.exportPaths.add(internalPath);\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportMember(\r\n tn: Tokenizer\r\n ): ExportMember | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifierName()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createExportMember(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImport(\r\n tn: Tokenizer\r\n ): ImportStatement | null {\r\n\r\n // at 'import':\r\n // ('{' (ImportMember (',' ImportMember)* '}') | ('*' 'as' Identifier)?\r\n // 'from' StringLiteral ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var members: ImportDeclaration[] | null = null;\r\n var namespaceName: IdentifierExpression | null = null;\r\n var skipFrom = false;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseImportDeclaration(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n namespaceName = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"as\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n skipFrom = true;\r\n }\r\n\r\n if (skipFrom || tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n let path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret: ImportStatement;\r\n if (namespaceName) {\r\n assert(!members);\r\n ret = Node.createImportStatementWithWildcard(namespaceName, path, tn.range(startPos, tn.pos));\r\n } else {\r\n ret = Node.createImportStatement(members, path, tn.range(startPos, tn.pos));\r\n }\r\n let internalPath = ret.internalPath;\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImportDeclaration(\r\n tn: Tokenizer\r\n ): ImportDeclaration | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifierName()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createImportDeclaration(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportImport(\r\n tn: Tokenizer,\r\n startPos: i32\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let ret = Node.createExportImportStatement(identifier, asIdentifier, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseStatement(\r\n tn: Tokenizer,\r\n topLevel: bool = false\r\n ): Statement | null {\r\n\r\n // at previous token\r\n\r\n var state = tn.mark();\r\n var token = tn.next();\r\n var statement: Statement | null = null;\r\n switch (token) {\r\n case Token.BREAK: {\r\n statement = this.parseBreak(tn);\r\n break;\r\n }\r\n case Token.CONST: {\r\n statement = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.CONTINUE: {\r\n statement = this.parseContinue(tn);\r\n break;\r\n }\r\n case Token.DO: {\r\n statement = this.parseDoStatement(tn);\r\n break;\r\n }\r\n case Token.FOR: {\r\n statement = this.parseForStatement(tn);\r\n break;\r\n }\r\n case Token.IF: {\r\n statement = this.parseIfStatement(tn);\r\n break;\r\n }\r\n case Token.LET: {\r\n statement = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.VAR: {\r\n statement = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n statement = this.parseBlockStatement(tn, topLevel);\r\n break;\r\n }\r\n case Token.RETURN: {\r\n if (topLevel) {\r\n this.error(\r\n DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n statement = this.parseReturn(tn);\r\n break;\r\n }\r\n case Token.SEMICOLON: {\r\n return Node.createEmptyStatement(tn.range(tn.tokenPos));\r\n }\r\n case Token.SWITCH: {\r\n statement = this.parseSwitchStatement(tn);\r\n break;\r\n }\r\n case Token.THROW: {\r\n statement = this.parseThrowStatement(tn);\r\n break;\r\n }\r\n case Token.TRY: {\r\n statement = this.parseTryStatement(tn);\r\n break;\r\n }\r\n case Token.VOID: {\r\n statement = this.parseVoidStatement(tn);\r\n break;\r\n }\r\n case Token.WHILE: {\r\n statement = this.parseWhileStatement(tn);\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n tn.reset(state);\r\n statement = this.parseExpressionStatement(tn);\r\n break;\r\n }\r\n }\r\n if (!statement) { // has been reported\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n }\r\n return statement;\r\n }\r\n\r\n parseBlockStatement(\r\n tn: Tokenizer,\r\n topLevel: bool\r\n ): BlockStatement | null {\r\n\r\n // at '{': Statement* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let state = tn.mark();\r\n let statement = this.parseStatement(tn, topLevel);\r\n if (!statement) {\r\n if (tn.token == Token.ENDOFFILE) return null;\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n statements.push(statement);\r\n }\r\n }\r\n var ret = Node.createBlockStatement(statements, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseBreak(\r\n tn: Tokenizer\r\n ): BreakStatement | null {\r\n\r\n // at 'break': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createBreakStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseContinue(\r\n tn: Tokenizer\r\n ): ContinueStatement | null {\r\n\r\n // at 'continue': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createContinueStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseDoStatement(\r\n tn: Tokenizer\r\n ): DoStatement | null {\r\n\r\n // at 'do': Statement 'while' '(' Expression ')' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n if (tn.skip(Token.WHILE)) {\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let ret = Node.createDoStatement(statement, condition, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"while\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExpressionStatement(\r\n tn: Tokenizer\r\n ): ExpressionStatement | null {\r\n\r\n // at previous token\r\n\r\n var expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n\r\n var ret = Node.createExpressionStatement(expr);\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseForStatement(\r\n tn: Tokenizer\r\n ): ForStatement | null {\r\n\r\n // at 'for': '(' Statement? Expression? ';' Expression? ')' Statement\r\n\r\n var startPos = tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let initializer: Statement | null = null;\r\n\r\n if (tn.skip(Token.CONST)) {\r\n initializer = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n } else if (tn.skip(Token.LET)) {\r\n initializer = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n } else if (tn.skip(Token.VAR)) {\r\n initializer = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n\r\n } else if (!tn.skip(Token.SEMICOLON)) {\r\n initializer = this.parseExpressionStatement(tn);\r\n if (!initializer) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let condition: ExpressionStatement | null = null;\r\n if (!tn.skip(Token.SEMICOLON)) {\r\n condition = this.parseExpressionStatement(tn);\r\n if (!condition) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let incrementor: Expression | null = null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n incrementor = this.parseExpression(tn);\r\n if (!incrementor) return null;\r\n\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n return Node.createForStatement(\r\n initializer,\r\n condition\r\n ? condition.expression\r\n : null,\r\n incrementor,\r\n statement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseIfStatement(\r\n tn: Tokenizer\r\n ): IfStatement | null {\r\n\r\n // at 'if': '(' Expression ')' Statement ('else' Statement)?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let elseStatement: Statement | null = null;\r\n if (tn.skip(Token.ELSE)) {\r\n elseStatement = this.parseStatement(tn);\r\n if (!elseStatement) return null;\r\n }\r\n return Node.createIfStatement(\r\n condition,\r\n statement,\r\n elseStatement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchStatement(\r\n tn: Tokenizer\r\n ): SwitchStatement | null {\r\n\r\n // at 'switch': '(' Expression ')' '{' SwitchCase* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n let ret = Node.createSwitchStatement(condition, cases, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchCase(\r\n tn: Tokenizer\r\n ): SwitchCase | null {\r\n\r\n var startPos = tn.tokenPos;\r\n var statements: Statement[],\r\n statement: Statement | null;\r\n\r\n // 'case' Expression ':' Statement*\r\n\r\n if (tn.skip(Token.CASE)) {\r\n let label = this.parseExpression(tn);\r\n if (!label) return null;\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(label, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n\r\n // 'default' ':' Statement*\r\n\r\n } else if (tn.skip(Token.DEFAULT)) {\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(null, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._case_or_default_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseThrowStatement(\r\n tn: Tokenizer\r\n ): ThrowStatement | null {\r\n\r\n // at 'throw': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n var ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTryStatement(\r\n tn: Tokenizer\r\n ): TryStatement | null {\r\n\r\n // at 'try':\r\n // '{' Statement* '}'\r\n // ('catch' '(' VariableMember ')' '{' Statement* '}')?\r\n // ('finally' '{' Statement* '}'? ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var stmt: Statement | null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n statements.push(stmt);\r\n }\r\n let catchVariable: IdentifierExpression | null = null;\r\n let catchStatements: Statement[] | null = null;\r\n let finallyStatements: Statement[] | null = null;\r\n if (tn.skip(Token.CATCH)) {\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n catchVariable = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n catchStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n catchStatements.push(stmt);\r\n }\r\n }\r\n if (tn.skip(Token.FINALLY)) {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n finallyStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n finallyStatements.push(stmt);\r\n }\r\n }\r\n if (!(catchStatements || finallyStatements)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"catch\"\r\n );\r\n return null;\r\n }\r\n let ret = Node.createTryStatement(\r\n statements,\r\n catchVariable,\r\n catchStatements,\r\n finallyStatements,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseTypeDeclaration(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier ('<' TypeParameters '>')? '=' Type ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n if (tn.skip(Token.EQUALS)) {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n let ret = Node.createTypeDeclaration(\r\n name,\r\n typeParameters,\r\n type,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVoidStatement(\r\n tn: Tokenizer\r\n ): VoidStatement | null {\r\n\r\n // at 'void': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn, Precedence.GROUPING);\r\n if (!expression) return null;\r\n var ret = Node.createVoidStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseWhileStatement(\r\n tn: Tokenizer\r\n ): WhileStatement | null {\r\n\r\n // at 'while': '(' Expression ')' Statement ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let ret = Node.createWhileStatement(expression, statement, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n // expressions\r\n // see: http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm#climbing\r\n\r\n parseExpressionStart(\r\n tn: Tokenizer\r\n ): Expression | null {\r\n\r\n var token = tn.next(IdentifierHandling.PREFER);\r\n var startPos = tn.tokenPos;\r\n var precedence = determinePrecedenceStart(token);\r\n if (precedence != Precedence.NONE) {\r\n let operand: Expression | null;\r\n\r\n // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions)\r\n\r\n // NewExpression\r\n if (token == Token.NEW) {\r\n operand = this.parseExpression(tn, Precedence.CALL);\r\n if (!operand) return null;\r\n if (operand.kind == NodeKind.CALL) {\r\n return Node.createNewExpression(\r\n (operand).expression,\r\n (operand).typeArguments,\r\n (operand).arguments,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n } else {\r\n operand = this.parseExpression(tn, precedence);\r\n if (!operand) return null;\r\n }\r\n\r\n // UnaryPrefixExpression\r\n if (token == Token.PLUS_PLUS || token == Token.MINUS_MINUS) {\r\n if (\r\n operand.kind != NodeKind.IDENTIFIER &&\r\n operand.kind != NodeKind.ELEMENTACCESS &&\r\n operand.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n operand.range\r\n );\r\n }\r\n }\r\n return Node.createUnaryPrefixExpression(token, operand, tn.range(startPos, tn.pos));\r\n }\r\n\r\n var expr: Expression | null = null;\r\n switch (token) {\r\n\r\n case Token.NULL: return Node.createNullExpression(tn.range());\r\n case Token.TRUE: return Node.createTrueExpression(tn.range());\r\n case Token.FALSE: return Node.createFalseExpression(tn.range());\r\n\r\n // ParenthesizedExpression\r\n // FunctionExpression\r\n case Token.OPENPAREN: {\r\n\r\n // determine whether this is a function expression\r\n if (tn.skip(Token.CLOSEPAREN)) { // must be a function expression (fast route)\r\n return this.parseFunctionExpressionCommon(\r\n tn,\r\n Node.createEmptyIdentifierExpression(tn.range(startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n let state = tn.mark();\r\n let again = true;\r\n do {\r\n switch (tn.next(IdentifierHandling.PREFER)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT: {\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n switch (tn.next()) {\r\n\r\n // if we got here, check for arrow\r\n case Token.CLOSEPAREN: {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n again = false;\r\n break;\r\n }\r\n // fall-through\r\n }\r\n // function expression\r\n case Token.COLON: { // type annotation\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.QUESTION: // optional parameter or ternary\r\n case Token.COMMA: {\r\n break; // continue\r\n }\r\n // parenthesized expression\r\n // case Token.EQUALS: // missing type annotation for simplicity\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n // parenthesized expression\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n } while (again);\r\n tn.reset(state);\r\n\r\n // parse parenthesized\r\n expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return Node.createParenthesizedExpression(expr, tn.range(startPos, tn.pos));\r\n }\r\n // ArrayLiteralExpression\r\n case Token.OPENBRACKET: {\r\n let elementExpressions = new Array();\r\n while (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (tn.peek() == Token.COMMA) {\r\n expr = null; // omitted\r\n } else {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n }\r\n elementExpressions.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACKET)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n }\r\n // ObjectLiteralExpression\r\n case Token.OPENBRACE: {\r\n let startPos = tn.tokenPos;\r\n let names = new Array();\r\n let values = new Array();\r\n let name: IdentifierExpression;\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n if (!tn.skipIdentifier()) {\r\n if (!tn.skip(Token.STRINGLITERAL)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(),\r\n );\r\n return null;\r\n }\r\n name = Node.createIdentifierExpression(tn.readString(), tn.range());\r\n name.set(CommonFlags.QUOTED);\r\n } else {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n names.push(name);\r\n if (tn.skip(Token.COLON)) {\r\n let value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n values.push(value);\r\n } else if (!name.is(CommonFlags.QUOTED)) {\r\n values.push(name);\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createObjectLiteralExpression(names, values, tn.range(startPos, tn.pos));\r\n }\r\n // AssertionExpression (unary prefix)\r\n case Token.LESSTHAN: {\r\n let toType = this.parseType(tn);\r\n if (!toType) return null;\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n expr = this.parseExpression(tn, Precedence.CALL);\r\n if (!expr) return null;\r\n return Node.createAssertionExpression(\r\n AssertionKind.PREFIX,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.IDENTIFIER: {\r\n return Node.createIdentifierExpression(tn.readIdentifier(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.THIS: {\r\n return Node.createThisExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.CONSTRUCTOR: {\r\n return Node.createConstructorExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.SUPER: {\r\n return Node.createSuperExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.STRINGLITERAL: {\r\n return Node.createStringLiteralExpression(tn.readString(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.INTEGERLITERAL: {\r\n return Node.createIntegerLiteralExpression(tn.readInteger(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.FLOATLITERAL: {\r\n return Node.createFloatLiteralExpression(tn.readFloat(), tn.range(startPos, tn.pos));\r\n }\r\n // RegexpLiteralExpression\r\n // note that this also continues on invalid ones so the surrounding AST remains intact\r\n case Token.SLASH: {\r\n let regexpPattern = tn.readRegexpPattern(); // also reports\r\n if (!tn.skip(Token.SLASH)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"/\"\r\n );\r\n return null;\r\n }\r\n return Node.createRegexpLiteralExpression(\r\n regexpPattern,\r\n tn.readRegexpFlags(), // also reports\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.FUNCTION: {\r\n return this.parseFunctionExpression(tn);\r\n }\r\n case Token.CLASS: {\r\n return this.parseClassExpression(tn);\r\n }\r\n default: {\r\n if (token == Token.ENDOFFILE) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n tn.range(startPos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expression_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): CommonTypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n var state = tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n if (tn.peek() === Token.GREATERTHAN) {\r\n break;\r\n }\r\n let type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset(state);\r\n return null;\r\n }\r\n typeArguments.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n if (tn.skip(Token.GREATERTHAN) && tn.skip(Token.OPENPAREN)) {\r\n return typeArguments;\r\n }\r\n tn.reset(state);\r\n return null;\r\n }\r\n\r\n parseArguments(\r\n tn: Tokenizer\r\n ): Expression[] | null {\r\n\r\n // at '(': (Expression (',' Expression)*)? ')'\r\n\r\n var args = new Array();\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return args;\r\n }\r\n\r\n parseExpression(\r\n tn: Tokenizer,\r\n precedence: Precedence = Precedence.COMMA\r\n ): Expression | null {\r\n assert(precedence != Precedence.NONE);\r\n\r\n var expr = this.parseExpressionStart(tn);\r\n if (!expr) return null;\r\n var startPos = expr.range.start;\r\n\r\n // CallExpression?\r\n if (nodeIsCallable(expr.kind)) {\r\n let typeArguments: CommonTypeNode[] | null = null;\r\n while (\r\n tn.skip(Token.OPENPAREN)\r\n ||\r\n nodeIsGenericCallable(expr.kind) && (typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn)) !== null\r\n ) {\r\n let args = this.parseArguments(tn);\r\n if (!args) return null;\r\n expr = Node.createCallExpression(expr, typeArguments, args, tn.range(startPos, tn.pos)); // is again callable\r\n }\r\n }\r\n\r\n var token: Token;\r\n var next: Expression | null = null;\r\n var nextPrecedence: Precedence;\r\n while (\r\n (nextPrecedence = determinePrecedence(token = tn.peek())) >= precedence\r\n ) { // precedence climbing\r\n tn.next();\r\n switch (token) {\r\n // AssertionExpression\r\n case Token.AS: {\r\n let toType = this.parseType(tn); // reports\r\n if (!toType) return null;\r\n expr = Node.createAssertionExpression(\r\n AssertionKind.AS,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // InstanceOfExpression\r\n case Token.INSTANCEOF: {\r\n let isType = this.parseType(tn); // reports\r\n if (!isType) return null;\r\n expr = Node.createInstanceOfExpression(\r\n expr,\r\n isType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // ElementAccessExpression\r\n case Token.OPENBRACKET: {\r\n next = this.parseExpression(tn); // reports\r\n if (!next) return null;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n expr = Node.createElementAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // UnaryPostfixExpression\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: {\r\n if (\r\n expr.kind != NodeKind.IDENTIFIER &&\r\n expr.kind != NodeKind.ELEMENTACCESS &&\r\n expr.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n expr.range\r\n );\r\n }\r\n expr = Node.createUnaryPostfixExpression(\r\n token,\r\n expr,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // TernaryExpression\r\n case Token.QUESTION: {\r\n let ifThen = this.parseExpression(tn);\r\n if (!ifThen) return null;\r\n if (!tn.skip(Token.COLON)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n let ifElse = this.parseExpression(tn, precedence > Precedence.COMMA\r\n ? Precedence.COMMA + 1\r\n : Precedence.COMMA\r\n );\r\n if (!ifElse) return null;\r\n expr = Node.createTernaryExpression(\r\n expr,\r\n ifThen,\r\n ifElse,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // CommaExpression\r\n case Token.COMMA: {\r\n let commaExprs: Expression[] = [ expr ];\r\n do {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n commaExprs.push(expr);\r\n } while (tn.skip(Token.COMMA));\r\n expr = Node.createCommaExpression(commaExprs, tn.range(startPos, tn.pos));\r\n break;\r\n }\r\n default: {\r\n next = this.parseExpression(tn,\r\n isRightAssociative(token)\r\n ? nextPrecedence\r\n : nextPrecedence + 1\r\n );\r\n if (!next) return null;\r\n\r\n // PropertyAccessExpression\r\n if (token == Token.DOT) {\r\n if (next.kind == NodeKind.IDENTIFIER) {\r\n expr = Node.createPropertyAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else if (next.kind == NodeKind.CALL) { // join\r\n let propertyCall = next;\r\n if (propertyCall.expression.kind == NodeKind.IDENTIFIER) {\r\n propertyCall.expression = Node.createPropertyAccessExpression(\r\n expr,\r\n propertyCall.expression,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n propertyCall.expression.range\r\n );\r\n return null;\r\n }\r\n expr = propertyCall;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n next.range\r\n );\r\n return null;\r\n }\r\n\r\n // BinaryExpression\r\n } else {\r\n expr = Node.createBinaryExpression(token, expr, next, tn.range(startPos, tn.pos));\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Skips over a statement on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n skipStatement(tn: Tokenizer): void {\r\n tn.peek(true);\r\n if (tn.nextTokenOnNewLine) tn.next(); // if reset() to the previous line\r\n do {\r\n let nextToken = tn.peek(true);\r\n if (\r\n nextToken == Token.ENDOFFILE || // next step should handle this\r\n nextToken == Token.SEMICOLON // end of the statement for sure\r\n ) {\r\n tn.next();\r\n break;\r\n }\r\n if (tn.nextTokenOnNewLine) break; // end of the statement maybe\r\n switch (tn.next()) {\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n break;\r\n }\r\n case Token.STRINGLITERAL: {\r\n tn.readString();\r\n break;\r\n }\r\n case Token.INTEGERLITERAL: {\r\n tn.readInteger();\r\n break;\r\n }\r\n case Token.FLOATLITERAL: {\r\n tn.readFloat();\r\n break;\r\n }\r\n }\r\n } while (true);\r\n }\r\n\r\n /** Skips over a block on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n skipBlock(tn: Tokenizer): void {\r\n // at '{': ... '}'\r\n var depth = 1;\r\n var again = true;\r\n do {\r\n switch (tn.next()) {\r\n case Token.ENDOFFILE: {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n again = false;\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n ++depth;\r\n break;\r\n }\r\n case Token.CLOSEBRACE: {\r\n --depth;\r\n if (!depth) again = false;\r\n break;\r\n }\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n break;\r\n }\r\n case Token.STRINGLITERAL: {\r\n tn.readString();\r\n break;\r\n }\r\n case Token.INTEGERLITERAL: {\r\n tn.readInteger();\r\n break;\r\n }\r\n case Token.FLOATLITERAL: {\r\n tn.readFloat();\r\n break;\r\n }\r\n }\r\n } while (again);\r\n }\r\n}\r\n\r\n/** Operator precedence from least to largest. */\r\nexport const enum Precedence {\r\n NONE,\r\n COMMA,\r\n SPREAD,\r\n YIELD,\r\n ASSIGNMENT,\r\n CONDITIONAL,\r\n LOGICAL_OR,\r\n LOGICAL_AND,\r\n BITWISE_OR,\r\n BITWISE_XOR,\r\n BITWISE_AND,\r\n EQUALITY,\r\n RELATIONAL,\r\n SHIFT,\r\n ADDITIVE,\r\n MULTIPLICATIVE,\r\n EXPONENTIATED,\r\n UNARY_PREFIX,\r\n UNARY_POSTFIX,\r\n CALL,\r\n MEMBERACCESS,\r\n GROUPING\r\n}\r\n\r\n/** Determines the precedence of a starting token. */\r\nfunction determinePrecedenceStart(kind: Token): Precedence {\r\n switch (kind) {\r\n case Token.DOT_DOT_DOT: return Precedence.SPREAD;\r\n case Token.YIELD: return Precedence.YIELD;\r\n case Token.EXCLAMATION:\r\n case Token.TILDE:\r\n case Token.PLUS:\r\n case Token.MINUS:\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS:\r\n case Token.TYPEOF:\r\n case Token.VOID:\r\n case Token.DELETE: return Precedence.UNARY_PREFIX;\r\n case Token.NEW: return Precedence.MEMBERACCESS;\r\n }\r\n return Precedence.NONE;\r\n}\r\n\r\n/** Determines the precende of a non-starting token. */\r\nfunction determinePrecedence(kind: Token): Precedence {\r\n switch (kind) {\r\n case Token.COMMA: return Precedence.COMMA;\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS: return Precedence.ASSIGNMENT;\r\n case Token.QUESTION: return Precedence.CONDITIONAL;\r\n case Token.BAR_BAR: return Precedence.LOGICAL_OR;\r\n case Token.AMPERSAND_AMPERSAND: return Precedence.LOGICAL_AND;\r\n case Token.BAR: return Precedence.BITWISE_OR;\r\n case Token.CARET: return Precedence.BITWISE_XOR;\r\n case Token.AMPERSAND: return Precedence.BITWISE_AND;\r\n case Token.EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS:\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return Precedence.EQUALITY;\r\n case Token.AS:\r\n case Token.IN:\r\n case Token.INSTANCEOF:\r\n case Token.LESSTHAN:\r\n case Token.GREATERTHAN:\r\n case Token.LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_EQUALS: return Precedence.RELATIONAL;\r\n case Token.LESSTHAN_LESSTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return Precedence.SHIFT;\r\n case Token.PLUS:\r\n case Token.MINUS: return Precedence.ADDITIVE;\r\n case Token.ASTERISK:\r\n case Token.SLASH:\r\n case Token.PERCENT: return Precedence.MULTIPLICATIVE;\r\n case Token.ASTERISK_ASTERISK: return Precedence.EXPONENTIATED;\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: return Precedence.UNARY_POSTFIX;\r\n case Token.DOT:\r\n case Token.NEW:\r\n case Token.OPENBRACKET: return Precedence.MEMBERACCESS;\r\n }\r\n return Precedence.NONE;\r\n}\r\n\r\n/** Determines whether a non-starting token is right associative. */\r\nfunction isRightAssociative(kind: Token): bool {\r\n switch (kind) {\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS:\r\n case Token.QUESTION:\r\n case Token.ASTERISK_ASTERISK: return true;\r\n default: return false;\r\n }\r\n}\r\n","/**\r\n * Definition builders for WebIDL and TypeScript.\r\n * @module definitions\r\n *//***/\r\n\r\nimport {\r\n CommonFlags\r\n} from \"./common\";\r\n\r\nimport {\r\n Program,\r\n Element,\r\n ElementKind,\r\n Global,\r\n Enum,\r\n EnumValue,\r\n Field,\r\n Function,\r\n FunctionPrototype,\r\n Class,\r\n ClassPrototype,\r\n Namespace,\r\n ConstantValueKind,\r\n Interface,\r\n Property\r\n} from \"./program\";\r\n\r\nimport {\r\n Type,\r\n TypeKind\r\n} from \"./types\";\r\n\r\nimport {\r\n indent\r\n} from \"./util\";\r\n\r\n/** Walker base class. */\r\nabstract class ExportsWalker {\r\n\r\n /** Program reference. */\r\n program: Program;\r\n /** Whether to include private members */\r\n includePrivate: bool;\r\n /** Elements still to do. */\r\n todo: Element[] = [];\r\n /** Already seen elements. */\r\n seen: Set = new Set();\r\n\r\n /** Constructs a new Element walker. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n this.program = program;\r\n this.includePrivate;\r\n }\r\n\r\n /** Walks all exports and calls the respective handlers. */\r\n walk(): void {\r\n for (let moduleExport of this.program.moduleLevelExports.values()) {\r\n // FIXME: doesn't honor the actual externally visible name\r\n this.visitElement(moduleExport.element);\r\n }\r\n var todo = this.todo;\r\n for (let i = 0; i < todo.length; ) this.visitElement(todo[i]);\r\n }\r\n\r\n /** Visits an element.*/\r\n visitElement(element: Element): void {\r\n if (element.is(CommonFlags.PRIVATE) && !this.includePrivate) return;\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitGlobal(element);\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.visitFunctionInstances(element);\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n this.visitClassInstances(element);\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n if ((element).is(CommonFlags.COMPILED)) this.visitField(element);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prop = element;\r\n let getter = prop.getterPrototype;\r\n if (getter) this.visitFunctionInstances(getter);\r\n let setter = prop.setterPrototype;\r\n if (setter) this.visitFunctionInstances(setter);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n if (hasCompiledMember(element)) this.visitNamespace(element);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n\r\n private visitFunctionInstances(element: FunctionPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitFunction(instance);\r\n }\r\n }\r\n\r\n private visitClassInstances(element: ClassPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitClass(instance);\r\n }\r\n }\r\n\r\n abstract visitGlobal(element: Global): void;\r\n abstract visitEnum(element: Enum): void;\r\n abstract visitFunction(element: Function): void;\r\n abstract visitClass(element: Class): void;\r\n abstract visitInterface(element: Interface): void;\r\n abstract visitField(element: Field): void;\r\n abstract visitNamespace(element: Element): void;\r\n}\r\n\r\n/** A WebIDL definitions builder. */\r\nexport class IDLBuilder extends ExportsWalker {\r\n\r\n /** Builds WebIDL definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new IDLBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n if (isConst) {\r\n switch (element.constantValueKind) {\r\n case ConstantValueKind.INTEGER: {\r\n sb.push(\" = \");\r\n sb.push(i64_to_string(element.constantIntegerValue));\r\n break;\r\n }\r\n case ConstantValueKind.FLOAT: {\r\n sb.push(\" = \");\r\n sb.push(element.constantFloatValue.toString());\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n let isConst = (member).is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"readonly \");\r\n sb.push(\"unsigned long \");\r\n sb.push(name);\r\n if (isConst) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n }\r\n for (let member of members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) this.visitElement(member);\r\n }\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(this.typeToString(parameters[i]));\r\n sb.push(\" \");\r\n sb.push(signature.getParameterName(i));\r\n }\r\n sb.push(\");\\n\");\r\n var members = element.members;\r\n if (members && members.size) {\r\n indent(sb, this.indentLevel);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n // TODO\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n // TODO\r\n }\r\n\r\n visitNamespace(element: Namespace): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"byte\";\r\n case TypeKind.I16: return \"short\";\r\n case TypeKind.I32: return \"long\";\r\n case TypeKind.I64: return \"long long\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"long long\" : \"long\";\r\n case TypeKind.U8: return \"octet\";\r\n case TypeKind.U16: return \"unsigned short\";\r\n case TypeKind.U32: return \"unsigned long\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"unsigned long long\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"unsigned long long\" : \"unsigned long\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"boolean\";\r\n case TypeKind.F32: return \"unrestricted float\";\r\n case TypeKind.F64: return \"unrestricted double\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"interface ASModule {\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n/** A TypeScript definitions builder. */\r\nexport class TSDBuilder extends ExportsWalker {\r\n\r\n /** Builds TypeScript definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new TSDBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.STATIC)) {\r\n if (isConst) sb.push(\"static readonly \");\r\n else sb.push(\"static \");\r\n } else {\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"var \");\r\n }\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"enum \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n let numMembers = members.size;\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n indent(sb, this.indentLevel);\r\n sb.push(name);\r\n if (member.is(CommonFlags.INLINED)) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\",\\n\");\r\n --numMembers;\r\n }\r\n }\r\n if (numMembers) this.visitNamespace(element);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n if (element.isAny(CommonFlags.PRIVATE | CommonFlags.SET)) return;\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.GET)) {\r\n sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally\r\n sb.push(\": \");\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\";\\n\");\r\n return;\r\n } else {\r\n if (!element.isAny(CommonFlags.STATIC | CommonFlags.INSTANCE)) sb.push(\"function \");\r\n sb.push(element.simpleName);\r\n }\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(signature.getParameterName(i));\r\n sb.push(\": \");\r\n sb.push(this.typeToString(parameters[i]));\r\n }\r\n if (element.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.SET)) {\r\n sb.push(\")\");\r\n } else {\r\n sb.push(\"): \");\r\n sb.push(this.typeToString(signature.returnType));\r\n }\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n var isInterface = element.kind == ElementKind.INTERFACE;\r\n indent(sb, this.indentLevel++);\r\n if (isInterface) {\r\n sb.push(\"interface \");\r\n } else {\r\n if (element.is(CommonFlags.ABSTRACT)) sb.push(\"abstract \");\r\n sb.push(\"class \");\r\n }\r\n sb.push(element.simpleName);\r\n var base = element.base;\r\n if (base && base.is(CommonFlags.COMPILED | CommonFlags.MODULE_EXPORT)) {\r\n sb.push(\" extends \");\r\n sb.push(base.simpleName); // TODO: fqn\r\n }\r\n sb.push(\" {\\n\");\r\n var members = element.prototype.members; // static\r\n if (members) {\r\n for (let member of members.values()) {\r\n this.visitElement(member);\r\n }\r\n }\r\n var ctor = element.constructorInstance;\r\n if (ctor) this.visitFunction(ctor);\r\n members = element.members; // instance\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n if (element.is(CommonFlags.PRIVATE)) return;\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.READONLY)) sb.push(\"readonly \");\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitNamespace(element: Element): void {\r\n var members = element.members;\r\n if (members && members.size) {\r\n let sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"namespace \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"I64\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"I64\" : \"i32\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"U64\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"U64\" : \"u32\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"declare module ASModule {\\n\");\r\n sb.push(\" type i8 = number;\\n\");\r\n sb.push(\" type i16 = number;\\n\");\r\n sb.push(\" type i32 = number;\\n\");\r\n sb.push(\" type u8 = number;\\n\");\r\n sb.push(\" type u16 = number;\\n\");\r\n sb.push(\" type u32 = number;\\n\");\r\n sb.push(\" type f32 = number;\\n\");\r\n sb.push(\" type f64 = number;\\n\");\r\n sb.push(\" type bool = any;\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n sb.push(\"export default ASModule;\\n\");\r\n return this.sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n/** Tests if a namespace-like element has at least one compiled member. */\r\nfunction hasCompiledMember(element: Element): bool {\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (member.is(CommonFlags.COMPILED) || hasCompiledMember(member)) return true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n","/**\r\n * A decompiler that generates low-level AssemblyScript from WebAssembly binaries.\r\n * @module decompiler\r\n *//***/\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n ExpressionId,\r\n UnaryOp,\r\n BinaryOp,\r\n HostOp,\r\n FunctionRef,\r\n ExpressionRef,\r\n Index,\r\n getFunctionName,\r\n getFunctionBody,\r\n getFunctionParamCount,\r\n getFunctionParamType,\r\n getFunctionResultType,\r\n getExpressionId,\r\n getExpressionType,\r\n getBlockName,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getIfCondition,\r\n getIfTrue,\r\n getIfFalse,\r\n getLoopName,\r\n getLoopBody,\r\n getBreakName,\r\n getBreakCondition,\r\n getGetLocalIndex,\r\n getSetLocalIndex,\r\n getSetLocalValue,\r\n getLoadOffset,\r\n getLoadPtr,\r\n getStoreOffset,\r\n getStorePtr,\r\n getStoreValue,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getUnaryOp,\r\n getUnaryValue,\r\n getBinaryOp,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getSelectThen,\r\n getSelectElse,\r\n getSelectCondition,\r\n getDropValue,\r\n getReturnValue,\r\n getHostOp,\r\n getHostOperand\r\n} from \"./module\";\r\n\r\n// TODO :-)\r\n\r\nexport class Decompiler {\r\n\r\n static decompile(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n }\r\n\r\n text: string[] = [];\r\n functionId: i32 = 0;\r\n\r\n constructor() { }\r\n\r\n /** Decompiles a module to an AST that can then be serialized. */\r\n decompile(module: Module): void {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n decompileFunction(func: FunctionRef): void {\r\n var name = getFunctionName(func) || \"$\" + this.functionId.toString(10);\r\n var body = getFunctionBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (let i: Index = 0, k: Index = getFunctionParamCount(func); i < k; ++i) {\r\n if (i > 0) this.push(\", \");\r\n this.push(\"$\");\r\n this.push(i.toString(10));\r\n this.push(\": \");\r\n this.push(nativeTypeToType(getFunctionParamType(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(getFunctionResultType(func)));\r\n this.push(\" \");\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"\\n}\\n\");\r\n }\r\n ++this.functionId;\r\n }\r\n\r\n decompileExpression(expr: ExpressionRef): void {\r\n var id = getExpressionId(expr);\r\n var type = getExpressionType(expr);\r\n\r\n var nested: ExpressionRef;\r\n var string: string | null;\r\n var i: Index, k: Index;\r\n\r\n switch (id) {\r\n case ExpressionId.Block: { // TODO: magic\r\n if ((string = getBlockName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = getBlockChildCount(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(getBlockChild(expr, i));\r\n }\r\n this.push(\"}\\n\");\r\n return;\r\n }\r\n case ExpressionId.If: {\r\n if (type == NativeType.None) {\r\n this.push(\"if (\");\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(getIfTrue(expr));\r\n if (nested = getIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(getIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(getIfFalse(expr));\r\n }\r\n return;\r\n }\r\n case ExpressionId.Loop: {\r\n if ((string = getLoopName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(getLoopBody(expr));\r\n this.push(\"while (0);\\n\");\r\n }\r\n case ExpressionId.Break: {\r\n if (nested = getBreakCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = getBreakName(expr)) != null) {\r\n this.push(\"break \");\r\n this.push(string);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"break;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Switch:\r\n case ExpressionId.Call:\r\n case ExpressionId.CallImport:\r\n case ExpressionId.CallIndirect: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.GetLocal: {\r\n this.push(\"$\");\r\n this.push(getGetLocalIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(getSetLocalIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(getSetLocalValue(expr));\r\n return;\r\n }\r\n case ExpressionId.GetGlobal:\r\n case ExpressionId.SetGlobal: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.Load: {\r\n this.push(\"load<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getLoadOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getLoadPtr(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Store: {\r\n this.push(\"store<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getStoreOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getStorePtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getStoreValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Const: {\r\n switch (type) {\r\n case NativeType.I32: {\r\n this.push(getConstValueI32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.I64: {\r\n this.push(\r\n i64_to_string(\r\n i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(getConstValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(getConstValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NegF32:\r\n case UnaryOp.NegF64: {\r\n this.push(\"-\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: {\r\n this.push(\"!\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Binary: { // TODO: precedence\r\n switch (getBinaryOp(expr)) {\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.SubI32:\r\n case BinaryOp.SubI64:\r\n case BinaryOp.SubF32:\r\n case BinaryOp.SubF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.MulI32:\r\n case BinaryOp.MulI64:\r\n case BinaryOp.MulF32:\r\n case BinaryOp.MulF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivI32:\r\n case BinaryOp.DivI64:\r\n case BinaryOp.DivF32:\r\n case BinaryOp.DivF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n case ExpressionId.Select: {\r\n this.push(\"select<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.decompileExpression(getSelectThen(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectElse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(getDropValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = getReturnValue(expr)) {\r\n this.push(\"return \");\r\n this.decompileExpression(nested);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"return;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Host: {\r\n switch (getHostOp(expr)) {\r\n case HostOp.CurrentMemory: {\r\n this.push(\"memory.size()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"memory.grow(\");\r\n this.decompileExpression(getHostOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Nop: {\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Unreachable: {\r\n this.push(\"unreachable()\");\r\n return;\r\n }\r\n case ExpressionId.AtomicCmpxchg:\r\n case ExpressionId.AtomicRMW:\r\n case ExpressionId.AtomicWait:\r\n case ExpressionId.AtomicWake:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n private push(text: string): void {\r\n // mostly here so we can add debugging if necessary\r\n this.text.push(text);\r\n }\r\n\r\n finish(): string {\r\n var ret = this.text.join(\"\");\r\n this.text = [];\r\n return ret;\r\n }\r\n}\r\n\r\nfunction nativeTypeToType(type: NativeType): string {\r\n switch (type) {\r\n case NativeType.None: return \"void\";\r\n case NativeType.I32: return \"i32\";\r\n case NativeType.I64: return \"i64\";\r\n case NativeType.F32: return \"f32\";\r\n case NativeType.F64: return \"f64\";\r\n case NativeType.Unreachable: throw new Error(\"unreachable type\");\r\n case NativeType.Auto: throw new Error(\"auto type\");\r\n default: throw new Error(\"unexpected type\");\r\n }\r\n}\r\n","/**\r\n * 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 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 Global,\r\n DecoratorFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n ReportMode\r\n} from \"./resolver\";\r\n\r\nimport {\r\n CommonFlags\r\n} from \"./common\";\r\n\r\n/** Compiles a call to a built-in function. */\r\nexport function compileCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n\r\n var arg0: ExpressionRef,\r\n arg1: ExpressionRef,\r\n arg2: ExpressionRef,\r\n ret: ExpressionRef;\r\n\r\n // NOTE that some implementations below make use of the select expression where straight-forward.\r\n // whether worth or not should probably be tested once it's known if/how embedders handle it.\r\n // search: createSelect\r\n\r\n switch (prototype.internalName) {\r\n\r\n // types\r\n\r\n case \"isInteger\": { // isInteger() / isInteger(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.INTEGER) && !type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isFloat\": { // isFloat() / isFloat(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.FLOAT)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isSigned\": { // isSigned() / isSigned(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.SIGNED)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isReference\": { // isReference() / isReference(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n compiler.currentType = Type.bool;\r\n return type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isString\": { // isString() / isString(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n if (classType) {\r\n let stringInstance = compiler.program.stringInstance;\r\n if (stringInstance && classType.isAssignableTo(stringInstance)) return module.createI32(1);\r\n }\r\n return module.createI32(0);\r\n }\r\n case \"isArray\": { // isArray() / isArray(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n return classType != null && classType.lookupOverload(OperatorKind.INDEXED_GET) != null\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isDefined\": { // isDefined(expression) -> bool\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let element = compiler.resolver.resolveExpression(operands[0], compiler.currentFunction, ReportMode.SWALLOW);\r\n return module.createI32(element ? 1 : 0);\r\n }\r\n case \"isConstant\": { // isConstant(expression) -> bool\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let expr = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n compiler.currentType = Type.bool;\r\n return module.createI32(getExpressionId(expr) == ExpressionId.Const ? 1 : 0);\r\n }\r\n\r\n // math\r\n\r\n case \"clz\": { // clz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ClzI64\r\n : UnaryOp.ClzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.ClzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ctz\": { // ctz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.NONE, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.CtzI64\r\n : UnaryOp.CtzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.CtzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"popcnt\": { // popcnt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.PopcntI64\r\n : UnaryOp.PopcntI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.PopcntI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"rotl\": { // rotl(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotlI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotlI64\r\n : BinaryOp.RotlI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotlI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflows\r\n }\r\n case \"rotr\": { // rotr(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotrI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotrI64\r\n : BinaryOp.RotrI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotrI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflowws\r\n }\r\n case \"abs\": { // abs(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n // possibly overflows, e.g. abs(-128) == 128\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createSelect( // x > 0 ? x : 0-x\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI32, // ifFalse\r\n module.createI32(0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32)\r\n ),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n module.createI32(0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n compiler.options.usizeType.toNativeZero(module),\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n ),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType),\r\n compiler.options.usizeType.toNativeZero(module)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI64,\r\n module.createI64(0, 0),\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n ),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n module.createI64(0, 0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.BOOL: {\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.AbsF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.AbsF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"max\": { // max(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MaxF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MaxF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"min\": { // min(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MinF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MinF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ceil\": { // ceil(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.CeilF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.CeilF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"floor\": { // floor(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.FloorF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.FloorF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"copysign\": { // copysign(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) { // TODO: does an integer version make sense?\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.CopysignF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.CopysignF64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"nearest\": { // nearest(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.NearestF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.NearestF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"reinterpret\": { // reinterpret(value: *) -> T\r\n if (operands.length != 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (typeArguments[0].kind) {\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF32, arg0);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF64, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (typeArguments[0].is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.f64\r\n : Type.f32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ReinterpretF64\r\n : UnaryOp.ReinterpretF32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI64, arg0);\r\n break;\r\n }\r\n default: { // small integers and void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return ret;\r\n }\r\n case \"sqrt\": { // sqrt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) { // TODO: integer versions (that return f64 or convert)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.SqrtF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.SqrtF64, arg0);\r\n break;\r\n }\r\n // case TypeKind.VOID:\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"trunc\": { // trunc(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments && typeArguments.length) {\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n // TODO: truncate to contextual type directly (if not void etc.)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.TruncF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.TruncF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n // memory access\r\n\r\n case \"load\": { // load(offset: usize, constantOffset?: usize) -> *\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let offset = operands.length == 2 ? evaluateConstantOffset(compiler, operands[1]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return module.createLoad(\r\n typeArguments[0].byteSize,\r\n typeArguments[0].is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n arg0,\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n contextualType.size > typeArguments[0].size\r\n ? (compiler.currentType = contextualType).toNativeType()\r\n : (compiler.currentType = typeArguments[0]).toNativeType(),\r\n offset\r\n );\r\n }\r\n case \"store\": { // store(offset: usize, value: *, constantOffset?: usize) -> void\r\n compiler.currentType = Type.void;\r\n if (operands.length < 2 || operands.length > 3) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n typeArguments[0],\r\n typeArguments[0].is(TypeFlags.INTEGER)\r\n ? ConversionKind.NONE // no need to convert to small int (but now might result in a float)\r\n : ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let type: Type;\r\n if (\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n (\r\n !compiler.currentType.is(TypeFlags.INTEGER) || // float to int\r\n compiler.currentType.size < typeArguments[0].size // int to larger int (clear garbage bits)\r\n )\r\n ) {\r\n arg1 = compiler.convertExpression(\r\n arg1,\r\n compiler.currentType, typeArguments[0],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE, // still clears garbage bits\r\n operands[1]\r\n );\r\n type = typeArguments[0];\r\n } else {\r\n type = compiler.currentType;\r\n }\r\n let offset = operands.length == 3 ? evaluateConstantOffset(compiler, operands[2]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n return module.createStore(typeArguments[0].byteSize, arg0, arg1, type.toNativeType(), offset);\r\n }\r\n case \"sizeof\": { // sizeof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(byteSize);\r\n } else {\r\n ret = module.createI64(byteSize, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(byteSize, 0);\r\n } else {\r\n ret = module.createI32(byteSize);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"alignof\": { // alignof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n let alignLog2: i32;\r\n switch (byteSize) {\r\n case 1: { alignLog2 = 0; break; }\r\n case 2: { alignLog2 = 1; break; }\r\n case 4: { alignLog2 = 2; break; }\r\n case 8: { alignLog2 = 3; break; }\r\n default: { assert(false); return module.createUnreachable(); }\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(alignLog2);\r\n } else {\r\n ret = module.createI64(alignLog2, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(alignLog2, 0);\r\n } else {\r\n ret = module.createI32(alignLog2);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"offsetof\": { // offsetof(fieldName?: string) -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length > 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let classType = typeArguments[0].classReference;\r\n if (!classType) {\r\n compiler.error( // TODO: better error\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let offset: i32;\r\n if (operands.length) {\r\n if (\r\n operands[0].kind != NodeKind.LITERAL ||\r\n (operands[0]).literalKind != LiteralKind.STRING\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.String_literal_expected,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let fieldName = (operands[0]).value;\r\n let field = classType.members ? classType.members.get(fieldName) : null;\r\n if (!(field && field.kind == ElementKind.FIELD)) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_has_no_property_1,\r\n operands[0].range, classType.internalName, fieldName\r\n );\r\n return module.createUnreachable();\r\n }\r\n offset = (field).memoryOffset;\r\n } else {\r\n offset = classType.currentMemoryOffset;\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n return module.createI32(offset);\r\n } else {\r\n return module.createI64(offset);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n return module.createI64(offset);\r\n } else {\r\n return module.createI32(offset);\r\n }\r\n }\r\n }\r\n\r\n // control flow\r\n\r\n case \"select\": { // select(ifTrue: T, ifFalse: T, condition: bool) -> T\r\n if (operands.length != 3) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n let type = compiler.currentType;\r\n arg1 = compiler.compileExpression(operands[1], type, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n arg2 = compiler.makeIsTrueish(\r\n compiler.compileExpressionRetainType(operands[2], Type.bool, WrapMode.NONE),\r\n compiler.currentType\r\n );\r\n compiler.currentType = type;\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n default: { // any other value type\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unreachable\": { // unreachable() -> *\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n\r\n // host operations\r\n\r\n case \"memory.size\": { // memory.size() -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.CurrentMemory);\r\n }\r\n case \"memory.grow\": { // memory.grow(pages: i32) -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n arg0 = module.createUnreachable();\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.GrowMemory, null, [ arg0 ]);\r\n }\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n case \"memory.copy\": { // memory.copy(dest: usize, src: usize: n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.MoveMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n case \"memory.fill\": { // memory.fill(dest: usize, value: u8, n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n Type.u32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.SetMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n\r\n // other\r\n\r\n case \"changetype\": { // changetype(value: *) -> T\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpressionRetainType(\r\n operands[0],\r\n typeArguments[0],\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.size != typeArguments[0].size) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // if (reportNode.range.source.sourceKind != SourceKind.STDLIB)\r\n // compiler.warning(DiagnosticCode.Operation_is_unsafe, reportNode.range);\r\n return arg0; // any usize to any usize\r\n }\r\n case \"assert\": { // assert(isTrueish: T, message?: string) -> T with T != null\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else if (operands.length > 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.bool, WrapMode.WRAP);\r\n }\r\n\r\n let type = compiler.currentType;\r\n compiler.currentType = type.nonNullableType;\r\n\r\n // just return ifTrueish if assertions are disabled, or simplify if dropped anyway\r\n if (compiler.options.noAssert) {\r\n if (contextualType == Type.void) {\r\n compiler.currentType = Type.void;\r\n return module.createNop();\r\n }\r\n return arg0;\r\n }\r\n\r\n let abort = compileAbort(compiler, operands.length == 2 ? operands[1] : null, reportNode);\r\n\r\n compiler.currentType = type.nonNullableType;\r\n\r\n if (contextualType == Type.void) { // simplify if dropped anyway\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n // TODO: also check for NaN in float assertions, as in `Boolean(NaN) -> false`?\r\n case TypeKind.F32: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n arg0,\r\n module.createF32(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n arg0,\r\n module.createF64(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n default: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.I64)\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F32)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f64, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F64)\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unchecked\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = compiler.currentFunction.flow;\r\n flow.set(FlowFlags.UNCHECKED_CONTEXT);\r\n ret = compiler.compileExpressionRetainType(operands[0], contextualType, WrapMode.NONE);\r\n flow.unset(FlowFlags.UNCHECKED_CONTEXT);\r\n return ret;\r\n }\r\n case \"call_indirect\": { // call_indirect(target: Function | u32, ...args: *[]) -> T\r\n if (operands.length < 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let returnType: Type;\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n returnType = typeArguments[0];\r\n } else {\r\n returnType = contextualType;\r\n }\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n if (compiler.currentType.kind != TypeKind.U32) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let numOperands = operands.length - 1;\r\n let operandExprs = new Array(numOperands);\r\n let signatureParts = new Array(numOperands + 1);\r\n let nativeReturnType = returnType.toNativeType();\r\n let nativeParamTypes = new Array(numOperands);\r\n for (let i = 0; i < numOperands; ++i) {\r\n operandExprs[i] = compiler.compileExpressionRetainType(operands[1 + i], Type.i32, WrapMode.NONE);\r\n let operandType = compiler.currentType;\r\n signatureParts[i] = operandType.toSignatureString();\r\n nativeParamTypes[i] = operandType.toNativeType();\r\n }\r\n signatureParts[numOperands] = returnType.toSignatureString();\r\n let typeName = signatureParts.join(\"\");\r\n let typeRef = module.getFunctionTypeBySignature(nativeReturnType, nativeParamTypes);\r\n if (!typeRef) typeRef = module.addFunctionType(typeName, nativeReturnType, nativeParamTypes);\r\n compiler.currentType = returnType;\r\n // of course this can easily result in a 'RuntimeError: function signature mismatch' trap and\r\n // thus must be used with care. it exists because it *might* be useful in specific scenarios.\r\n return module.createCallIndirect(arg0, operandExprs, typeName);\r\n }\r\n\r\n // user-defined diagnostic macros\r\n\r\n case \"ERROR\": {\r\n compiler.error(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n case \"WARNING\": {\r\n compiler.warning(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createNop();\r\n }\r\n case \"INFO\": {\r\n compiler.info(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createNop();\r\n }\r\n\r\n // conversions\r\n\r\n case \"i8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"isize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"usize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"bool\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.bool;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.bool,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n // gc\r\n\r\n case \"iterateRoots\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n let expr = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n let type = compiler.currentType;\r\n let signatureReference = type.signatureReference;\r\n compiler.currentType = Type.void;\r\n if (\r\n !type.is(TypeFlags.REFERENCE) ||\r\n !signatureReference ||\r\n signatureReference.parameterTypes.length != 1 ||\r\n signatureReference.parameterTypes[0] != compiler.options.usizeType\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, type.toString(), \"(ref: usize) => void\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n // just emit a call even if the function doesn't yet exist\r\n compiler.needsIterateRoots = true;\r\n return module.createCall(\"~iterateRoots\", [ expr ], NativeType.None);\r\n }\r\n }\r\n var expr = deferASMCall(compiler, prototype, operands, contextualType, reportNode);\r\n if (expr) {\r\n if (typeArguments && typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return expr;\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n}\r\n\r\n/** Defers an inline-assembler-like call to a built-in function. */\r\nfunction deferASMCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (prototype.internalName) {\r\n\r\n // TODO: Operators can't be just deferred (don't have a corresponding generic built-in)\r\n // add, sub, mul, div_s, div_u, rem_s, rem_u\r\n // and, or, xor, shl, shr_u, shr_s\r\n // eq, eqz, ne, lt_s, lt_u, le_s, le_u, gt_s, gt_u, ge_s, ge_u\r\n\r\n case \"i32.clz\": return deferASM(\"clz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.clz\": return deferASM(\"clz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.ctz\": return deferASM(\"ctz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.ctz\": return deferASM(\"ctz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.popcnt\": return deferASM(\"popcnt\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.popcnt\": return deferASM(\"popcnt\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotl\": return deferASM(\"rotl\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotl\": return deferASM(\"rotl\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotr\": return deferASM(\"rotr\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotr\": return deferASM(\"rotr\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.abs\": return deferASM(\"abs\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.abs\": return deferASM(\"abs\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.max\": return deferASM(\"max\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.max\": return deferASM(\"max\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.min\": return deferASM(\"min\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.min\": return deferASM(\"min\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.ceil\": return deferASM(\"ceil\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.ceil\": return deferASM(\"ceil\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.floor\": return deferASM(\"floor\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.floor\": return deferASM(\"floor\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.copysign\": return deferASM(\"copysign\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.copysign\": return deferASM(\"copysign\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.nearest\": return deferASM(\"nearest\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.nearest\": return deferASM(\"nearest\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.reinterpret_f32\": return deferASM(\"reinterpret\", compiler, Type.i32, operands, Type.f32, reportNode);\r\n case \"i64.reinterpret_f64\": return deferASM(\"reinterpret\", compiler, Type.i64, operands, Type.f64, reportNode);\r\n case \"f32.reinterpret_i32\": return deferASM(\"reinterpret\", compiler, Type.f32, operands, Type.i32, reportNode);\r\n case \"f64.reinterpret_i64\": return deferASM(\"reinterpret\", compiler, Type.f64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.sqrt\": return deferASM(\"sqrt\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.sqrt\": return deferASM(\"sqrt\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.trunc\": return deferASM(\"trunc\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.trunc\": return deferASM(\"trunc\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u32, reportNode);\r\n case \"i32.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u32, reportNode);\r\n case \"i32.load\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u64, reportNode);\r\n case \"i64.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u64, reportNode);\r\n case \"i64.load32_s\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.load32_u\": return deferASM(\"load\", compiler, Type.u32, operands, Type.u64, reportNode);\r\n case \"i64.load\": return deferASM(\"load\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.load\": return deferASM(\"load\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.load\": return deferASM(\"load\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.store\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.store32\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.store\": return deferASM(\"store\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.store\": return deferASM(\"store\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.store\": return deferASM(\"store\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n }\r\n return 0;\r\n}\r\n\r\n/** A helper for deferring inline-assembler-like calls to built-in functions. */\r\nfunction deferASM(\r\n name: string,\r\n compiler: Compiler,\r\n typeArgument: Type,\r\n operands: Expression[],\r\n valueType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var prototype = assert(compiler.program.elementsLookup.get(name));\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return compileCall(compiler, prototype, [ typeArgument ], operands, valueType, reportNode);\r\n}\r\n\r\n/** Evaluates the constant type of a type argument *or* expression. */\r\nfunction evaluateConstantType(\r\n compiler: Compiler,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n reportNode: Node\r\n): Type | null {\r\n if (operands.length == 0) { // requires type argument\r\n if (!typeArguments || typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return null;\r\n }\r\n return typeArguments[0];\r\n }\r\n if (operands.length == 1) { // optional type argument\r\n if (typeArguments) {\r\n if (typeArguments.length == 1) {\r\n compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n if (typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return null;\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n } else {\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n return compiler.currentType;\r\n }\r\n if (typeArguments && typeArguments.length > 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return null;\r\n}\r\n\r\n/** Evaluates a `constantOffset` argument.*/\r\nfunction evaluateConstantOffset(compiler: Compiler, expression: Expression): i32 {\r\n var expr: ExpressionRef;\r\n var value: i32;\r\n if (compiler.options.isWasm64) {\r\n expr = compiler.precomputeExpression(expression, Type.usize64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I64 ||\r\n getConstValueI64High(expr) != 0 ||\r\n (value = getConstValueI64Low(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n } else {\r\n expr = compiler.precomputeExpression(expression, Type.usize32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I32 ||\r\n (value = getConstValueI32(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n }\r\n return value;\r\n}\r\n\r\n/** Compiles a memory allocation for an instance of the specified class. */\r\nexport function compileAllocate(\r\n compiler: Compiler,\r\n classInstance: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n assert(classInstance.program == program);\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n var allocateInstance = program.memoryAllocateInstance;\r\n if (!allocateInstance) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, \"memory.allocate\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!compiler.compileFunction(allocateInstance)) return module.createUnreachable();\r\n\r\n compiler.currentType = classInstance.type;\r\n return module.createCall(\r\n allocateInstance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(classInstance.currentMemoryOffset)\r\n : module.createI32(classInstance.currentMemoryOffset)\r\n ],\r\n options.nativeSizeType\r\n );\r\n}\r\n\r\n/** Compiles an abort wired to the conditionally imported 'abort' function. */\r\nexport function compileAbort(\r\n compiler: Compiler,\r\n message: Expression | null,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n var module = compiler.module;\r\n\r\n var stringType = program.typesLookup.get(\"string\");\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortInstance = program.abortInstance;\r\n if (!(abortInstance && compiler.compileFunction(abortInstance))) return module.createUnreachable();\r\n\r\n var messageArg = message != null\r\n ? compiler.compileExpression(message, stringType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : stringType.toNativeZero(module);\r\n\r\n var filenameArg = compiler.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\r\n/** Compiles the iterateRoots function if requires. */\r\nexport function compileIterateRoots(compiler: Compiler): void {\r\n var module = compiler.module;\r\n var exprs = new Array();\r\n\r\n for (let element of compiler.program.elementsLookup.values()) {\r\n if (element.kind != ElementKind.GLOBAL) continue;\r\n let global = element;\r\n let classReference = global.type.classReference;\r\n if (\r\n global.is(CommonFlags.COMPILED) &&\r\n classReference !== null &&\r\n !classReference.hasDecorator(DecoratorFlags.UNMANAGED)\r\n ) {\r\n if (global.is(CommonFlags.INLINED)) {\r\n let value = global.constantIntegerValue;\r\n exprs.push(\r\n module.createCallIndirect(\r\n module.createGetLocal(0, NativeType.I32),\r\n [\r\n compiler.options.isWasm64\r\n ? module.createI64(i64_low(value), i64_high(value))\r\n : module.createI32(i64_low(value))\r\n ],\r\n \"iv\"\r\n )\r\n );\r\n } else {\r\n exprs.push(\r\n module.createCallIndirect(\r\n module.createGetLocal(0, NativeType.I32),\r\n [\r\n module.createGetGlobal(\r\n global.internalName,\r\n compiler.options.nativeSizeType\r\n )\r\n ],\r\n \"iv\"\r\n )\r\n );\r\n }\r\n }\r\n }\r\n var typeRef = compiler.ensureFunctionType([ Type.i32 ], Type.void);\r\n module.addFunction(\"~iterateRoots\", typeRef, [],\r\n exprs.length\r\n ? module.createBlock(null, exprs)\r\n : module.createNop()\r\n );\r\n}\r\n","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","/** @module std/portable *//***/\r\n\r\nvar globalScope = typeof window !== \"undefined\" && window || typeof global !== \"undefined\" && global || self;\r\n\r\nglobalScope.ASC_TARGET = 0;\r\n\r\nObject.defineProperties(\r\n globalScope[\"i8\"] = function i8(value) { return value << 24 >> 24; }\r\n, {\r\n \"MIN_VALUE\": { value: -128, writable: false },\r\n \"MAX_VALUE\": { value: 127, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i16\"] = function i16(value) { return value << 16 >> 16; }\r\n, {\r\n \"MIN_VALUE\": { value: -32768, writable: false },\r\n \"MAX_VALUE\": { value: 32767, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i32\"] = globalScope[\"isize\"] = function i32(value) { return value | 0; }\r\n, {\r\n \"MIN_VALUE\": { value: -2147483648, writable: false },\r\n \"MAX_VALUE\": { value: 2147483647, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u8\"] = function u8(value) { return value & 0xff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 255, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u16\"] = function u16(value) { return value & 0xffff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 65535, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u32\"] = globalScope[\"usize\"] = function u32(value) { return value >>> 0; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 4294967295, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"bool\"] = function bool(value) { return !!value; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 1, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f32\"] = function f32(value) { return Math.fround(value); }\r\n, {\r\n \"MIN_VALUE\": { value: Math.fround(-3.40282347e+38), writable: false },\r\n \"MAX_VALUE\": { value: Math.fround(3.40282347e+38), writable: false },\r\n \"MIN_POSITIVE_VALUE\": { value: Math.fround(1.175494351e-38), writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -16777215, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 16777215, writable: false },\r\n \"EPSILON\": { value: Math.fround(1.19209290e-07), writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f64\"] = function f64(value) { return +value; }\r\n, {\r\n \"MIN_VALUE\": { value: -1.7976931348623157e+308, writable: false },\r\n \"MAX_VALUE\": { value: 1.7976931348623157e+308, writable: false },\r\n \"MIN_POSITIVE_VALUE\": { value: 2.2250738585072014e-308 , writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -9007199254740991, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 9007199254740991, writable: false },\r\n \"EPSILON\": { value: 2.2204460492503131e-16, writable: false }\r\n});\r\n\r\nglobalScope[\"clz\"] = Math.clz32;\r\n\r\nglobalScope[\"ctz\"] = function ctz(value) {\r\n var c = Math.clz32(value & -value);\r\n return value ? 31 - c : c;\r\n};\r\n\r\nglobalScope[\"popcnt\"] = function popcnt(value) {\r\n value -= value >>> 1 & 0x55555555;\r\n value = (value & 0x33333333) + (value >>> 2 & 0x33333333);\r\n return (((value + (value >>> 4)) & 0x0F0F0F0F) * 0x01010101) >>> 24;\r\n};\r\n\r\nglobalScope[\"rotl\"] = function rotl(value, shift) {\r\n shift &= 31;\r\n return (value << shift) | (value >>> (32 - shift));\r\n};\r\n\r\nglobalScope[\"rotr\"] = function rotr(value, shift) {\r\n shift &= 31;\r\n return (value >>> shift) | (value << (32 - shift));\r\n};\r\n\r\nglobalScope[\"abs\"] = Math.abs;\r\n\r\nglobalScope[\"max\"] = Math.max;\r\n\r\nglobalScope[\"min\"] = Math.min;\r\n\r\nglobalScope[\"ceil\"] = Math.ceil;\r\n\r\nglobalScope[\"floor\"] = Math.floor;\r\n\r\n// Adopt code from https://github.com/rfk/wasm-polyfill\r\nglobalScope[\"nearest\"] = function nearest(value) {\r\n if (Math.abs(value - Math.trunc(value)) === 0.5) {\r\n return 2.0 * Math.round(value * 0.5);\r\n }\r\n return Math.round(value);\r\n};\r\n\r\nglobalScope[\"select\"] = function select(ifTrue, ifFalse, condition) {\r\n return condition ? ifTrue : ifFalse;\r\n};\r\n\r\nglobalScope[\"sqrt\"] = Math.sqrt;\r\n\r\nglobalScope[\"trunc\"] = Math.trunc;\r\n\r\nglobalScope[\"copysign\"] = function copysign(x, y) {\r\n return Math.abs(x) * Math.sign(y);\r\n};\r\n\r\nglobalScope[\"bswap\"] = function bswap(value) {\r\n var a = value >> 8 & 0x00FF00FF;\r\n var b = (value & 0x00FF00FF) << 8;\r\n value = a | b;\r\n a = value >> 16 & 0x0000FFFF;\r\n b = (value & 0x0000FFFF) << 16;\r\n return a | b;\r\n};\r\n\r\nglobalScope[\"bswap16\"] = function bswap16(value) {\r\n return ((value << 8) & 0xFF00) | ((value >> 8) & 0x00FF) | (value & 0xFFFF0000);\r\n};\r\n\r\nfunction UnreachableError() {\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, UnreachableError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nUnreachableError.prototype = Object.create(Error.prototype);\r\nUnreachableError.prototype.name = \"UnreachableError\";\r\nUnreachableError.prototype.message = \"unreachable\";\r\n\r\nglobalScope[\"unreachable\"] = function unreachable() {\r\n throw new UnreachableError();\r\n};\r\n\r\nfunction AssertionError(message) {\r\n this.message = message || \"assertion failed\";\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, AssertionError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nAssertionError.prototype = Object.create(Error.prototype);\r\nAssertionError.prototype.name = \"AssertionError\";\r\n\r\nglobalScope[\"assert\"] = function assert(isTrueish, message) {\r\n if (isTrueish) return isTrueish;\r\n throw new AssertionError(message);\r\n};\r\n\r\nglobalScope[\"changetype\"] = function changetype(value) {\r\n return value;\r\n};\r\n\r\nglobalScope[\"parseI32\"] = function parseI32(str, radix) {\r\n return parseInt(str, undefined) | 0;\r\n};\r\n\r\nString[\"fromCharCodes\"] = function fromCharCodes(arr) {\r\n return String.fromCharCode.apply(String, arr);\r\n};\r\n\r\nString[\"fromCodePoints\"] = function fromCodePoints(arr) {\r\n return String.fromCodePoint.apply(String, arr);\r\n};\r\n\r\nglobalScope[\"isInteger\"] = Number.isInteger;\r\n\r\nglobalScope[\"isFloat\"] = function isFloat(arg) {\r\n return typeof arg === \"number\";\r\n};\r\n\r\nglobalScope[\"isReference\"] = function isClass(arg) {\r\n return typeof arg === \"object\" || typeof arg === \"string\";\r\n};\r\n\r\nglobalScope[\"isString\"] = function isString(arg) {\r\n return typeof arg === \"string\" || arg instanceof String;\r\n};\r\n\r\nglobalScope[\"isArray\"] = Array.isArray;\r\n\r\nglobalScope[\"unchecked\"] = function(expr) {\r\n return expr;\r\n};\r\n\r\nglobalScope[\"fmod\"] = function fmod(x, y) {\r\n return x % y;\r\n};\r\n\r\nglobalScope[\"fmodf\"] = function fmodf(x, y) {\r\n return Math.fround(x % y);\r\n};\r\n\r\nglobalScope[\"JSMath\"] = Math;\r\n\r\nglobalScope[\"memory\"] = (() => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n return {\r\n allocate: globalScope[\"__memory_allocate\"] || function allocate(size) {\r\n if (!(size >>>= 0)) return 0;\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7) HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n return ptr;\r\n },\r\n free: globalScope[\"__memory_free\"] || function free(ptr) { },\r\n copy: globalScope[\"__memory_copy\"] || function copy(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n }\r\n };\r\n})();\r\n\r\nglobalScope[\"store\"] = globalScope[\"__store\"] || function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n};\r\n\r\nglobalScope[\"load\"] = globalScope[\"__load\"] || function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n};\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__25__;","// Copy Binaryen exports to global scope\r\n\r\nconst binaryen = global.Binaryen || require(\"binaryen\");\r\nglobal.binaryen = binaryen;\r\n\r\nfor (var key in binaryen) {\r\n if (key.startsWith(\"_Binaryen\") || key.startsWith(\"_Relooper\")) global[key] = binaryen[key];\r\n}\r\n\r\n// Utilize Binaryen's heap\r\n\r\nglobal.__memory_allocate = binaryen._malloc;\r\nglobal.__memory_free = binaryen._free;\r\nglobal.__memory_copy = binaryen._memmove;\r\nglobal.__store = function(ptr, val) { binaryen.HEAPU8[ptr] = val; };\r\nglobal.__load = function(ptr) { return binaryen.HEAPU8[ptr]; };\r\n","/**\r\n * JavaScript glue code.\r\n * @module glue/js\r\n * @preferred\r\n *//***/\r\n\r\n/// \r\n\r\nimport \"./binaryen\"; // must be first so portable can pick up the memory implementation\r\nimport \"../../../std/portable/index\";\r\nimport \"./float\";\r\nimport \"./i64\";\r\n\r\nimport { Module } from \"../../module\";\r\n\r\nModule.prototype.toText = function(this: Module) {\r\n return new binaryen.Module(this.ref).emitText();\r\n};\r\n\r\nModule.prototype.toAsmjs = function(this: Module) {\r\n return new binaryen.Module(this.ref).emitAsmjs();\r\n};\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/src/parser.ts b/src/parser.ts index 45ef2215..f0a2b24f 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -2386,6 +2386,7 @@ export class Parser extends DiagnosticEmitter { let state = tn.mark(); let statement = this.parseStatement(tn, topLevel); if (!statement) { + if (tn.token == Token.ENDOFFILE) return null; tn.reset(state); this.skipStatement(tn); } else { @@ -3176,10 +3177,17 @@ export class Parser extends DiagnosticEmitter { return this.parseClassExpression(tn); } default: { - this.error( - DiagnosticCode.Expression_expected, - tn.range() - ); + if (token == Token.ENDOFFILE) { + this.error( + DiagnosticCode.Unexpected_end_of_text, + tn.range(startPos) + ); + } else { + this.error( + DiagnosticCode.Expression_expected, + tn.range() + ); + } return null; } }