diff --git a/dist/assemblyscript.js b/dist/assemblyscript.js index b9d8326d..7e195a8b 100644 --- a/dist/assemblyscript.js +++ b/dist/assemblyscript.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("binaryen")):"function"==typeof define&&define.amd?define(["binaryen"],t):"object"==typeof exports?exports.assemblyscript=t(require("binaryen")):e.assemblyscript=t(e.binaryen)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=29)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NONE=0]="NONE",e[e.IMPORT=1]="IMPORT",e[e.EXPORT=2]="EXPORT",e[e.DECLARE=4]="DECLARE",e[e.CONST=8]="CONST",e[e.LET=16]="LET",e[e.STATIC=32]="STATIC",e[e.READONLY=64]="READONLY",e[e.ABSTRACT=128]="ABSTRACT",e[e.PUBLIC=256]="PUBLIC",e[e.PRIVATE=512]="PRIVATE",e[e.PROTECTED=1024]="PROTECTED",e[e.GET=2048]="GET",e[e.SET=4096]="SET",e[e.AMBIENT=8192]="AMBIENT",e[e.GENERIC=16384]="GENERIC",e[e.GENERIC_CONTEXT=32768]="GENERIC_CONTEXT",e[e.INSTANCE=65536]="INSTANCE",e[e.CONSTRUCTOR=131072]="CONSTRUCTOR",e[e.ARROW=262144]="ARROW",e[e.MODULE_EXPORT=524288]="MODULE_EXPORT",e[e.MODULE_IMPORT=1048576]="MODULE_IMPORT",e[e.BUILTIN=2097152]="BUILTIN",e[e.COMPILED=4194304]="COMPILED",e[e.INLINED=8388608]="INLINED",e[e.SCOPED=16777216]="SCOPED",e[e.TRAMPOLINE=33554432]="TRAMPOLINE",e[e.VIRTUAL=67108864]="VIRTUAL",e[e.MAIN=134217728]="MAIN",e[e.QUOTED=268435456]="QUOTED"}(t.CommonFlags||(t.CommonFlags={})),t.PATH_DELIMITER="/",t.PARENT_SUBST="..",t.GETTER_PREFIX="get:",t.SETTER_PREFIX="set:",t.INSTANCE_DELIMITER="#",t.STATIC_DELIMITER=".",t.INNER_DELIMITER="~",t.LIBRARY_SUBST="~lib",t.LIBRARY_PREFIX=t.LIBRARY_SUBST+t.PATH_DELIMITER,t.FILESPACE_PREFIX="file:"},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(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 p=function(){function e(e,t,r){this.range=null,this.code=e,this.category=t,this.message=r}return e.create=function(t,r,n,a,s){void 0===n&&(n=null),void 0===a&&(a=null),void 0===s&&(s=null);var o=i.diagnosticCodeToString(t);return null!=n&&(o=o.replace("{0}",n)),null!=a&&(o=o.replace("{1}",a)),null!=s&&(o=o.replace("{2}",s)),new e(t,r,o)},e.createInfo=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.INFO,r,i)},e.createWarning=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.WARNING,r,i)},e.createError=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.ERROR,r,i)},e.prototype.withRange=function(e){return this.range=e,this},e.prototype.toString=function(){return this.range?o(this.category)+" "+this.code.toString(10)+': "'+this.message+'" in '+this.range.source.normalizedPath+":"+this.range.line.toString(10)+":"+this.range.column.toString(10):o(this.category)+" "+this.code.toString(10)+": "+this.message},e}();function l(e,r){void 0===r&&(r=!1);for(var n=e.source.text,i=n.length,s=e.start,o=e.end;s>0&&!a.isLineBreak(n.charCodeAt(s-1));)s--;for(;o=0?c.substring(p+1):c,o.statements=new Array,o.range=new a.Range(o,0,r.length),o.text=r,o}return n(t,e),Object.defineProperty(t.prototype,"isEntry",{get:function(){return this.sourceKind==q.ENTRY},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLibrary",{get:function(){return this.sourceKind==q.LIBRARY},enumerable:!0,configurable:!0}),t}(c);t.Source=Z;var J=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.decorators=null,t.cachedProgramLevelInternalName=null,t.cachedFileLevelInternalName=null,t}return n(t,e),Object.defineProperty(t.prototype,"programLevelInternalName",{get:function(){return this.cachedProgramLevelInternalName||(this.cachedProgramLevelInternalName=Re(this,!0)),this.cachedProgramLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"fileLevelInternalName",{get:function(){return this.cachedFileLevelInternalName||(this.cachedFileLevelInternalName=Re(this,!1)),this.cachedFileLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevel",{get:function(){var e=this.parent;return!!e&&(!(e.kind==s.VARIABLE&&!(e=e.parent))&&e.kind==s.SOURCE)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevelExport",{get:function(){var e=this.parent;return!(!e||e.kind==s.VARIABLE&&!(e=e.parent))&&(e.kind==s.NAMESPACEDECLARATION?this.is(i.CommonFlags.EXPORT)&&e.isTopLevelExport:e.kind==s.CLASSDECLARATION?this.is(i.CommonFlags.STATIC)&&e.isTopLevelExport:e.kind==s.SOURCE&&this.is(i.CommonFlags.EXPORT))},enumerable:!0,configurable:!0}),t.prototype.needsExplicitExport=function(e){return e.name.text!=e.externalName.text||this.range.source!=e.range.source||!this.isTopLevelExport},t}(j);t.DeclarationStatement=J;var $=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t}(J);t.VariableLikeDeclarationStatement=$;var ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BLOCK,t}return n(t,e),t}(j);t.BlockStatement=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BREAK,t}return n(t,e),t}(j);t.BreakStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CLASSDECLARATION,t}return n(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(J);t.ClassDeclaration=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CONTINUE,t}return n(t,e),t}(j);t.ContinueStatement=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.DO,t}return n(t,e),t}(j);t.DoStatement=ie;var ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EMPTY,t}return n(t,e),t}(j);t.EmptyStatement=ae;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMDECLARATION,t}return n(t,e),t}(J);t.EnumDeclaration=se;var oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMVALUEDECLARATION,t}return n(t,e),t}(J);t.EnumValueDeclaration=oe;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTIMPORT,t}return n(t,e),t}(c);t.ExportImportStatement=ce;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTMEMBER,t}return n(t,e),t}(c);t.ExportMember=pe;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORT,t}return n(t,e),t}(j);t.ExportStatement=le;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPRESSION,t}return n(t,e),t}(j);t.ExpressionStatement=ue;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FIELDDECLARATION,t.parameterIndex=-1,t}return n(t,e),t}($);t.FieldDeclaration=he;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FOR,t}return n(t,e),t}(j);t.ForStatement=de;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FUNCTIONDECLARATION,t}return n(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(J);t.FunctionDeclaration=_e;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return n(t,e),t}(j);t.IfStatement=me;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORTDECLARATION,t}return n(t,e),t}(J);t.ImportDeclaration=ye;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORT,t}return n(t,e),t}(j);t.ImportStatement=ge;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return n(t,e),t}(re);t.InterfaceDeclaration=Ee;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return n(t,e),t}(_e);t.MethodDeclaration=Te;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.NAMESPACEDECLARATION,t}return n(t,e),t}(J);t.NamespaceDeclaration=fe;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return n(t,e),t}(j);t.ReturnStatement=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCHCASE,t}return n(t,e),t}(c);t.SwitchCase=ve;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCH,t}return n(t,e),t}(j);t.SwitchStatement=Ae;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.THROW,t}return n(t,e),t}(j);t.ThrowStatement=Ce;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TRY,t}return n(t,e),t}(j);t.TryStatement=Ne;var Oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return n(t,e),t}(J);t.TypeDeclaration=Oe;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLEDECLARATION,t}return n(t,e),t}($);t.VariableDeclaration=Se;var Le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return n(t,e),t}(j);t.VariableStatement=Le;var be=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VOID,t}return n(t,e),t}(j);t.VoidStatement=be;var ke=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return n(t,e),t}(j);function Re(e,t){void 0===t&&(t=!1);var r=e.name.text,n=e.parent;return n&&(e.kind!=s.VARIABLEDECLARATION||n.kind!=s.VARIABLE||(n=n.parent))?n.kind==s.CLASSDECLARATION?Re(n,t)+(e.is(i.CommonFlags.STATIC)?i.STATIC_DELIMITER:i.INSTANCE_DELIMITER)+r:n.kind==s.NAMESPACEDECLARATION||n.kind==s.ENUMDECLARATION?Re(n,t)+i.STATIC_DELIMITER+r:t?r:e.range.source.internalPath+i.PATH_DELIMITER+r:r}function xe(e){return e.endsWith(".ts")&&(e=e.substring(0,e.length-3)),e}function Fe(e,t){for(var r=0,n=e.length;r=0;--s)free_memory(a[s])}},e.prototype.createCall=function(e,t,r){var n=h(e),i=u(t);try{return _BinaryenCall(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallImport=function(e,t,r){var n=h(e),i=u(t);try{return _BinaryenCallImport(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallIndirect=function(e,t,r){var n=u(t),i=h(r);try{return _BinaryenCallIndirect(this.ref,e,n,t&&t.length||0,i)}finally{free_memory(i),free_memory(n)}},e.prototype.createUnreachable=function(){return _BinaryenUnreachable(this.ref)},e.prototype.addGlobal=function(e,t,r,n){var i=h(e);try{return _BinaryenAddGlobal(this.ref,i,t,r?1:0,n)}finally{free_memory(i)}},e.prototype.addFunction=function(e,t,r,n){var i=h(e),a=l(r);try{return _BinaryenAddFunction(this.ref,i,t,a,r?r.length:0,n)}finally{free_memory(a),free_memory(i)}},e.prototype.removeFunction=function(e){var t=h(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{free_memory(t)}},e.prototype.addTemporaryFunction=function(e,t,r){this.hasTemporaryFunction=assert(!this.hasTemporaryFunction);var n=this.cachedTemporaryName;n||(this.cachedTemporaryName=n=h(""));var i=l(t);try{var a=_BinaryenAddFunctionType(this.ref,n,e,i,t?t.length:0);return _BinaryenAddFunction(this.ref,n,a,0,0,r)}finally{free_memory(i)}},e.prototype.removeTemporaryFunction=function(){this.hasTemporaryFunction=!assert(this.hasTemporaryFunction);var e=assert(this.cachedTemporaryName);_BinaryenRemoveFunction(this.ref,e),_BinaryenRemoveFunctionType(this.ref,e)},e.prototype.addFunctionExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addTableExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addMemoryExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addGlobalExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.removeExport=function(e){var t=h(e);try{_BinaryenRemoveExport(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=h(e),a=h(t),s=h(r);try{return _BinaryenAddFunctionImport(this.ref,i,a,s,n)}finally{free_memory(s),free_memory(a),free_memory(i)}},e.prototype.addTableImport=function(e,t,r){var n=h(e),i=h(t),a=h(r);try{return _BinaryenAddTableImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addMemoryImport=function(e,t,r){var n=h(e),i=h(t),a=h(r);try{return _BinaryenAddMemoryImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addGlobalImport=function(e,t,r,n){var i=h(e),a=h(t),s=h(r);try{return _BinaryenAddGlobalImport(this.ref,i,a,s,n)}finally{free_memory(s),free_memory(a),free_memory(i)}},e.prototype.removeImport=function(e){var t=h(e);try{_BinaryenRemoveImport(this.ref,t)}finally{free_memory(t)}},e.prototype.setMemory=function(e,t,r,n,i){void 0===i&&(i=null);for(var s=h(i),o=r.length,c=new Array(o),u=new Array(o),d=new Array(o),_=0;_=0;--_)free_memory(c[_]);free_memory(s)}},e.prototype.setFunctionTable=function(e){var t=u(e);try{_BinaryenSetFunctionTable(this.ref,t,e.length)}finally{free_memory(t)}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.setShrinkLevel=function(e){void 0===e&&(e=1),_BinaryenSetShrinkLevel(e)},e.prototype.setDebugInfo=function(e){void 0===e&&(e=!1),_BinaryenSetDebugInfo(e)},e.prototype.optimize=function(e){void 0===e&&(e=0),e?_BinaryenFunctionOptimize(e,this.ref):_BinaryenModuleOptimize(this.ref)},e.prototype.runPasses=function(e,t){void 0===t&&(t=0);for(var r=e.length,n=new Array(r),i=0;i=0;--i)free_memory(n[i])}},e.prototype.precomputeFunction=function(e){var t=this.cachedPrecomputeNames;if(!t){var r=h("precompute");this.cachedPrecomputeName=r,this.cachedPrecomputeNames=t=l([r])}_BinaryenFunctionRunPasses(e,this.ref,t,1)},e.prototype.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.cachedByValue,r=h(e),n=0,i=0;try{_BinaryenModuleAllocateAndWrite(t,this.ref,r),n=d(t);var a=d(t+4);i=d(t+8);var s=new m;return s.output=function(e,t){for(var r=new Uint8Array(t),n=0;n>8&255),store(r+2,a>>16&255),store(r+3,a>>>24),r+=4}return t}function u(e){return l(e)}function h(e){if(null==e)return 0;for(var t=allocate_memory(function(e){for(var t=0,r=0,n=e.length;r=55296&&i<=57343&&r+1=55296&&a<=57343&&n+1>>6),store(r++,128|63&a)):a<=65535?(store(r++,224|a>>>12),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=2097151?(store(r++,240|a>>>18),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=67108863?(store(r++,248|a>>>24),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):(store(r++,252|a>>>30),store(r++,128|a>>>24&63),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a))}return store(r,0),t}function d(e){return load(e)|load(e+1)<<8|load(e+2)<<16|load(e+3)<<24}function _(e){if(!e)return null;for(var t,r,n,i,a,s=new Array;t=load(e++);)128&t?(r=63&load(e++),192!=(224&t)?(n=63&load(e++),224==(240&t)?t=(15&t)<<12|r<<6|n:(i=63&load(e++),240==(248&t)?t=(7&t)<<18|r<<12|n<<6|i:(a=63&load(e++),t=248==(252&t)?(3&t)<<24|r<<18|n<<12|i<<6|a:(1&t)<<30|r<<24|n<<18|i<<12|a<<6|63&load(e++))),s.push(t)):s.push((31&t)<<6|r)):s.push(t);return String.fromCodePoints(s)}t.Relooper=c,t.readString=_;var m=function(){return function(){}}();t.BinaryModule=m},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return s};Object.defineProperty(t,"__esModule",{value:!0});var s,o=r(0),c=r(1),p=r(6),l=r(2),u=r(4),h=r(9),d=function(){return function(){}}(),_=function(){return function(){}}(),m=function(){return function(){}}();function y(e,t){switch(assert(t.length),e){case l.DecoratorKind.OPERATOR:case l.DecoratorKind.OPERATOR_BINARY:switch(t.charCodeAt(0)){case 91:if("[]"==t)return s.INDEXED_GET;if("[]="==t)return s.INDEXED_SET;break;case 123:if("{}"==t)return s.UNCHECKED_INDEXED_GET;if("{}="==t)return s.UNCHECKED_INDEXED_SET;break;case 43:if("+"==t)return s.ADD;break;case 45:if("-"==t)return s.SUB;break;case 42:if("*"==t)return s.MUL;if("**"==t)return s.POW;break;case 47:if("/"==t)return s.DIV;break;case 37:if("%"==t)return s.REM;break;case 38:if("&"==t)return s.BITWISE_AND;break;case 124:if("|"==t)return s.BITWISE_OR;break;case 94:if("^"==t)return s.BITWISE_XOR;break;case 61:if("=="==t)return s.EQ;break;case 33:if("!="==t)return s.NE;break;case 62:if(">"==t)return s.GT;if(">="==t)return s.GE;if(">>"==t)return s.BITWISE_SHR;if(">>>"==t)return s.BITWISE_SHR_U;break;case 60:if("<"==t)return s.LT;if("<="==t)return s.LE;if("<<"==t)return s.BITWISE_SHL}break;case l.DecoratorKind.OPERATOR_PREFIX:switch(t.charCodeAt(0)){case 43:if("+"==t)return s.PLUS;if("++"==t)return s.PREFIX_INC;break;case 45:if("-"==t)return s.MINUS;if("--"==t)return s.PREFIX_DEC;break;case 33:if("!"==t)return s.NOT;break;case 126:if("~"==t)return s.BITWISE_NOT}break;case l.DecoratorKind.OPERATOR_POSTFIX:switch(t.charCodeAt(0)){case 43:if("++"==t)return s.POSTFIX_INC;break;case 45:if("--"==t)return s.POSTFIX_DEC}}return s.INVALID}!function(e){e[e.INVALID=0]="INVALID",e[e.INDEXED_GET=1]="INDEXED_GET",e[e.INDEXED_SET=2]="INDEXED_SET",e[e.UNCHECKED_INDEXED_GET=3]="UNCHECKED_INDEXED_GET",e[e.UNCHECKED_INDEXED_SET=4]="UNCHECKED_INDEXED_SET",e[e.ADD=5]="ADD",e[e.SUB=6]="SUB",e[e.MUL=7]="MUL",e[e.DIV=8]="DIV",e[e.REM=9]="REM",e[e.POW=10]="POW",e[e.BITWISE_AND=11]="BITWISE_AND",e[e.BITWISE_OR=12]="BITWISE_OR",e[e.BITWISE_XOR=13]="BITWISE_XOR",e[e.BITWISE_SHL=14]="BITWISE_SHL",e[e.BITWISE_SHR=15]="BITWISE_SHR",e[e.BITWISE_SHR_U=16]="BITWISE_SHR_U",e[e.EQ=17]="EQ",e[e.NE=18]="NE",e[e.GT=19]="GT",e[e.GE=20]="GE",e[e.LT=21]="LT",e[e.LE=22]="LE",e[e.PLUS=23]="PLUS",e[e.MINUS=24]="MINUS",e[e.NOT=25]="NOT",e[e.BITWISE_NOT=26]="BITWISE_NOT",e[e.PREFIX_INC=27]="PREFIX_INC",e[e.PREFIX_DEC=28]="PREFIX_DEC",e[e.POSTFIX_INC=29]="POSTFIX_INC",e[e.POSTFIX_DEC=30]="POSTFIX_DEC"}(s=t.OperatorKind||(t.OperatorKind={}));var g,E,T=new Map,f=function(e){function t(t){void 0===t&&(t=null);var r=e.call(this,t)||this;return r.diagnosticsOffset=0,r.elementsLookup=new Map,r.instancesLookup=new Map,r.typesLookup=T,r.typeAliases=new Map,r.fileLevelExports=new Map,r.moduleLevelExports=new Map,r.arrayPrototype=null,r.stringInstance=null,r.mainFunction=null,r.resolver=new h.Resolver(r),r.sources=[],r}return n(t,e),t.prototype.getSource=function(e){for(var t=this.sources,r=0,n=t.length;r=0),assert(null!=e.type),e.type.toNativeType()){case u.NativeType.I32:t=this.tempI32s||(this.tempI32s=[]);break;case u.NativeType.I64:t=this.tempI64s||(this.tempI64s=[]);break;case u.NativeType.F32:t=this.tempF32s||(this.tempF32s=[]);break;case u.NativeType.F64:t=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}assert(e.index>=0),t.push(e)}},t.prototype.getAndFreeTempLocal=function(e,t){var r,n;switch(e.toNativeType()){case u.NativeType.I32:r=this.tempI32s||(this.tempI32s=[]);break;case u.NativeType.I64:r=this.tempI64s||(this.tempI64s=[]);break;case u.NativeType.F32:r=this.tempF32s||(this.tempF32s=[]);break;case u.NativeType.F64:r=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}return r.length?(n=r[r.length-1]).type=e:(n=this.addLocal(e),r.push(n)),e.is(36)&&this.flow.setLocalWrapped(n.index,t),n},t.prototype.enterBreakContext=function(){var e=this.nextBreakId++;return this.breakStack?this.breakStack.push(e):this.breakStack=[e],this.breakContext=e.toString(10)},t.prototype.leaveBreakContext=function(){assert(null!=this.breakStack);var e=this.breakStack.length;assert(e>0),this.breakStack.pop(),e>1?this.breakContext=this.breakStack[e-2].toString(10):(this.breakContext=null,this.breakStack=null)},t.prototype.finalize=function(e,t){if(this.ref=t,assert(!this.breakStack||!this.breakStack.length),this.breakStack=null,this.breakContext=null,this.tempI32s=this.tempI64s=this.tempF32s=this.tempF64s=null,this.program.options.sourceMap)for(var r=this.debugLocations,n=0,i=r.length;n=r.length)return!1;t=r[n],e-=64*(n+1)}return i64_ne(i64_and(t,i64_shl(i64_one,i64_new(e))),i64_zero)},e.prototype.setLocalWrapped=function(e,t){var r,n=-1;if(e<64){if(e<0)return;r=this.wrappedLocals}else{var i=this.wrappedLocalsExt;for(n=(e-64)/64|0,i||(this.wrappedLocalsExt=i=new Array(n+1),i.length=0);i.length<=n;)i.push(i64_new(0));r=i[n],e-=64*(n+1)}r=t?i64_or(r,i64_shl(i64_one,i64_new(e))):i64_and(r,i64_not(i64_shl(i64_one,i64_new(e)))),n>=0?this.wrappedLocalsExt[n]=r:this.wrappedLocals=r},e.prototype.inherit=function(e){this.flags|=2047&e.flags,this.wrappedLocals=e.wrappedLocals,this.wrappedLocalsExt=e.wrappedLocalsExt},e.prototype.inheritConditional=function(e){e.is(1)&&this.set(64),e.is(4)&&this.set(128),e.is(8)&&e.breakLabel==this.breakLabel&&this.set(256),e.is(16)&&e.continueLabel==this.continueLabel&&this.set(512),e.is(32)&&this.set(1024)},e.prototype.inheritMutual=function(e,t){this.flags|=e.flags&t.flags&63,this.flags|=1984&e.flags,this.flags|=1984&t.flags,this.wrappedLocals=i64_and(e.wrappedLocals,t.wrappedLocals);var r=e.wrappedLocalsExt,n=t.wrappedLocalsExt;if(null!=r&&null!=n){var i=this.wrappedLocalsExt,a=min(r.length,n.length);if(a){if(i)for(;i.lengtha):this.canOverflow(u.getBinaryLeft(e),t)&&!(u.getExpressionId(r=u.getBinaryRight(e))==u.ExpressionId.Const&&u.getConstValueI32(r)>=a);case u.BinaryOp.DivU32:case u.BinaryOp.RemI32:case u.BinaryOp.RemU32:return this.canOverflow(u.getBinaryLeft(e),t)||this.canOverflow(u.getBinaryRight(e),t)}break;case u.ExpressionId.Unary:switch(u.getUnaryOp(e)){case u.UnaryOp.EqzI32:case u.UnaryOp.EqzI64:return!1;case u.UnaryOp.ClzI32:case u.UnaryOp.CtzI32:case u.UnaryOp.PopcntI32:return t.size<7}break;case u.ExpressionId.Const:var s=0;switch(u.getExpressionType(e)){case u.NativeType.I32:s=u.getConstValueI32(e);break;case u.NativeType.I64:s=u.getConstValueI64Low(e);break;case u.NativeType.F32:s=i32(u.getConstValueF32(e));break;case u.NativeType.F64:s=i32(u.getConstValueF64(e));break;default:assert(!1)}switch(t.kind){case 0:return si8.MAX_VALUE;case 1:return si16.MAX_VALUE;case 5:return s<0||s>u8.MAX_VALUE;case 6:return s<0||s>u16.MAX_VALUE;case 10:return 0!=(-2&s)}break;case u.ExpressionId.Load:var o=void 0;switch(u.getLoadBytes(e)){case 1:o=u.isLoadSigned(e)?p.Type.i8:p.Type.u8;break;case 2:o=u.isLoadSigned(e)?p.Type.i16:p.Type.u16;break;default:o=u.isLoadSigned(e)?p.Type.i32:p.Type.u32}return z(o,t);case u.ExpressionId.Block:if(!u.getBlockName(e)){var c=assert(u.getBlockChildCount(e)),l=u.getBlockChild(e,c-1);return this.canOverflow(l,t)}break;case u.ExpressionId.If:return this.canOverflow(u.getIfTrue(e),t)||this.canOverflow(assert(u.getIfFalse(e)),t);case u.ExpressionId.Select:return this.canOverflow(u.getSelectThen(e),t)||this.canOverflow(u.getSelectElse(e),t);case u.ExpressionId.Call:var h=this.currentFunction.program,d=assert(h.instancesLookup.get(assert(u.getCallTarget(e))));assert(d.kind==g.FUNCTION);var _=d.signature.returnType;return!d.flow.is(2)||z(_,t);case u.ExpressionId.Unreachable:return!1}return!0},e.prototype.finalize=function(){assert(null==this.parent),this.continueLabel=null,this.breakLabel=null,this.returnLabel=null,this.contextualTypeArguments=null},e}();function z(e,t){var r=e.byteSize,n=t.byteSize;return!e.is(4)||r>n||e.is(1)!=t.is(1)}t.Flow=K},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(4);!function(e){e[e.I8=0]="I8",e[e.I16=1]="I16",e[e.I32=2]="I32",e[e.I64=3]="I64",e[e.ISIZE=4]="ISIZE",e[e.U8=5]="U8",e[e.U16=6]="U16",e[e.U32=7]="U32",e[e.U64=8]="U64",e[e.USIZE=9]="USIZE",e[e.BOOL=10]="BOOL",e[e.F32=11]="F32",e[e.F64=12]="F64",e[e.VOID=13]="VOID"}(t.TypeKind||(t.TypeKind={})),function(e){e[e.NONE=0]="NONE",e[e.SIGNED=1]="SIGNED",e[e.UNSIGNED=2]="UNSIGNED",e[e.INTEGER=4]="INTEGER",e[e.FLOAT=8]="FLOAT",e[e.POINTER=16]="POINTER",e[e.SHORT=32]="SHORT",e[e.LONG=64]="LONG",e[e.VALUE=128]="VALUE",e[e.REFERENCE=256]="REFERENCE",e[e.NULLABLE=512]="NULLABLE"}(t.TypeFlags||(t.TypeFlags={}));var i=function(){function e(e,t,r){this.cachedNullableType=null,this.kind=e,this.flags=t,this.size=r,this.byteSize=ceil(r/8),this.classReference=null,this.signatureReference=null,this.nonNullableType=this}return Object.defineProperty(e.prototype,"intType",{get:function(){switch(this.kind){case 0:return e.i8;case 1:return e.i16;case 11:case 2:return e.i32;case 12:case 3:return e.i64;case 4:return 64==this.size?e.isize64:e.isize32;case 5:return e.u8;case 6:return e.u16;case 7:return e.u32;case 8:return e.u64;case 9:return 64==this.size?e.usize64:e.usize32;case 10:default:return e.i32}},enumerable:!0,configurable:!0}),e.prototype.computeSmallIntegerShift=function(e){return e.size-this.size},e.prototype.computeSmallIntegerMask=function(e){var t=this.is(2)?this.size:this.size-1;return-1>>>e.size-t},e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.isAny=function(e){return 0!=(this.flags&e)},e.prototype.asClass=function(t){assert(9==this.kind&&!this.classReference);var r=new e(this.kind,-129&this.flags|256,this.size);return r.classReference=t,r},e.prototype.asFunction=function(t){assert(7==this.kind&&!this.signatureReference);var r=new e(this.kind,-129&this.flags|256,this.size);return r.signatureReference=t,r},e.prototype.asNullable=function(){return assert(this.is(256)),this.cachedNullableType||(assert(!this.is(512)),this.cachedNullableType=new e(this.kind,512|this.flags,this.size),this.cachedNullableType.nonNullableType=this,this.cachedNullableType.classReference=this.classReference,this.cachedNullableType.signatureReference=this.signatureReference),this.cachedNullableType},e.prototype.isAssignableTo=function(e,t){var r,n,i,a;if(void 0===t&&(t=!1),this.is(256)){if(e.is(256)&&(!this.is(512)||e.is(512)))if(r=this.classReference){if(n=e.classReference)return r.isAssignableTo(n)}else if((i=this.signatureReference)&&(a=e.signatureReference))return i.isAssignableTo(a)}else if(!e.is(256))if(this.is(4))if(e.is(4)){if(!t||this.is(1)==e.is(1))return this.size<=e.size}else{if(11==e.kind)return this.size<=23;if(12==e.kind)return this.size<=52}else if(this.is(8)&&e.is(8))return this.size<=e.size;return!1},e.commonCompatible=function(e,t,r){return t.isAssignableTo(e,r)?e:e.isAssignableTo(t,r)?t:null},e.prototype.toString=function(e){if(void 0===e&&(e=!1),!e&&this.is(256)){var t=this.classReference;if(t)return this.is(512)?t.toString()+" | null":t.toString();var r=this.signatureReference;if(r)return this.is(512)?"("+r.toString(!0)+") | null":r.toString(!0);assert(!1)}switch(this.kind){case 0:return"i8";case 1:return"i16";case 2:return"i32";case 3:return"i64";case 4:return"isize";case 5:return"u8";case 6:return"u16";case 7:return"u32";case 8:return"u64";case 9:return"usize";case 10:return"bool";case 11:return"f32";case 12:return"f64";default:assert(!1);case 13:return"void"}},e.prototype.toNativeType=function(){switch(this.kind){default:return n.NativeType.I32;case 3:case 8:return n.NativeType.I64;case 4:case 9:return 64==this.size?n.NativeType.I64:n.NativeType.I32;case 11:return n.NativeType.F32;case 12:return n.NativeType.F64;case 13:return n.NativeType.None}},e.prototype.toNativeZero=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(0);case 4:case 9:if(64!=this.size)return e.createI32(0);case 3:case 8:return e.createI64(0);case 11:return e.createF32(0);case 12:return e.createF64(0)}},e.prototype.toNativeOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(1);case 4:case 9:if(64!=this.size)return e.createI32(1);case 3:case 8:return e.createI64(1);case 11:return e.createF32(1);case 12:return e.createF64(1)}},e.prototype.toNativeNegOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(-1);case 4:case 9:if(64!=this.size)return e.createI32(-1);case 3:case 8:return e.createI64(-1,-1);case 11:return e.createF32(-1);case 12:return e.createF64(-1)}},e.prototype.toSignatureString=function(){switch(this.kind){default:return"i";case 3:case 8:return"I";case 4:case 9:return 64==this.size?"I":"i";case 11:return"f";case 12:return"F";case 13:return"v"}},e.i8=new e(0,165,8),e.i16=new e(1,165,16),e.i32=new e(2,133,32),e.i64=new e(3,197,64),e.isize32=new e(4,149,32),e.isize64=new e(4,213,64),e.u8=new e(5,166,8),e.u16=new e(6,166,16),e.u32=new e(7,134,32),e.u64=new e(8,198,64),e.usize32=new e(9,150,32),e.usize64=new e(9,214,64),e.bool=new e(10,166,1),e.f32=new e(11,137,32),e.f64=new e(12,201,64),e.void=new e(13,0,0),e}();t.Type=i,t.typesToNativeTypes=function(e){for(var t=e.length,r=new Array(t),n=0;ne?t[e]:o(e)},e.prototype.isAssignableTo=function(e){var t=this.thisType,r=e.thisType;if(t){if(!r||!t.isAssignableTo(r))return!1}else if(r)return!1;if(this.hasRest!=e.hasRest)return!1;var n=this.parameterTypes,i=e.parameterTypes,a=n.length;if(a!=i.length)return!1;for(var s=0;s=p&&u!=l?t.push("?: "):t.push(": "),t.push(i[u].toString());return t.push(") => "),t.push(this.returnType.toString()),t.join("")},e}();t.Signature=a;var s=null;function o(e){s||(s=[]);for(var t=s.length;t<=e;++t)s.push("arg$"+t.toString(10));return s[e-1]}t.getDefaultParameterName=o},function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var i,a,s=r(1),o=r(2),c=r(3);function p(e){switch(assert(e.length),e.charCodeAt(0)){case 97:switch(e){case"abstract":return i.ABSTRACT;case"as":return i.AS;case"async":return i.ASYNC;case"await":return i.AWAIT}break;case 98:switch(e){case"break":return i.BREAK}break;case 99:switch(e){case"case":return i.CASE;case"catch":return i.CATCH;case"class":return i.CLASS;case"continue":return i.CONTINUE;case"const":return i.CONST;case"constructor":return i.CONSTRUCTOR}break;case 100:switch(e){case"debugger":return i.DEBUGGER;case"declare":return i.DECLARE;case"default":return i.DEFAULT;case"delete":return i.DELETE;case"do":return i.DO}break;case 101:switch(e){case"else":return i.ELSE;case"enum":return i.ENUM;case"export":return i.EXPORT;case"extends":return i.EXTENDS}break;case 102:switch(e){case"false":return i.FALSE;case"finally":return i.FINALLY;case"for":return i.FOR;case"from":return i.FROM;case"function":return i.FUNCTION}break;case 103:switch(e){case"get":return i.GET}break;case 105:switch(e){case"if":return i.IF;case"implements":return i.IMPLEMENTS;case"import":return i.IMPORT;case"in":return i.IN;case"instanceof":return i.INSTANCEOF;case"interface":return i.INTERFACE;case"is":return i.IS}break;case 107:switch(e){case"keyof":return i.KEYOF}break;case 108:switch(e){case"let":return i.LET}break;case 109:switch(e){case"module":return i.MODULE}break;case 110:switch(e){case"namespace":return i.NAMESPACE;case"new":return i.NEW;case"null":return i.NULL}break;case 111:switch(e){case"of":return i.OF}break;case 112:switch(e){case"package":return i.PACKAGE;case"private":return i.PRIVATE;case"protected":return i.PROTECTED;case"public":return i.PUBLIC}break;case 114:switch(e){case"readonly":return i.READONLY;case"return":return i.RETURN}break;case 115:switch(e){case"set":return i.SET;case"static":return i.STATIC;case"super":return i.SUPER;case"switch":return i.SWITCH}break;case 116:switch(e){case"this":return i.THIS;case"throw":return i.THROW;case"true":return i.TRUE;case"try":return i.TRY;case"type":return i.TYPE;case"typeof":return i.TYPEOF}break;case 118:switch(e){case"var":return i.VAR;case"void":return i.VOID}break;case 119:switch(e){case"while":return i.WHILE;case"with":return i.WITH}break;case 121:switch(e){case"yield":return i.YIELD}}return i.INVALID}function l(e){switch(e){case i.ABSTRACT:case i.AS:case i.CONSTRUCTOR:case i.DECLARE:case i.DELETE:case i.FROM:case i.FOR:case i.GET:case i.IS:case i.KEYOF:case i.MODULE:case i.NAMESPACE:case i.READONLY:case i.SET:case i.TYPE:return!0;default:return!1}}!function(e){e[e.ABSTRACT=0]="ABSTRACT",e[e.AS=1]="AS",e[e.ASYNC=2]="ASYNC",e[e.AWAIT=3]="AWAIT",e[e.BREAK=4]="BREAK",e[e.CASE=5]="CASE",e[e.CATCH=6]="CATCH",e[e.CLASS=7]="CLASS",e[e.CONST=8]="CONST",e[e.CONTINUE=9]="CONTINUE",e[e.CONSTRUCTOR=10]="CONSTRUCTOR",e[e.DEBUGGER=11]="DEBUGGER",e[e.DECLARE=12]="DECLARE",e[e.DEFAULT=13]="DEFAULT",e[e.DELETE=14]="DELETE",e[e.DO=15]="DO",e[e.ELSE=16]="ELSE",e[e.ENUM=17]="ENUM",e[e.EXPORT=18]="EXPORT",e[e.EXTENDS=19]="EXTENDS",e[e.FALSE=20]="FALSE",e[e.FINALLY=21]="FINALLY",e[e.FOR=22]="FOR",e[e.FROM=23]="FROM",e[e.FUNCTION=24]="FUNCTION",e[e.GET=25]="GET",e[e.IF=26]="IF",e[e.IMPLEMENTS=27]="IMPLEMENTS",e[e.IMPORT=28]="IMPORT",e[e.IN=29]="IN",e[e.INSTANCEOF=30]="INSTANCEOF",e[e.INTERFACE=31]="INTERFACE",e[e.IS=32]="IS",e[e.KEYOF=33]="KEYOF",e[e.LET=34]="LET",e[e.MODULE=35]="MODULE",e[e.NAMESPACE=36]="NAMESPACE",e[e.NEW=37]="NEW",e[e.NULL=38]="NULL",e[e.OF=39]="OF",e[e.PACKAGE=40]="PACKAGE",e[e.PRIVATE=41]="PRIVATE",e[e.PROTECTED=42]="PROTECTED",e[e.PUBLIC=43]="PUBLIC",e[e.READONLY=44]="READONLY",e[e.RETURN=45]="RETURN",e[e.SET=46]="SET",e[e.STATIC=47]="STATIC",e[e.SUPER=48]="SUPER",e[e.SWITCH=49]="SWITCH",e[e.THIS=50]="THIS",e[e.THROW=51]="THROW",e[e.TRUE=52]="TRUE",e[e.TRY=53]="TRY",e[e.TYPE=54]="TYPE",e[e.TYPEOF=55]="TYPEOF",e[e.VAR=56]="VAR",e[e.VOID=57]="VOID",e[e.WHILE=58]="WHILE",e[e.WITH=59]="WITH",e[e.YIELD=60]="YIELD",e[e.OPENBRACE=61]="OPENBRACE",e[e.CLOSEBRACE=62]="CLOSEBRACE",e[e.OPENPAREN=63]="OPENPAREN",e[e.CLOSEPAREN=64]="CLOSEPAREN",e[e.OPENBRACKET=65]="OPENBRACKET",e[e.CLOSEBRACKET=66]="CLOSEBRACKET",e[e.DOT=67]="DOT",e[e.DOT_DOT_DOT=68]="DOT_DOT_DOT",e[e.SEMICOLON=69]="SEMICOLON",e[e.COMMA=70]="COMMA",e[e.LESSTHAN=71]="LESSTHAN",e[e.GREATERTHAN=72]="GREATERTHAN",e[e.LESSTHAN_EQUALS=73]="LESSTHAN_EQUALS",e[e.GREATERTHAN_EQUALS=74]="GREATERTHAN_EQUALS",e[e.EQUALS_EQUALS=75]="EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS=76]="EXCLAMATION_EQUALS",e[e.EQUALS_EQUALS_EQUALS=77]="EQUALS_EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS_EQUALS=78]="EXCLAMATION_EQUALS_EQUALS",e[e.EQUALS_GREATERTHAN=79]="EQUALS_GREATERTHAN",e[e.PLUS=80]="PLUS",e[e.MINUS=81]="MINUS",e[e.ASTERISK_ASTERISK=82]="ASTERISK_ASTERISK",e[e.ASTERISK=83]="ASTERISK",e[e.SLASH=84]="SLASH",e[e.PERCENT=85]="PERCENT",e[e.PLUS_PLUS=86]="PLUS_PLUS",e[e.MINUS_MINUS=87]="MINUS_MINUS",e[e.LESSTHAN_LESSTHAN=88]="LESSTHAN_LESSTHAN",e[e.GREATERTHAN_GREATERTHAN=89]="GREATERTHAN_GREATERTHAN",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN=90]="GREATERTHAN_GREATERTHAN_GREATERTHAN",e[e.AMPERSAND=91]="AMPERSAND",e[e.BAR=92]="BAR",e[e.CARET=93]="CARET",e[e.EXCLAMATION=94]="EXCLAMATION",e[e.TILDE=95]="TILDE",e[e.AMPERSAND_AMPERSAND=96]="AMPERSAND_AMPERSAND",e[e.BAR_BAR=97]="BAR_BAR",e[e.QUESTION=98]="QUESTION",e[e.COLON=99]="COLON",e[e.EQUALS=100]="EQUALS",e[e.PLUS_EQUALS=101]="PLUS_EQUALS",e[e.MINUS_EQUALS=102]="MINUS_EQUALS",e[e.ASTERISK_EQUALS=103]="ASTERISK_EQUALS",e[e.ASTERISK_ASTERISK_EQUALS=104]="ASTERISK_ASTERISK_EQUALS",e[e.SLASH_EQUALS=105]="SLASH_EQUALS",e[e.PERCENT_EQUALS=106]="PERCENT_EQUALS",e[e.LESSTHAN_LESSTHAN_EQUALS=107]="LESSTHAN_LESSTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_EQUALS=108]="GREATERTHAN_GREATERTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS=109]="GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS",e[e.AMPERSAND_EQUALS=110]="AMPERSAND_EQUALS",e[e.BAR_EQUALS=111]="BAR_EQUALS",e[e.CARET_EQUALS=112]="CARET_EQUALS",e[e.AT=113]="AT",e[e.IDENTIFIER=114]="IDENTIFIER",e[e.STRINGLITERAL=115]="STRINGLITERAL",e[e.INTEGERLITERAL=116]="INTEGERLITERAL",e[e.FLOATLITERAL=117]="FLOATLITERAL",e[e.INVALID=118]="INVALID",e[e.ENDOFFILE=119]="ENDOFFILE"}(i=t.Token||(t.Token={})),function(e){e[e.DEFAULT=0]="DEFAULT",e[e.PREFER=1]="PREFER",e[e.ALWAYS=2]="ALWAYS"}(a=t.IdentifierHandling||(t.IdentifierHandling={})),t.tokenFromKeyword=p,t.tokenIsAlsoIdentifier=l,t.operatorTokenToString=function(e){switch(e){case i.DELETE:return"delete";case i.IN:return"in";case i.INSTANCEOF:return"instanceof";case i.NEW:return"new";case i.TYPEOF:return"typeof";case i.VOID:return"void";case i.YIELD:return"yield";case i.DOT_DOT_DOT:return"...";case i.COMMA:return",";case i.LESSTHAN:return"<";case i.GREATERTHAN:return">";case i.LESSTHAN_EQUALS:return"<=";case i.GREATERTHAN_EQUALS:return">=";case i.EQUALS_EQUALS:return"==";case i.EXCLAMATION_EQUALS:return"!=";case i.EQUALS_EQUALS_EQUALS:return"===";case i.EXCLAMATION_EQUALS_EQUALS:return"!==";case i.PLUS:return"+";case i.MINUS:return"-";case i.ASTERISK_ASTERISK:return"**";case i.ASTERISK:return"*";case i.SLASH:return"/";case i.PERCENT:return"%";case i.PLUS_PLUS:return"++";case i.MINUS_MINUS:return"--";case i.LESSTHAN_LESSTHAN:return"<<";case i.GREATERTHAN_GREATERTHAN:return">>";case i.GREATERTHAN_GREATERTHAN_GREATERTHAN:return">>>";case i.AMPERSAND:return"&";case i.BAR:return"|";case i.CARET:return"^";case i.EXCLAMATION:return"!";case i.TILDE:return"~";case i.AMPERSAND_AMPERSAND:return"&&";case i.BAR_BAR:return"||";case i.EQUALS:return"=";case i.PLUS_EQUALS:return"+=";case i.MINUS_EQUALS:return"-=";case i.ASTERISK_EQUALS:return"*=";case i.ASTERISK_ASTERISK_EQUALS:return"**=";case i.SLASH_EQUALS:return"/=";case i.PERCENT_EQUALS:return"%=";case i.LESSTHAN_LESSTHAN_EQUALS:return"<<=";case i.GREATERTHAN_GREATERTHAN_EQUALS:return">>=";case i.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:return">>>=";case i.AMPERSAND_EQUALS:return"&=";case i.BAR_EQUALS:return"|=";case i.CARET_EQUALS:return"^=";default:return assert(!1),""}};var u=function(){function e(e,t,r){this.debugInfoRef=0,this.source=e,this.start=t,this.end=r}return e.join=function(t,r){if(t.source!=r.source)throw new Error("source mismatch");return new e(t.source,t.startr.end?t.end:r.end)},Object.defineProperty(e.prototype,"atStart",{get:function(){return new e(this.source,this.start,this.start)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"atEnd",{get:function(){return new e(this.source,this.end,this.end)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"line",{get:function(){for(var e=this.source.text,t=1,r=this.start;r>=0;--r)10==e.charCodeAt(r)&&t++;return t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"column",{get:function(){for(var e=this.source.text,t=0,r=this.start-1;r>=0&&10!=e.charCodeAt(r);--r)++t;return t},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.source.text.substring(this.start,this.end)},e}();t.Range=u;var h=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,r)||this;n.end=0,n.pos=0,n.token=-1,n.tokenPos=0,n.nextToken=-1,n.nextTokenPos=0,n.nextTokenOnNewLine=!1,n.onComment=null,n.source=t,n.pos=0,n.end=t.text.length,n.diagnostics=r||new Array;var i=t.text;if(n.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos+11&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos3&&this.pos1&&this.pos1&&this.pos=this.end){n+=e.substring(r,this.pos),this.error(s.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.end));break}var i=e.charCodeAt(this.pos);if(i==t){n+=e.substring(r,this.pos++);break}if(92!=i){if(c.isLineBreak(i)){n+=e.substring(r,this.pos),this.error(s.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.pos));break}++this.pos}else n+=e.substring(r,this.pos),n+=this.readEscapeSequence(),r=this.pos}return n},t.prototype.readEscapeSequence=function(){if(++this.pos>=this.end)return this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(this.end)),"";var e=this.source.text,t=e.charCodeAt(this.pos++);switch(t){case 48:return"\0";case 98:return"\b";case 116:return"\t";case 110:return"\n";case 118:return"\v";case 102:return"\f";case 114:return"\r";case 39:return"'";case 34:return'"';case 117:return this.pos=this.end){this.error(s.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.end));break}if(92!=e.charCodeAt(this.pos)){var n=e.charCodeAt(this.pos);if(47==n&&!r)break;if(c.isLineBreak(n)){this.error(s.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.pos));break}++this.pos,r=!1}else++this.pos,r=!0}return e.substring(t,this.pos)},t.prototype.readRegexpFlags=function(){for(var e=this.source.text,t=this.pos,r=0;this.pos57)&&95!=r)break;t++}return!0},t.prototype.readInteger=function(){var e=this.source.text;if(48==e.charCodeAt(this.pos)&&this.pos+2=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else if(o>=65&&o<=70)r=i64_add(i64_mul(r,n),i64_new(10+o-65,0));else if(o>=97&&o<=102)r=i64_add(i64_mul(r,n),i64_new(10+o-97,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readDecimalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(10,0),i=t;this.pos=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readOctalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(8,0),i=t;this.pos=48&&o<=55)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}++this.pos}return this.pos==t?this.error(s.DiagnosticCode.Octal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readBinaryInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(2,0),i=i64_new(1,0),a=t;this.pos=48&&n<=57)t=16*t+n-48;else if(n>=65&&n<=70)t=16*t+10+n-65;else{if(!(n>=97&&n<=102))return this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(this.pos-1,this.pos)),"";t=16*t+10+n-97}if(0==--e)break}return e?(this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(this.pos)),""):String.fromCharCode(t)},t.prototype.readExtendedUnicodeEscape=function(){var e=this.pos,t=this.readHexInteger(),r=i64_low(t),n=!1;assert(!i64_high(t)),r>1114111&&(this.error(s.DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,this.range(e,this.pos)),n=!0);var i=this.source.text;return this.pos>=this.end?(this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(e,this.end)),n=!0):125==i.charCodeAt(this.pos)?++this.pos:(this.error(s.DiagnosticCode.Unterminated_Unicode_escape_sequence,this.range(e,this.pos)),n=!0),n?"":r<65536?String.fromCharCode(r):String.fromCharCode(55296+((r-65536)/1024|0),(r-65536)%1024+56320)},t.prototype.finish=function(){},t}(s.DiagnosticEmitter);t.Tokenizer=h;var d=function(){return function(){}}();t.State=d;var _=null},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return s};Object.defineProperty(t,"__esModule",{value:!0});var s,o=r(1),c=r(5),p=r(2),l=r(6),u=r(0);!function(e){e[e.REPORT=0]="REPORT",e[e.SWALLOW=1]="SWALLOW"}(s=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==p.NodeKind.SIGNATURE){var n=this.resolveSignature(e,t,r);return n?e.isNullable?n.type.asNullable():n.type:null}assert(e.kind==p.NodeKind.TYPE);var i=e,a=i.name.text,h=a,d=i.range.source.internalPath+u.PATH_DELIMITER+a,_=this.program.elementsLookup,m=void 0;if((m=_.get(d))||(m=_.get(h)))switch(m.kind){case c.ElementKind.ENUM:return null!==i.typeArguments&&i.typeArguments.length?(r==s.REPORT&&this.error(o.DiagnosticCode.Type_0_is_not_generic,e.range,m.internalName),null):l.Type.i32;case c.ElementKind.CLASS_PROTOTYPE:var y=this.resolveClassInclTypeArguments(m,i.typeArguments,t,e);return y?e.isNullable?y.type.asNullable():y.type:null}var g=this.program.typeAliases.get(a);if(g)return this.resolveType(g.type,t,r);var E=i.typeArguments;if(E){for(var T=E.length,f=new Array(T),I=0;I",h+="<"+A+">")}else if(t){var C=t.get(h);if(C)return C}}var N=this.program.typesLookup,O=void 0;return(O=N.get(d))||(O=N.get(h))?O:(r==s.REPORT&&this.error(o.DiagnosticCode.Cannot_find_name_0,i.name.range,h),null)},t.prototype.resolveSignature=function(e,t,r){void 0===t&&(t=null),void 0===r&&(r=s.REPORT);var n=e.explicitThisType,i=null;if(n&&!(i=this.resolveType(n,t,r)))return null;for(var a=e.parameters,o=a.length,c=new Array(o),u=new Array(o),h=0,d=!1,_=0;_"),_=new c.Function(e,H,V,R||g,r),e.instances.set(d,_),this.program.instancesLookup.set(H,_),_},t.prototype.resolveFunctionPartially=function(e,t,r){void 0===r&&(r=s.REPORT),assert(e.is(u.CommonFlags.INSTANCE));var n=assert(e.classPrototype);if(!t||!t.length)return e;var i=e.simpleName,a=l.typesToString(t),o=new c.FunctionPrototype(this.program,i,n.internalName+"<"+a+">"+u.INSTANCE_DELIMITER+i,e.declaration,n,e.decoratorFlags);return o.flags=e.flags,o.operatorKind=e.operatorKind,o.classTypeArguments=t,o},t.prototype.resolveFunctionInclTypeArguments=function(e,t,r,n,i){void 0===i&&(i=s.REPORT);var a=null;return!e.is(u.CommonFlags.GENERIC)||(assert(null!=t&&0!=t.length),a=this.resolveTypeArguments(assert(e.declaration.typeParameters),t,r,n,i))?this.resolveFunction(e,a,r,i):null},t.prototype.resolveClass=function(e,t,r,n){var h,d,_,m,y,g,E,T;void 0===r&&(r=null),void 0===n&&(n=s.REPORT);var f=t?l.typesToString(t):"",I=e.instances.get(f);if(I)return I;var v=r;if(r=new Map,v)try{for(var A=i(v),C=A.next();!C.done;C=A.next()){var N=a(C.value,2),O=N[0],S=N[1];r.set(O,S)}}catch(e){h={error:e}}finally{try{C&&!C.done&&(d=A.return)&&d.call(A)}finally{if(h)throw h.error}}var L=e.declaration;if(t){var b=L.typeParameters,k=b.length,R=t.length;assert(R==k);for(var x=0;x",U+="<"+f+">"),(I=new c.Class(e,B,U,t,F)).contextualTypeArguments=r,e.instances.set(f,I),this.program.instancesLookup.set(U,I);var P=0;if(F){if(F.members){I.members||(I.members=new Map);try{for(var w=i(F.members.values()),M=w.next();!M.done;M=w.next()){var G=M.value;I.members.set(G.simpleName,G)}}catch(e){_={error:e}}finally{try{M&&!M.done&&(m=w.return)&&m.call(w)}finally{if(_)throw _.error}}}P=F.currentMemoryOffset}if(e.constructorPrototype){var K=this.resolveFunctionPartially(e.constructorPrototype,t,n);if(!K)return null;I.constructorInstance=this.resolveFunction(K,null,null,n)}if(e.instanceMembers)try{for(var z=i(e.instanceMembers.values()),V=z.next();!V.done;V=z.next()){var H=V.value;switch(H.kind){case c.ElementKind.FIELD_PROTOTYPE:I.members||(I.members=new Map);var X=H.declaration,W=null;if(X.type)W=this.resolveType(X.type,I.contextualTypeArguments,n);else{if(null!==F&&null!==F.members){var Y=F.members.get(H.simpleName);Y&&!Y.is(u.CommonFlags.PRIVATE)&&(assert(Y.kind==c.ElementKind.FIELD),W=Y.type)}W||n==s.REPORT&&this.error(o.DiagnosticCode.Type_expected,X.name.range.atEnd)}if(!W)break;var Q=new c.Field(H,U+u.INSTANCE_DELIMITER+H.simpleName,W,X,I);switch(W.byteSize){case 1:break;case 2:1&P&&++P;break;case 4:3&P&&(P=1+(3|P));break;case 8:7&P&&(P=1+(7|P));break;default:assert(!1)}Q.memoryOffset=P,P+=W.byteSize,I.members.set(H.simpleName,Q);break;case c.ElementKind.FUNCTION_PROTOTYPE:I.members||(I.members=new Map);var q=this.resolveFunctionPartially(H,t,n);if(!q)return null;q.internalName=U+u.INSTANCE_DELIMITER+q.simpleName,I.members.set(H.simpleName,q);break;case c.ElementKind.PROPERTY:I.members||(I.members=new Map);var j=assert(H.getterPrototype),Z=H.setterPrototype,J=new c.Property(this.program,H.simpleName,U+u.INSTANCE_DELIMITER+H.simpleName,e),$=this.resolveFunctionPartially(j,t,n);if(!$)return null;if($.internalName=U+u.INSTANCE_DELIMITER+$.simpleName,J.getterPrototype=$,Z){var ee=this.resolveFunctionPartially(Z,t,n);if(!ee)return null;ee.internalName=U+u.INSTANCE_DELIMITER+ee.simpleName,J.setterPrototype=ee}I.members.set(H.simpleName,J);break;default:assert(!1)}}}catch(e){y={error:e}}finally{try{V&&!V.done&&(g=z.return)&&g.call(z)}finally{if(y)throw y.error}}I.currentMemoryOffset=P;try{for(var te=i(e.overloadPrototypes),re=te.next();!re.done;re=te.next()){var ne=a(re.value,2),ie=ne[0],ae=ne[1];assert(ie!=c.OperatorKind.INVALID);var se=void 0;if(ae.is(u.CommonFlags.INSTANCE)){var oe=this.resolveFunctionPartially(ae,t,n);if(!oe)continue;se=this.resolveFunction(oe,null,null,n)}else se=this.resolveFunction(ae,null,null,n);if(se){var ce=I.overloads;ce||(I.overloads=ce=new Map),ce.set(ie,se)}}}catch(e){E={error:e}}finally{try{re&&!re.done&&(T=te.return)&&T.call(te)}finally{if(E)throw E.error}}return I},t.prototype.resolveClassInclTypeArguments=function(e,t,r,n,i){void 0===i&&(i=s.REPORT);var a=null;if(e.is(u.CommonFlags.GENERIC)){var c=e.declaration.typeParameters,p=c.length;assert(p>0);var l=null!==t?t.length:0;if(p!=l)return i==s.REPORT&&this.error(o.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,p.toString(10),l.toString(10)),null;if(!(a=this.resolveTypeArguments(c,t,r,n,i)))return null}else if(null!==t&&t.length)return i==s.REPORT&&this.error(o.DiagnosticCode.Type_0_is_not_generic,n.range,e.internalName),null;return this.resolveClass(e,a,r,i)},t}(o.DiagnosticEmitter);t.Resolver=h},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Operation_not_supported=100]="Operation_not_supported",e[e.Operation_is_unsafe=101]="Operation_is_unsafe",e[e.Conversion_from_type_0_to_1_requires_an_explicit_cast=200]="Conversion_from_type_0_to_1_requires_an_explicit_cast",e[e.Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit=201]="Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit",e[e.Type_0_cannot_be_changed_to_type_1=202]="Type_0_cannot_be_changed_to_type_1",e[e.Type_0_cannot_be_reinterpreted_as_type_1=203]="Type_0_cannot_be_reinterpreted_as_type_1",e[e.Basic_type_0_cannot_be_nullable=204]="Basic_type_0_cannot_be_nullable",e[e.Cannot_export_a_mutable_global=205]="Cannot_export_a_mutable_global",e[e.Compiling_constant_with_non_constant_initializer_as_mutable=206]="Compiling_constant_with_non_constant_initializer_as_mutable",e[e.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa=207]="Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa",e[e.Unmanaged_classes_cannot_implement_interfaces=208]="Unmanaged_classes_cannot_implement_interfaces",e[e.Invalid_regular_expression_flags=209]="Invalid_regular_expression_flags",e[e.Implementation_0_must_match_the_signature_1=210]="Implementation_0_must_match_the_signature_1",e[e.Class_0_is_sealed_and_cannot_be_extended=211]="Class_0_is_sealed_and_cannot_be_extended",e[e.Decorator_0_is_not_valid_here=212]="Decorator_0_is_not_valid_here",e[e.Duplicate_decorator=213]="Duplicate_decorator",e[e.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf=214]="An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf",e[e.Optional_parameter_must_have_an_initializer=215]="Optional_parameter_must_have_an_initializer",e[e.Constructor_of_class_0_must_not_require_any_arguments=216]="Constructor_of_class_0_must_not_require_any_arguments",e[e.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.Enum_member_must_have_initializer=1061]="Enum_member_must_have_initializer",e[e.Statements_are_not_allowed_in_ambient_contexts=1036]="Statements_are_not_allowed_in_ambient_contexts",e[e.Initializers_are_not_allowed_in_ambient_contexts=1039]="Initializers_are_not_allowed_in_ambient_contexts",e[e._0_modifier_cannot_be_used_here=1042]="_0_modifier_cannot_be_used_here",e[e.A_rest_parameter_cannot_be_optional=1047]="A_rest_parameter_cannot_be_optional",e[e.A_rest_parameter_cannot_have_an_initializer=1048]="A_rest_parameter_cannot_have_an_initializer",e[e.A_set_accessor_must_have_exactly_one_parameter=1049]="A_set_accessor_must_have_exactly_one_parameter",e[e.A_set_accessor_parameter_cannot_have_an_initializer=1052]="A_set_accessor_parameter_cannot_have_an_initializer",e[e.A_get_accessor_cannot_have_parameters=1054]="A_get_accessor_cannot_have_parameters",e[e.Type_parameters_cannot_appear_on_a_constructor_declaration=1092]="Type_parameters_cannot_appear_on_a_constructor_declaration",e[e.Type_annotation_cannot_appear_on_a_constructor_declaration=1093]="Type_annotation_cannot_appear_on_a_constructor_declaration",e[e.An_accessor_cannot_have_type_parameters=1094]="An_accessor_cannot_have_type_parameters",e[e.A_set_accessor_cannot_have_a_return_type_annotation=1095]="A_set_accessor_cannot_have_a_return_type_annotation",e[e.Type_parameter_list_cannot_be_empty=1098]="Type_parameter_list_cannot_be_empty",e[e.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement=1104]="A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement",e[e.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement=1105]="A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement",e[e.A_return_statement_can_only_be_used_within_a_function_body=1108]="A_return_statement_can_only_be_used_within_a_function_body",e[e.Expression_expected=1109]="Expression_expected",e[e.Type_expected=1110]="Type_expected",e[e.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement=1113]="A_default_clause_cannot_appear_more_than_once_in_a_switch_statement",e[e.Duplicate_label_0=1114]="Duplicate_label_0",e[e.Octal_literals_are_not_allowed_in_strict_mode=1121]="Octal_literals_are_not_allowed_in_strict_mode",e[e.Digit_expected=1124]="Digit_expected",e[e.Hexadecimal_digit_expected=1125]="Hexadecimal_digit_expected",e[e.Unexpected_end_of_text=1126]="Unexpected_end_of_text",e[e.Invalid_character=1127]="Invalid_character",e[e._case_or_default_expected=1130]="_case_or_default_expected",e[e.A_declare_modifier_cannot_be_used_in_an_already_ambient_context=1038]="A_declare_modifier_cannot_be_used_in_an_already_ambient_context",e[e.Type_argument_expected=1140]="Type_argument_expected",e[e.String_literal_expected=1141]="String_literal_expected",e[e.Line_break_not_permitted_here=1142]="Line_break_not_permitted_here",e[e.Declaration_expected=1146]="Declaration_expected",e[e._const_declarations_must_be_initialized=1155]="_const_declarations_must_be_initialized",e[e.Unterminated_regular_expression_literal=1161]="Unterminated_regular_expression_literal",e[e.Interface_declaration_cannot_have_implements_clause=1176]="Interface_declaration_cannot_have_implements_clause",e[e.Binary_digit_expected=1177]="Binary_digit_expected",e[e.Octal_digit_expected=1178]="Octal_digit_expected",e[e.An_implementation_cannot_be_declared_in_ambient_contexts=1183]="An_implementation_cannot_be_declared_in_ambient_contexts",e[e.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive=1198]="An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive",e[e.Unterminated_Unicode_escape_sequence=1199]="Unterminated_Unicode_escape_sequence",e[e.Decorators_are_not_valid_here=1206]="Decorators_are_not_valid_here",e[e._abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration=1242]="_abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration",e[e.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract=1245]="Method_0_cannot_have_an_implementation_because_it_is_marked_abstract",e[e.A_class_may_only_extend_another_class=1311]="A_class_may_only_extend_another_class",e[e.A_parameter_property_cannot_be_declared_using_a_rest_parameter=1317]="A_parameter_property_cannot_be_declared_using_a_rest_parameter",e[e.Duplicate_identifier_0=2300]="Duplicate_identifier_0",e[e.Cannot_find_name_0=2304]="Cannot_find_name_0",e[e.Module_0_has_no_exported_member_1=2305]="Module_0_has_no_exported_member_1",e[e.Generic_type_0_requires_1_type_argument_s=2314]="Generic_type_0_requires_1_type_argument_s",e[e.Type_0_is_not_generic=2315]="Type_0_is_not_generic",e[e.Type_0_is_not_assignable_to_type_1=2322]="Type_0_is_not_assignable_to_type_1",e[e.Index_signature_is_missing_in_type_0=2329]="Index_signature_is_missing_in_type_0",e[e._this_cannot_be_referenced_in_current_location=2332]="_this_cannot_be_referenced_in_current_location",e[e._super_can_only_be_referenced_in_a_derived_class=2335]="_super_can_only_be_referenced_in_a_derived_class",e[e.Property_0_does_not_exist_on_type_1=2339]="Property_0_does_not_exist_on_type_1",e[e.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures=2349]="Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures",e[e.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature=2351]="Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature",e[e.A_function_whose_declared_type_is_not_void_must_return_a_value=2355]="A_function_whose_declared_type_is_not_void_must_return_a_value",e[e.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access=2357]="The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access",e[e.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access=2364]="The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access",e[e.Operator_0_cannot_be_applied_to_types_1_and_2=2365]="Operator_0_cannot_be_applied_to_types_1_and_2",e[e._get_and_set_accessor_must_have_the_same_type=2380]="_get_and_set_accessor_must_have_the_same_type",e[e.Constructor_implementation_is_missing=2390]="Constructor_implementation_is_missing",e[e.Function_implementation_is_missing_or_not_immediately_following_the_declaration=2391]="Function_implementation_is_missing_or_not_immediately_following_the_declaration",e[e.Multiple_constructor_implementations_are_not_allowed=2392]="Multiple_constructor_implementations_are_not_allowed",e[e.Duplicate_function_implementation=2393]="Duplicate_function_implementation",e[e.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local=2395]="Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local",e[e.Type_0_has_no_property_1=2460]="Type_0_has_no_property_1",e[e.The_0_operator_cannot_be_applied_to_type_1=2469]="The_0_operator_cannot_be_applied_to_type_1",e[e.Export_declaration_conflicts_with_exported_declaration_of_0=2484]="Export_declaration_conflicts_with_exported_declaration_of_0",e[e.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property=2540]="Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property",e[e.The_target_of_an_assignment_must_be_a_variable_or_a_property_access=2541]="The_target_of_an_assignment_must_be_a_variable_or_a_property_access",e[e.Index_signature_in_type_0_only_permits_reading=2542]="Index_signature_in_type_0_only_permits_reading",e[e.Expected_0_arguments_but_got_1=2554]="Expected_0_arguments_but_got_1",e[e.Expected_at_least_0_arguments_but_got_1=2555]="Expected_at_least_0_arguments_but_got_1",e[e.Expected_0_type_arguments_but_got_1=2558]="Expected_0_type_arguments_but_got_1",e[e.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums=2651]="A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums",e[e.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration=2673]="Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration",e[e.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration=2674]="Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration",e[e.Namespace_0_has_no_exported_member_1=2694]="Namespace_0_has_no_exported_member_1",e[e.File_0_not_found=6054]="File_0_not_found",e[e.Numeric_separators_are_not_allowed_here=6188]="Numeric_separators_are_not_allowed_here",e[e.Multiple_consecutive_numeric_separators_are_not_permitted=6189]="Multiple_consecutive_numeric_separators_are_not_permitted"}(t.DiagnosticCode||(t.DiagnosticCode={})),t.diagnosticCodeToString=function(e){switch(e){case 100:return"Operation not supported.";case 101:return"Operation is unsafe.";case 200:return"Conversion from type '{0}' to '{1}' requires an explicit cast.";case 201:return"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.";case 202:return"Type '{0}' cannot be changed to type '{1}'.";case 203:return"Type '{0}' cannot be reinterpreted as type '{1}'.";case 204:return"Basic type '{0}' cannot be nullable.";case 205:return"Cannot export a mutable global.";case 206:return"Compiling constant with non-constant initializer as mutable.";case 207:return"Unmanaged classes cannot extend managed classes and vice-versa.";case 208:return"Unmanaged classes cannot implement interfaces.";case 209:return"Invalid regular expression flags.";case 210:return"Implementation '{0}' must match the signature '{1}'.";case 211:return"Class '{0}' is sealed and cannot be extended.";case 212:return"Decorator '{0}' is not valid here.";case 213:return"Duplicate decorator.";case 214:return"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.";case 215:return"Optional parameter must have an initializer.";case 216:return"Constructor of class '{0}' must not require any arguments.";case 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 1061:return"Enum member must have initializer.";case 1036:return"Statements are not allowed in ambient contexts.";case 1039:return"Initializers are not allowed in ambient contexts.";case 1042:return"'{0}' modifier cannot be used here.";case 1047:return"A rest parameter cannot be optional.";case 1048:return"A rest parameter cannot have an initializer.";case 1049:return"A 'set' accessor must have exactly one parameter.";case 1052:return"A 'set' accessor parameter cannot have an initializer.";case 1054:return"A 'get' accessor cannot have parameters.";case 1092:return"Type parameters cannot appear on a constructor declaration.";case 1093:return"Type annotation cannot appear on a constructor declaration.";case 1094:return"An accessor cannot have type parameters.";case 1095:return"A 'set' accessor cannot have a return type annotation.";case 1098:return"Type parameter list cannot be empty.";case 1104:return"A 'continue' statement can only be used within an enclosing iteration statement.";case 1105:return"A 'break' statement can only be used within an enclosing iteration or switch statement.";case 1108:return"A 'return' statement can only be used within a function body.";case 1109:return"Expression expected.";case 1110:return"Type expected.";case 1113:return"A 'default' clause cannot appear more than once in a 'switch' statement.";case 1114:return"Duplicate label '{0}'.";case 1121:return"Octal literals are not allowed in strict mode.";case 1124:return"Digit expected.";case 1125:return"Hexadecimal digit expected.";case 1126:return"Unexpected end of text.";case 1127:return"Invalid character.";case 1130:return"'case' or 'default' expected.";case 1038:return"A 'declare' modifier cannot be used in an already ambient context.";case 1140:return"Type argument expected.";case 1141:return"String literal expected.";case 1142:return"Line break not permitted here.";case 1146:return"Declaration expected.";case 1155:return"'const' declarations must be initialized.";case 1161:return"Unterminated regular expression literal.";case 1176:return"Interface declaration cannot have 'implements' clause.";case 1177:return"Binary digit expected.";case 1178:return"Octal digit expected.";case 1183:return"An implementation cannot be declared in ambient contexts.";case 1198:return"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.";case 1199:return"Unterminated Unicode escape sequence.";case 1206:return"Decorators are not valid here.";case 1242:return"'abstract' modifier can only appear on a class, method, or property declaration.";case 1245:return"Method '{0}' cannot have an implementation because it is marked abstract.";case 1311:return"A class may only extend another class.";case 1317:return"A parameter property cannot be declared using a rest parameter.";case 2300:return"Duplicate identifier '{0}'.";case 2304:return"Cannot find name '{0}'.";case 2305:return"Module '{0}' has no exported member '{1}'.";case 2314:return"Generic type '{0}' requires {1} type argument(s).";case 2315:return"Type '{0}' is not generic.";case 2322:return"Type '{0}' is not assignable to type '{1}'.";case 2329:return"Index signature is missing in type '{0}'.";case 2332:return"'this' cannot be referenced in current location.";case 2335:return"'super' can only be referenced in a derived class.";case 2339:return"Property '{0}' does not exist on type '{1}'.";case 2349:return"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.";case 2351:return"Cannot use 'new' with an expression whose type lacks a construct signature.";case 2355:return"A function whose declared type is not 'void' must return a value.";case 2357:return"The operand of an increment or decrement operator must be a variable or a property access.";case 2364:return"The left-hand side of an assignment expression must be a variable or a property access.";case 2365:return"Operator '{0}' cannot be applied to types '{1}' and '{2}'.";case 2380:return"'get' and 'set' accessor must have the same type.";case 2390:return"Constructor implementation is missing.";case 2391:return"Function implementation is missing or not immediately following the declaration.";case 2392:return"Multiple constructor implementations are not allowed.";case 2393:return"Duplicate function implementation.";case 2395:return"Individual declarations in merged declaration '{0}' must be all exported or all local.";case 2460:return"Type '{0}' has no property '{1}'.";case 2469:return"The '{0}' operator cannot be applied to type '{1}'.";case 2484:return"Export declaration conflicts with exported declaration of '{0}'.";case 2540:return"Cannot assign to '{0}' because it is a constant or a read-only property.";case 2541:return"The target of an assignment must be a variable or a property access.";case 2542:return"Index signature in type '{0}' only permits reading.";case 2554:return"Expected {0} arguments, but got {1}.";case 2555:return"Expected at least {0} arguments, but got {1}.";case 2558:return"Expected {0} type arguments, but got {1}.";case 2651:return"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.";case 2673:return"Constructor of class '{0}' is private and only accessible within the class declaration.";case 2674:return"Constructor of class '{0}' is protected and only accessible within the class declaration.";case 2694:return"Namespace '{0}' has no exported member '{1}'.";case 6054:return"File '{0}' not found.";case 6188:return"Numeric separators are not allowed here.";case 6189:return"Multiple consecutive numeric separators are not permitted.";default:return""}}},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}};Object.defineProperty(t,"__esModule",{value:!0});var a,s=r(23),o=r(1),c=r(4),p=r(0),l=r(5),u=r(8),h=r(2),d=r(6),_=r(3);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(a=t.Target||(t.Target={}));var m=function(){function e(){this.target=a.WASM32,this.noTreeShaking=!1,this.noAssert=!1,this.importMemory=!1,this.importTable=!1,this.sourceMap=!1,this.memoryBase=0,this.globalAliases=null,this.features=0,this.optimizeLevelHint=0,this.shrinkLevelHint=0}return Object.defineProperty(e.prototype,"isWasm64",{get:function(){return this.target==a.WASM64},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"usizeType",{get:function(){return this.target==a.WASM64?d.Type.usize64:d.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==a.WASM64?d.Type.isize64:d.Type.isize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nativeSizeType",{get:function(){return this.target==a.WASM64?c.NativeType.I64:c.NativeType.I32},enumerable:!0,configurable:!0}),e.prototype.hasFeature=function(e){return 0!=(this.features&e)},e}();t.Options=m,function(e){e[e.NONE=0]="NONE",e[e.SIGN_EXTENSION=1]="SIGN_EXTENSION",e[e.MUTABLE_GLOBAL=2]="MUTABLE_GLOBAL"}(t.Feature||(t.Feature={})),function(e){e[e.NONE=0]="NONE",e[e.IMPLICIT=1]="IMPLICIT",e[e.EXPLICIT=2]="EXPLICIT"}(t.ConversionKind||(t.ConversionKind={})),function(e){e[e.NONE=0]="NONE",e[e.WRAP=1]="WRAP"}(t.WrapMode||(t.WrapMode={}));var y,g,E=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.currentOuterFunction=null,n.currentInlineFunction=null,n.currentEnum=null,n.currentType=d.Type.void,n.memorySegments=[],n.stringSegments=new Map,n.functionTable=[],n.argcVar=0,n.argcSet=0,n.f32ModInstance=null,n.f64ModInstance=null,n.f32PowInstance=null,n.f64PowInstance=null,n.program=t,n.resolver=t.resolver,r||(r=new m),n.options=r,n.memoryOffset=i64_new(max(r.memoryBase,8)),n.module=c.Module.create(),n}return n(t,e),t.compile=function(e,r){return void 0===r&&(r=null),new t(e,r).compile()},t.prototype.compile=function(){var e=this.options,t=this.module,r=this.program;r.initialize(e);var n=new l.Function(r.startFunction,"start",new d.Signature([],d.Type.void));this.startFunctionInstance=n;var i=new Array;this.startFunctionBody=i,this.currentFunction=n;for(var a=r.sources,s=0,o=a.length;s"),!1;e.type=this.currentType}else assert(!1);if(e.is(p.CommonFlags.AMBIENT|p.CommonFlags.BUILTIN))return!0;var a=e.type.toNativeType(),s=e.isAny(p.CommonFlags.CONST)||e.is(p.CommonFlags.STATIC|p.CommonFlags.READONLY);if(e.is(p.CommonFlags.AMBIENT))return s||this.options.hasFeature(2)?(e.set(p.CommonFlags.MODULE_IMPORT),r?f(e,r,e.parent):(y="env",g=e.simpleName),t.addGlobalImport(e.internalName,y,g,a),e.set(p.CommonFlags.COMPILED),!0):(this.error(o.DiagnosticCode.Operation_not_supported,assert(r).range),!1);var l=!1;e.is(p.CommonFlags.INLINED)?n=this.compileInlineConstant(e,e.type,!0):r&&r.initializer?(n||(n=this.compileExpression(r.initializer,e.type,1,1)),c.getExpressionId(n)!=c.ExpressionId.Const&&(s?(n=this.precomputeExpressionRef(n),c.getExpressionId(n)!=c.ExpressionId.Const&&(this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,r.range),l=!0)):l=!0)):n=e.type.toNativeZero(t);var u=e.internalName;if(l)t.addGlobal(u,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(u,n));else if(s){switch(c.getExpressionType(n)){case c.NativeType.I32:e.constantValueKind=1,e.constantIntegerValue=i64_new(c.getConstValueI32(n),0);break;case c.NativeType.I64:e.constantValueKind=1,e.constantIntegerValue=i64_new(c.getConstValueI64Low(n),c.getConstValueI64High(n));break;case c.NativeType.F32:e.constantValueKind=2,e.constantFloatValue=c.getConstValueF32(n);break;case c.NativeType.F64:e.constantValueKind=2,e.constantFloatValue=c.getConstValueF64(n);break;default:return assert(!1),!1}e.set(p.CommonFlags.INLINED),e.is(p.CommonFlags.MODULE_EXPORT)?(t.addGlobal(u,a,!1,n),t.addGlobalExport(u,T(e))):r&&r.isTopLevel&&t.addGlobal(u,a,!1,n)}else t.addGlobal(u,a,!s,n);return!0},t.prototype.compileEnumDeclaration=function(e){var t=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(t.kind==l.ElementKind.ENUM),this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){var t,r;if(e.is(p.CommonFlags.COMPILED))return!0;e.set(p.CommonFlags.COMPILED);var n=this.module;this.currentEnum=e;var a=null;if(e.members)try{for(var s=i(e.members.values()),u=s.next();!u.done;u=s.next()){var h=u.value;if(h.kind==l.ElementKind.ENUMVALUE){var _=!1,m=h,y=m.declaration;if(m.set(p.CommonFlags.COMPILED),m.is(p.CommonFlags.INLINED))e.declaration.isTopLevelExport&&n.addGlobal(m.internalName,c.NativeType.I32,!1,n.createI32(m.constantValue));else{var g=void 0;y.value?(g=this.compileExpression(y.value,d.Type.i32,1,0),c.getExpressionId(g)!=c.ExpressionId.Const&&(g=this.precomputeExpressionRef(g),c.getExpressionId(g)!=c.ExpressionId.Const&&(e.is(p.CommonFlags.CONST)&&this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),_=!0))):null==a?g=n.createI32(0):a.is(p.CommonFlags.INLINED)?g=n.createI32(a.constantValue+1):(g=n.createBinary(c.BinaryOp.AddI32,n.createGetGlobal(a.internalName,c.NativeType.I32),n.createI32(1)),e.is(p.CommonFlags.CONST)&&this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),_=!0),_?(n.addGlobal(m.internalName,c.NativeType.I32,!0,n.createI32(0)),this.startFunctionBody.push(n.createSetGlobal(m.internalName,g))):(n.addGlobal(m.internalName,c.NativeType.I32,!1,g),c.getExpressionType(g)==c.NativeType.I32?(m.constantValue=c.getConstValueI32(g),m.set(p.CommonFlags.INLINED)):(assert(!1),m.constantValue=0))}a=m,e.is(p.CommonFlags.MODULE_EXPORT)&&(h.is(p.CommonFlags.INLINED)||this.options.hasFeature(2)?n.addGlobalExport(h.internalName,T(h)):y&&this.warning(o.DiagnosticCode.Cannot_export_a_mutable_global,y.range))}}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}return this.currentEnum=null,!0},t.prototype.compileFunctionDeclaration=function(e,t,r){void 0===r&&(r=null);var n=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(n.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.compileFunctionUsingTypeArguments(n,t,r,null,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n,i){var a=this.resolver.resolveFunctionInclTypeArguments(e,t,r,i);return a?(a.outerScope=n,this.compileFunction(a)?a:null):null},t.prototype.ensureFunctionType=function(e,t,r){void 0===r&&(r=null);var n,i=e?e.length:0,a=0;if(r?((n=new Array(1+i))[0]=r.toNativeType(),a=1):n=new Array(i),e)for(var s=0;s=0)return e.functionTableIndex;var t=this.functionTable,r=t.length;return!e.is(p.CommonFlags.TRAMPOLINE)&&e.signature.requiredParameters=0?"case"+h.toString(10):"break")+"|"+a);var y=t.createBlock("case0|"+a,l,c.NativeType.None),g=!0,E=!0,T=!0,f=!0;for(_=0;_=0&&(g&&s.set(1),E&&s.set(2),T&&s.set(4),f&&s.set(32)),y},t.prototype.compileThrowStatement=function(e){var t=this.currentFunction.flow;return t.set(4),t.set(1),s.compileAbort(this,null,e)},t.prototype.compileTryStatement=function(e){return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileVariableStatement=function(e,t){void 0===t&&(t=!1);var r=this.program,n=this.currentFunction,i=e.declarations,a=i.length;if(t||n==this.startFunctionInstance&&e.parent&&e.parent.kind==h.NodeKind.SOURCE){for(var s=0;s");continue}E=this.currentType}var f=!1;if(y.is(p.CommonFlags.CONST))if(T)if(T=this.precomputeExpressionRef(T),c.getExpressionId(T)==c.ExpressionId.Const){var I=new l.Local(r,g,-1,E);switch(c.getExpressionType(T)){case c.NativeType.I32:I=I.withConstantIntegerValue(i64_new(c.getConstValueI32(T),0));break;case c.NativeType.I64:I=I.withConstantIntegerValue(i64_new(c.getConstValueI64Low(T),c.getConstValueI64High(T)));break;case c.NativeType.F32:I=I.withConstantFloatValue(c.getConstValueF32(T));break;case c.NativeType.F64:I=I.withConstantFloatValue(c.getConstValueF64(T));break;default:return assert(!1),this.module.createUnreachable()}var v=n.flow.scopedLocals;if(v){if(v.has(g))return this.error(o.DiagnosticCode.Duplicate_identifier_0,y.name.range,g),this.module.createUnreachable()}else n.flow.scopedLocals=v=new Map;v.set(g,I),f=!0}else this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range);else this.error(o.DiagnosticCode._const_declarations_must_be_initialized,y.range);if(!f){I=void 0;I=y.isAny(p.CommonFlags.LET|p.CommonFlags.CONST)||_.is(2048)?_.addScopedLocal(E,g,!1,y):n.addLocal(E,g,y),T?(u.push(this.compileAssignmentWithValue(y.name,T)),I.type.is(36)&&_.setLocalWrapped(I.index,!_.canOverflow(T,E))):I.type.is(36)&&_.setLocalWrapped(I.index,!0)}}return u.length?1==u.length?u[0]:this.module.createBlock(null,u,c.NativeType.None):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,d.Type.void,2,0)},t.prototype.compileWhileStatement=function(e){var t=this.module,r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var n=this.precomputeExpressionRef(r);if(c.getExpressionId(n)==c.ExpressionId.Const&&c.getExpressionType(n)==c.NativeType.I32){if(!c.getConstValueI32(n))return t.createNop()}else r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType)}var i=this.currentFunction,a=i.enterBreakContext(),s=i.flow,o=s.fork();i.flow=o;var l="break|"+a;o.breakLabel=l;var u="continue|"+a;o.continueLabel=u;var h=this.compileStatement(e.statement),_=o.isAny(29);return i.flow=o.free(),i.leaveBreakContext(),o.unset(792),s.inheritConditional(o),t.createBlock(l,[t.createLoop(u,t.createIf(r,_?h:t.createBlock(null,[h,t.createBreak(u)],c.NativeType.None)))],c.NativeType.None)},t.prototype.compileInlineConstant=function(e,t,r){assert(e.is(p.CommonFlags.INLINED));var n=e.type;switch(!r&&n.is(4)&&t.is(4)&&n.size>i:0);case 5:case 6:case 10:var a=e.type.computeSmallIntegerMask(d.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&a:0);case 2:case 7:return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 4:case 9:if(!e.program.options.isWasm64)return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 3:case 8:return 1==e.constantValueKind?this.module.createI64(i64_low(e.constantIntegerValue),i64_high(e.constantIntegerValue)):this.module.createI64(0);case 12:if(!e.is(p.CommonFlags.BUILTIN)||t!=d.Type.f32)return this.module.createF64(e.constantFloatValue);this.currentType=d.Type.f32;case 11:return this.module.createF32(e.constantFloatValue);default:return assert(!1),this.module.createUnreachable()}},t.prototype.compileExpression=function(e,t,r,n){var i;switch(this.currentType=t,e.kind){case h.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case h.NodeKind.BINARY:i=this.compileBinaryExpression(e,t);break;case h.NodeKind.CALL:i=this.compileCallExpression(e,t);break;case h.NodeKind.COMMA:i=this.compileCommaExpression(e,t);break;case h.NodeKind.ELEMENTACCESS:i=this.compileElementAccessExpression(e,t);break;case h.NodeKind.FUNCTION:i=this.compileFunctionExpression(e,t);break;case h.NodeKind.IDENTIFIER:case h.NodeKind.FALSE:case h.NodeKind.NULL:case h.NodeKind.THIS:case h.NodeKind.SUPER:case h.NodeKind.TRUE:i=this.compileIdentifierExpression(e,t,0==r);break;case h.NodeKind.INSTANCEOF:i=this.compileInstanceOfExpression(e,t);break;case h.NodeKind.LITERAL:i=this.compileLiteralExpression(e,t);break;case h.NodeKind.NEW:i=this.compileNewExpression(e,t);break;case h.NodeKind.PARENTHESIZED:i=this.compileParenthesizedExpression(e,t);break;case h.NodeKind.PROPERTYACCESS:i=this.compilePropertyAccessExpression(e,t,0==r);break;case h.NodeKind.TERNARY:i=this.compileTernaryExpression(e,t);break;case h.NodeKind.UNARYPOSTFIX:i=this.compileUnaryPostfixExpression(e,t);break;case h.NodeKind.UNARYPREFIX:i=this.compileUnaryPrefixExpression(e,t);break;default:this.error(o.DiagnosticCode.Operation_not_supported,e.range),i=this.module.createUnreachable()}var a=this.currentType;return 0!=r&&a!=t?(i=this.convertExpression(i,a,t,r,n,e),this.currentType=t):1==n&&(i=this.ensureSmallIntegerWrap(i,a)),this.options.sourceMap&&this.addDebugLocation(i,e.range),i},t.prototype.compileExpressionRetainType=function(e,t,r){return this.compileExpression(e,t==d.Type.void?d.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r,n){return this.precomputeExpressionRef(this.compileExpression(e,t,r,n))},t.prototype.precomputeExpressionRef=function(e){var t=this.module,r=this.currentType.toNativeType(),n=t.addTemporaryFunction(r,null,e);t.runPasses(["precompute"],n);var i=c.getFunctionBody(n);return t.removeTemporaryFunction(),i},t.prototype.convertExpression=function(e,t,r,n,i,a){assert(0!=n);var s=this.module;return 13==t.kind?(assert(13!=r.kind),this.error(o.DiagnosticCode.Type_0_is_not_assignable_to_type_1,a.range,t.toString(),r.toString()),s.createUnreachable()):13==r.kind?s.createDrop(e):(t.isAssignableTo(r)||1==n&&this.error(o.DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,a.range,t.toString(),r.toString()),t.is(8)?r.is(8)?11==t.kind?12==r.kind&&(e=s.createUnary(c.UnaryOp.PromoteF32,e)):11==r.kind&&(e=s.createUnary(c.UnaryOp.DemoteF64,e)):r.is(4)?e=11==t.kind?r.is(1)?r.is(64)?s.createUnary(c.UnaryOp.TruncF32ToI64,e):s.createUnary(c.UnaryOp.TruncF32ToI32,e):r.is(64)?s.createUnary(c.UnaryOp.TruncF32ToU64,e):s.createUnary(c.UnaryOp.TruncF32ToU32,e):r.is(1)?r.is(64)?s.createUnary(c.UnaryOp.TruncF64ToI64,e):s.createUnary(c.UnaryOp.TruncF64ToI32,e):r.is(64)?s.createUnary(c.UnaryOp.TruncF64ToU64,e):s.createUnary(c.UnaryOp.TruncF64ToU32,e):(assert(0==r.flags,"void type expected"),e=s.createDrop(e)):t.is(4)&&r.is(8)?e=11==r.kind?t.is(64)?s.createUnary(t.is(1)?c.UnaryOp.ConvertI64ToF32:c.UnaryOp.ConvertU64ToF32,e):s.createUnary(t.is(1)?c.UnaryOp.ConvertI32ToF32:c.UnaryOp.ConvertU32ToF32,e):t.is(64)?s.createUnary(t.is(1)?c.UnaryOp.ConvertI64ToF64:c.UnaryOp.ConvertU64ToF64,e):s.createUnary(t.is(1)?c.UnaryOp.ConvertI32ToF64:c.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=s.createUnary(c.UnaryOp.WrapI64,e)):r.is(64)?(e=s.createUnary(r.is(1)?c.UnaryOp.ExtendI32:c.UnaryOp.ExtendU32,this.ensureSmallIntegerWrap(e,t)),i=0):t.is(32)&&t.size",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.GtI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.GtI64:c.BinaryOp.GtI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.GtI64,r,i);break;case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.GtU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.GtU64:c.BinaryOp.GtU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.GtU64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.GtF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.GtF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.LESSTHAN_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.LE)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!0)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"<=",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.LeI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.LeI64:c.BinaryOp.LeI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.LeI64,r,i);break;case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.LeU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.LeU64:c.BinaryOp.LeU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.LeU64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.LeF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.LeF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.GREATERTHAN_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.GE)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!0)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,">=",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.GeI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.GeI64:c.BinaryOp.GeI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.GeI64,r,i);break;case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.GeU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.GeU64:c.BinaryOp.GeU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.GeU64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.GeF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.GeF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EQUALS_EQUALS_EQUALS:case u.Token.EQUALS_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,g==u.Token.EQUALS_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.EQ)){p=this.compileBinaryOverload(v,_,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.EqI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.EqI64:c.BinaryOp.EqI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.EqI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.EqF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.EqF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EXCLAMATION_EQUALS_EQUALS:case u.Token.EXCLAMATION_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,g==u.Token.EXCLAMATION_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.NE)){p=this.compileBinaryOverload(v,_,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.NeI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.NeI64:c.BinaryOp.NeI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.NeI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.NeF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.NeF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EQUALS:return this.compileAssignment(_,m,t);case u.Token.PLUS_EQUALS:y=!0;case u.Token.PLUS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.ADD)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"+",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:p=h.createBinary(c.BinaryOp.AddI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.AddI64:c.BinaryOp.AddI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.AddI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.AddF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.AddF64,r,i);break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.MINUS_EQUALS:y=!0;case u.Token.MINUS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.SUB)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"-",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:p=h.createBinary(c.BinaryOp.SubI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.SubI64:c.BinaryOp.SubI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.SubI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.SubF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.SubF64,r,i);break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.ASTERISK_EQUALS:y=!0;case u.Token.ASTERISK:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.MUL)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"*",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:p=h.createBinary(c.BinaryOp.MulI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.MulI64:c.BinaryOp.MulI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.MulI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.MulF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.MulF64,r,i);break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.ASTERISK_ASTERISK_EQUALS:y=!0;case u.Token.ASTERISK_ASTERISK:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.POW)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var E=void 0;if(11==this.currentType.kind){if(i=this.compileExpression(m,d.Type.f32,1,0),a=this.currentType,!(E=this.f32PowInstance)){if(!(T=this.program.elementsLookup.get("Mathf"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),p=h.createUnreachable();break}if(!(f=T.members?T.members.get("pow"):null)){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),p=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=E=this.resolver.resolveFunction(f,null)}}else if(r=this.convertExpression(r,this.currentType,d.Type.f64,1,0,_),n=this.currentType,i=this.compileExpression(m,d.Type.f64,1,0),a=this.currentType,!(E=this.f64PowInstance)){if(!(T=this.program.elementsLookup.get("Math"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),p=h.createUnreachable();break}if(!(f=T.members?T.members.get("pow"):null)){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),p=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=E=this.resolver.resolveFunction(f,null)}p=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):h.createUnreachable();break;case u.Token.SLASH_EQUALS:y=!0;case u.Token.SLASH:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.DIV)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"/",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.DivI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.DivI64:c.BinaryOp.DivI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.DivI64,r,i);break;case 5:case 6:case 10:case 7:p=h.createBinary(c.BinaryOp.DivU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.DivU64:c.BinaryOp.DivU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.DivU64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.DivF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.DivF64,r,i);break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.PERCENT_EQUALS:y=!0;case u.Token.PERCENT:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.REM)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"%",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.RemI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.RemI64:c.BinaryOp.RemI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.RemI64,r,i);break;case 5:case 6:case 10:case 7:p=h.createBinary(c.BinaryOp.RemU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.RemU64:c.BinaryOp.RemU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.RemU64,r,i);break;case 11:if(!(E=this.f32ModInstance)){if(!(T=this.program.elementsLookup.get("Mathf"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),p=h.createUnreachable();break}if(!(f=T.members?T.members.get("mod"):null)){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),p=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=E=this.resolver.resolveFunction(f,null)}p=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):h.createUnreachable();break;case 12:if(!(E=this.f64ModInstance)){var T,f;if(!(T=this.program.elementsLookup.get("Math"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),p=h.createUnreachable();break}if(!(f=T.members?T.members.get("mod"):null)){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),p=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=E=this.resolver.resolveFunction(f,null)}p=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):h.createUnreachable();break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.LESSTHAN_LESSTHAN_EQUALS:y=!0;case u.Token.LESSTHAN_LESSTHAN:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_SHL)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:p=h.createBinary(c.BinaryOp.ShlI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.ShlI64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.ShlI64:c.BinaryOp.ShlI32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_EQUALS:y=!0;case u.Token.GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_SHR)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType,this.currentType.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.ShrI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.ShrI64,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.ShrI64:c.BinaryOp.ShrI32,r,i);break;case 5:case 6:case 10:case 7:p=h.createBinary(c.BinaryOp.ShrU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.ShrU64,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.ShrU64:c.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:y=!0;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_SHR_U)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 5:case 6:case 10:p=h.createBinary(c.BinaryOp.ShrU32,r,i);case 0:case 1:case 2:case 7:p=h.createBinary(c.BinaryOp.ShrU32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.ShrU64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.ShrU64:c.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.AMPERSAND_EQUALS:y=!0;case u.Token.AMPERSAND:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_AND)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"&",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 10:case 7:p=h.createBinary(c.BinaryOp.AndI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.AndI64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.AndI64:c.BinaryOp.AndI32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.BAR_EQUALS:y=!0;case u.Token.BAR:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_OR)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"|",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:p=h.createBinary(c.BinaryOp.OrI32,r,i);break;case 2:case 7:p=h.createBinary(c.BinaryOp.OrI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.OrI64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.OrI64:c.BinaryOp.OrI32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.CARET_EQUALS:y=!0;case u.Token.CARET:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){var I,v;if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_XOR)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"^",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:p=h.createBinary(c.BinaryOp.XorI32,r,i);break;case 2:case 7:p=h.createBinary(c.BinaryOp.XorI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.XorI64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.XorI64:c.BinaryOp.XorI32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.AMPERSAND_AMPERSAND:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,p=h.cloneExpression(r,!0,0))this.makeIsTrueish(r,this.currentType),p=h.createIf(this.makeIsTrueish(r,this.currentType),i,p);else{var A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));p=h.createIf(this.makeIsTrueish(h.createTeeLocal(C.index,r),this.currentType),i,h.createGetLocal(assert(C).index,this.currentType.toNativeType()))}break;case u.Token.BAR_BAR:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,p=this.module.cloneExpression(r,!0,0))p=this.module.createIf(this.makeIsTrueish(r,this.currentType),p,i);else{A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));p=h.createIf(this.makeIsTrueish(h.createTeeLocal(C.index,r),this.currentType),h.createGetLocal(assert(C).index,this.currentType.toNativeType()),i)}break;default:assert(!1),p=this.module.createUnreachable()}return y?this.compileAssignmentWithValue(_,p,t!=d.Type.void):p},t.prototype.compileUnaryOverload=function(e,t,r,n){var i,a=0;return e.is(p.CommonFlags.INSTANCE)?(a=r,i=[]):i=[t],this.compileCallDirect(e,i,n,a,e.hasDecorator(l.DecoratorFlags.INLINE))},t.prototype.compileBinaryOverload=function(e,t,r,n,i){var a,s=0;if(e.is(p.CommonFlags.INSTANCE)){var o=assert(e.parent);assert(o.kind==l.ElementKind.CLASS),s=r,a=[n]}else a=[t,n];return this.compileCallDirect(e,a,i,s,e.hasDecorator(l.DecoratorFlags.INLINE))},t.prototype.compileAssignment=function(e,t,r){var n,i=this.program.resolver,a=this.currentFunction,s=i.resolveExpression(e,a);if(!s)return this.module.createUnreachable();switch(s.kind){case l.ElementKind.GLOBAL:if(!this.compileGlobal(s))return this.module.createUnreachable();assert(s.type!=d.Type.void);case l.ElementKind.LOCAL:case l.ElementKind.FIELD:n=s.type;break;case l.ElementKind.PROPERTY:var c=s.setterPrototype;if(c){var p=this.resolver.resolveFunction(c,null);if(!p)return this.module.createUnreachable();assert(1==p.signature.parameterTypes.length),n=p.signature.parameterTypes[0];break}return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,s.internalName),this.module.createUnreachable();case l.ElementKind.CLASS:if(i.currentElementExpression){var u=a.flow.is(4096),h=s.lookupOverload(l.OperatorKind.INDEXED_SET,u);if(!h)return s.lookupOverload(l.OperatorKind.INDEXED_GET,u)?this.error(o.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,s.internalName):this.error(o.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,s.internalName),this.module.createUnreachable();assert(2==h.signature.parameterTypes.length),n=h.signature.parameterTypes[1];break}default:return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}assert(n!=d.Type.void);var _=this.compileExpression(t,n,1,0);return this.compileAssignmentWithValue(e,_,r!=d.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.resolver.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();switch(i.kind){case l.ElementKind.LOCAL:var a=i.type;if(assert(a!=d.Type.void),this.currentType=r?a:d.Type.void,i.is(p.CommonFlags.CONST))return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var s=this.currentFunction.flow;return a.is(36)&&s.setLocalWrapped(i.index,!s.canOverflow(t,a)),r?n.createTeeLocal(i.index,t):n.createSetLocal(i.index,t);case l.ElementKind.GLOBAL:if(!this.compileGlobal(i))return n.createUnreachable();a=i.type;if(assert(a!=d.Type.void),this.currentType=r?a:d.Type.void,i.is(p.CommonFlags.CONST))return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();if(t=this.ensureSmallIntegerWrap(t,a),r){var c=a.toNativeType(),u=i.internalName;return n.createBlock(null,[n.createSetGlobal(u,t),n.createGetGlobal(u,c)],c)}return n.createSetGlobal(i.internalName,t);case l.ElementKind.FIELD:var h=i.declaration;if(i.is(p.CommonFlags.READONLY)&&!this.currentFunction.is(p.CommonFlags.CONSTRUCTOR)&&null!=h&&null==h.initializer)return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var _=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0);a=i.type;this.currentType=r?a:d.Type.void;c=a.toNativeType();if(10==a.kind&&(t=this.ensureSmallIntegerWrap(t,a)),r){s=(L=this.currentFunction).flow;var y=L.getAndFreeTempLocal(a,!s.canOverflow(t,a)).index;return n.createBlock(null,[n.createSetLocal(y,t),n.createStore(a.byteSize,m,n.createGetLocal(y,c),c,i.memoryOffset),n.createGetLocal(y,c)],c)}return n.createStore(a.byteSize,m,t,c,i.memoryOffset);case l.ElementKind.PROPERTY:var g=i.setterPrototype;if(g){var E=this.resolver.resolveFunction(g,null);if(!E)return n.createUnreachable();if(!r){if(E.is(p.CommonFlags.INSTANCE)){_=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0);return this.makeCallDirect(E,[m,t])}return this.makeCallDirect(E,[t])}var T=i.getterPrototype;assert(null!=T);var f=this.resolver.resolveFunction(T,null);if(!f)return n.createUnreachable();var I=(R=f.signature.returnType).toNativeType();if(E.is(p.CommonFlags.INSTANCE)){_=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0),y=this.currentFunction.getAndFreeTempLocal(R,!1).index;return n.createBlock(null,[this.makeCallDirect(E,[n.createTeeLocal(y,m),t]),this.makeCallDirect(f,[n.createGetLocal(y,I)])],I)}return n.createBlock(null,[this.makeCallDirect(E,[t]),this.makeCallDirect(f)],I)}return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();case l.ElementKind.CLASS:var v=this.resolver.currentElementExpression;if(v){var A=this.currentFunction.flow.is(4096),C=i.lookupOverload(l.OperatorKind.INDEXED_GET,A);if(!C)return this.error(o.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.internalName),n.createUnreachable();var N=i.lookupOverload(l.OperatorKind.INDEXED_SET,A);if(!N)return this.error(o.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.internalName),this.currentType=r?C.signature.returnType:d.Type.void,n.createUnreachable();var O=i.type,S=(_=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0),this.compileExpression(v,d.Type.i32,1,0));if(r){var L,b=(L=this.currentFunction).getTempLocal(O,!1),k=L.getAndFreeTempLocal(this.currentType,!1),R=C.signature.returnType;return this.currentFunction.freeTempLocal(b),n.createBlock(null,[this.makeCallDirect(N,[n.createTeeLocal(b.index,m),n.createTeeLocal(k.index,S),t]),this.makeCallDirect(C,[n.createGetLocal(b.index,b.type.toNativeType()),n.createGetLocal(k.index,k.type.toNativeType())])],R.toNativeType())}return this.makeCallDirect(N,[m,S,t])}}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()},t.prototype.compileCallExpression=function(e,t){var r,n,i=this.module,a=this.currentFunction,s=this.resolver.resolveExpression(e.expression,a);if(!s)return i.createUnreachable();switch(s.kind){case l.ElementKind.FUNCTION_PROTOTYPE:var u=s,_=e.typeArguments;if(u.is(p.CommonFlags.AMBIENT|p.CommonFlags.BUILTIN))return this.compileCallExpressionBuiltin(u,e,t);var m=null;if(_){if(!u.is(p.CommonFlags.GENERIC))return this.error(o.DiagnosticCode.Type_0_is_not_generic,e.expression.range,u.internalName),i.createUnreachable();m=this.resolver.resolveFunctionInclTypeArguments(u,_,this.currentFunction.flow.contextualTypeArguments,e)}else{if(u.is(p.CommonFlags.GENERIC)){for(var y=new Map,g=assert(u.declaration.typeParameters),E=g.length,T=0;Ts&&!i)||(this.error(o.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,s.toString(),t.toString()),!1)},t.prototype.compileCallDirect=function(e,t,r,n,i){void 0===n&&(n=0),void 0===i&&(i=!1);var a=t.length,s=e.signature;if(!this.checkCallSignature(s,a,0!=n,r))return this.module.createUnreachable();if(i){if(assert(!e.is(p.CommonFlags.TRAMPOLINE)),e!==this.currentInlineFunction){this.currentInlineFunction=e;var c=this.compileCallInlineUnchecked(e,t,r,n);return this.currentInlineFunction=null,c}e===this.currentFunction&&this.warning(o.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 l.ElementKind.GLOBAL:if(!this.compileGlobal(E))return this.module.createUnreachable();var I=E.type;return assert(I!=d.Type.void),E.is(p.CommonFlags.INLINED)?this.compileInlineConstant(E,t,r):(this.currentType=I,this.module.createGetGlobal(E.internalName,I.toNativeType()));case l.ElementKind.ENUMVALUE:return E.is(p.CommonFlags.COMPILED)?(this.currentType=d.Type.i32,E.is(p.CommonFlags.INLINED)?this.module.createI32(E.constantValue):this.module.createGetGlobal(E.internalName,c.NativeType.I32)):(this.error(o.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,e.range),this.currentType=d.Type.i32,this.module.createUnreachable());case l.ElementKind.FUNCTION_PROTOTYPE:var v=this.resolver.resolveFunction(E,null,i.flow.contextualTypeArguments);if(!v||!this.compileFunction(v))return n.createUnreachable();var A=this.ensureFunctionTableEntry(v);return this.currentType=v.signature.type,this.module.createI32(A)}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileInstanceOfExpression=function(e,t){var r=this.module,n=this.compileExpressionRetainType(e.expression,this.options.usizeType,0),i=this.currentType,a=this.resolver.resolveType(e.isType);return this.currentType=d.Type.bool,a?i.is(512)&&!a.is(512)?i.nonNullableType.isAssignableTo(a)?r.createBinary(i.is(64)?c.BinaryOp.NeI64:c.BinaryOp.NeI32,n,i.toNativeZero(r)):r.createI32(0):r.createI32(i.isAssignableTo(a,!0)?1:0):r.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){void 0===r&&(r=!1);var n=this.module;switch(e.literalKind){case h.LiteralKind.ARRAY:assert(!r);var i=t.classReference;return i&&i.prototype==this.program.arrayPrototype?this.compileArrayLiteral(assert(i.typeArguments)[0],e.elementExpressions,e):(this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable());case h.LiteralKind.FLOAT:var a=e.value;return r&&(a=-a),t==d.Type.f32?n.createF32(a):(this.currentType=d.Type.f64,n.createF64(a));case h.LiteralKind.INTEGER:var s=e.value;switch(r&&(s=i64_sub(i64_new(0),s)),t.kind){case 0:if(i64_is_i8(s))return n.createI32(i64_low(s));break;case 5:if(i64_is_u8(s))return n.createI32(i64_low(s));break;case 1:if(i64_is_i16(s))return n.createI32(i64_low(s));break;case 6:if(i64_is_u16(s))return n.createI32(i64_low(s));break;case 2:if(i64_is_i32(s))return n.createI32(i64_low(s));break;case 7:if(i64_is_u32(s))return n.createI32(i64_low(s));break;case 10:if(i64_is_bool(s))return n.createI32(i64_low(s));break;case 4:if(!this.options.isWasm64){if(i64_is_i32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 9:if(!this.options.isWasm64){if(i64_is_u32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 3:case 8:return n.createI64(i64_low(s),i64_high(s));case 11:if(i64_is_f32(s))return n.createF32(i64_to_f32(s));break;case 12:if(i64_is_f64(s))return n.createF64(i64_to_f64(s));break;case 13:break;default:return assert(!1),n.createUnreachable()}return i64_is_i32(s)?(this.currentType=d.Type.i32,n.createI32(i64_low(s))):i64_is_u32(s)?(this.currentType=d.Type.u32,n.createI32(i64_low(s))):(this.currentType=d.Type.i64,n.createI64(i64_low(s),i64_high(s)));case h.LiteralKind.STRING:return assert(!r),this.compileStaticString(e.value);case h.LiteralKind.OBJECT:return assert(!r),this.compileObjectLiteral(e,t)}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,n.createUnreachable()},t.prototype.compileStaticString=function(e){var t=this.module,r=this.options,n=this.stringSegments,i=n.get(e);if(!i){var a=e.length,s=new Uint8Array(4+2*a);s[0]=255&a,s[1]=a>>>8&255,s[2]=a>>>16&255,s[3]=a>>>24&255;for(var o=0;o>>8&255;i=this.addMemorySegment(s,r.usizeType.byteSize),n.set(e,i)}var c=i.offset,p=this.program.typesLookup.get("string");return this.currentType=p||r.usizeType,r.isWasm64?t.createI64(i64_low(c),i64_high(c)):(assert(i64_is_i32(c)),t.createI32(i64_low(c)))},t.prototype.compileArrayLiteral=function(e,t,r){var n=!0,i=this.module,a=assert(this.program.arrayPrototype);if(!a||a.kind!=l.ElementKind.CLASS_PROTOTYPE)return i.createUnreachable();var s=this.resolver.resolveClass(a,[e]);if(!s)return i.createUnreachable();var p=s.type,u=t.length;if(u){var h=e.toNativeType(),d=void 0,m=void 0;switch(h){case c.NativeType.I32:d=changetype(new Int32Array(u)),m=4*u;break;case c.NativeType.I64:d=changetype(new Array(u)),m=8*u;break;case c.NativeType.F32:d=changetype(new Float32Array(u)),m=4*u;break;case c.NativeType.F64:d=changetype(new Float64Array(u)),m=8*u;break;default:return assert(!1),i.createUnreachable()}for(var y=new Array(u),g=void 0,E=0;E",t.toString()),r.createUnreachable();var i=n.constructorInstance;if(i){if(i.signature.requiredParameters)return this.error(o.DiagnosticCode.Constructor_of_class_0_must_not_require_any_arguments,e.range,n.toString()),r.createUnreachable();if(i.is(p.CommonFlags.PRIVATE))return this.error(o.DiagnosticCode.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,e.range,n.toString()),r.createUnreachable();if(i.is(p.CommonFlags.PROTECTED))return this.error(o.DiagnosticCode.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,e.range,n.toString()),r.createUnreachable()}var a=e.names,c=a.length,u=e.values,h=n.members,d=!1,_=new Array(c+2),m=this.currentFunction.getTempLocal(this.options.usizeType);assert(c==u.length);for(var y=0,g=c;y=0);var h=this.compileExpressionRetainType(u,this.options.usizeType,0);return this.currentType=i.type,n.createLoad(i.type.byteSize,i.type.is(5),h,i.type.toNativeType(),i.memoryOffset);case l.ElementKind.PROPERTY:var _=i.getterPrototype;if(_){var m=this.resolver.resolveFunction(_,null);if(!m)return n.createUnreachable();var y=m.signature;if(!this.checkCallSignature(y,0,m.is(p.CommonFlags.INSTANCE),e))return n.createUnreachable();var g=0!=(m.decoratorFlags&l.DecoratorFlags.INLINE);if(m.is(p.CommonFlags.INSTANCE)){s=assert(m.parent);assert(s.kind==l.ElementKind.CLASS);u=assert(this.resolver.currentThisExpression),h=this.compileExpressionRetainType(u,this.options.usizeType,0);return this.currentType=y.returnType,this.compileCallDirect(m,[],e,h,g)}return this.currentType=y.returnType,this.compileCallDirect(m,[],e,0,g)}return this.error(o.DiagnosticCode.Property_0_does_not_exist_on_type_1,e.range,i.simpleName,i.parent.toString()),n.createUnreachable()}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()},t.prototype.compileTernaryExpression=function(e,t){var r=e.ifThen,n=e.ifElse,i=this.currentFunction,a=i.flow,s=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var l=this.precomputeExpressionRef(s);if(c.getExpressionId(l)==c.ExpressionId.Const&&c.getExpressionType(l)==c.NativeType.I32)return c.getConstValueI32(l)?this.compileExpressionRetainType(r,t,0):this.compileExpressionRetainType(n,t,0);s=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType)}var u=a.fork();i.flow=u;var h=this.compileExpressionRetainType(r,t,0),_=this.currentType;u.free();var m=a.fork();i.flow=m;var y=this.compileExpressionRetainType(n,t,0),g=this.currentType;i.flow=m.free(),a.inheritMutual(u,m);var E=d.Type.commonCompatible(_,g,!1);return E?(h=this.convertExpression(h,_,E,1,0,r),y=this.convertExpression(y,g,E,1,0,n),this.currentType=E,this.module.createIf(s,h,y)):(this.error(o.DiagnosticCode.Type_0_is_not_assignable_to_type_1,e.range,_.toString(),g.toString()),this.currentType=t,this.module.createUnreachable())},t.prototype.compileUnaryPostfixExpression=function(e,t){var r=this.module,n=this.currentFunction,i=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0);if(c.getExpressionId(i)==c.ExpressionId.Unreachable)return i;var a,s,p,l=this.currentType;switch(e.operator){case u.Token.PLUS_PLUS:if(this.currentType.is(256))return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(l.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=c.BinaryOp.AddI32,s=c.NativeType.I32,p=r.createI32(1);break;case 9:case 4:a=(h=this.options).isWasm64?c.BinaryOp.AddI64:c.BinaryOp.AddI32,s=h.nativeSizeType,p=l.toNativeOne(r);break;case 3:case 8:a=c.BinaryOp.AddI64,s=c.NativeType.I64,p=r.createI64(1);break;case 11:a=c.BinaryOp.AddF32,s=c.NativeType.F32,p=r.createF32(1);break;case 12:a=c.BinaryOp.AddF64,s=c.NativeType.F64,p=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;case u.Token.MINUS_MINUS:if(this.currentType.is(256))return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(l.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=c.BinaryOp.SubI32,s=c.NativeType.I32,p=r.createI32(1);break;case 9:case 4:var h;a=(h=this.options).isWasm64?c.BinaryOp.SubI64:c.BinaryOp.SubI32,s=h.nativeSizeType,p=l.toNativeOne(r);break;case 3:case 8:a=c.BinaryOp.SubI64,s=c.NativeType.I64,p=r.createI64(1);break;case 11:a=c.BinaryOp.SubF32,s=c.NativeType.F32,p=r.createF32(1);break;case 12:a=c.BinaryOp.SubF64,s=c.NativeType.F64,p=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;default:return assert(!1),r.createUnreachable()}if(t==d.Type.void)return this.compileAssignmentWithValue(e.operand,r.createBinary(a,i,p),!1);var _=n.getTempLocal(l,!1),m=this.compileAssignmentWithValue(e.operand,r.createBinary(a,this.module.createGetLocal(_.index,s),p),!1);this.currentType=assert(_).type,n.freeTempLocal(_);var y=_.index;return r.createBlock(null,[r.createSetLocal(y,i),m,r.createGetLocal(y,s)],s)},t.prototype.compileUnaryPrefixExpression=function(e,t){var r,n=this.module,i=!1;switch(e.operator){case u.Token.PLUS:if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.PLUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}break;case u.Token.MINUS:if(e.operand.kind==h.NodeKind.LITERAL&&(e.operand.literalKind==h.LiteralKind.INTEGER||e.operand.literalKind==h.LiteralKind.FLOAT)){r=this.compileLiteralExpression(e.operand,t,!0),this.options.sourceMap&&this.addDebugLocation(r,e.range);break}if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.MINUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(c.BinaryOp.SubI32,n.createI32(0),r);break;case 9:case 4:r=n.createBinary(this.options.isWasm64?c.BinaryOp.SubI64:c.BinaryOp.SubI32,this.currentType.toNativeZero(n),r);break;case 3:case 8:r=n.createBinary(c.BinaryOp.SubI64,n.createI64(0),r);break;case 11:r=n.createUnary(c.UnaryOp.NegF32,r);break;case 12:r=n.createUnary(c.UnaryOp.NegF64,r);break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.PLUS_PLUS:if(i=!0,r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.PREFIX_INC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(c.BinaryOp.AddI32,r,this.module.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?c.BinaryOp.AddI64:c.BinaryOp.AddI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(c.BinaryOp.AddI64,r,n.createI64(1));break;case 11:r=n.createBinary(c.BinaryOp.AddF32,r,n.createF32(1));break;case 12:r=n.createBinary(c.BinaryOp.AddF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.MINUS_MINUS:if(i=!0,r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.PREFIX_DEC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(c.BinaryOp.SubI32,r,n.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?c.BinaryOp.SubI64:c.BinaryOp.SubI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(c.BinaryOp.SubI64,r,n.createI64(1));break;case 11:r=n.createBinary(c.BinaryOp.SubF32,r,n.createF32(1));break;case 12:r=n.createBinary(c.BinaryOp.SubF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.EXCLAMATION:if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256))if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}r=this.makeIsFalseish(r,this.currentType),this.currentType=d.Type.bool;break;case u.Token.TILDE:if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t.is(8)?d.Type.i64:t,0,0),this.currentType.is(256)){var a,s;if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.BITWISE_NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(r=this.convertExpression(r,this.currentType,this.currentType.intType,1,0,e.operand),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(c.BinaryOp.XorI32,r,n.createI32(-1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?c.BinaryOp.XorI64:c.BinaryOp.XorI32,r,this.currentType.toNativeNegOne(n));break;case 3:case 8:r=n.createBinary(c.BinaryOp.XorI64,r,n.createI64(-1,-1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.TYPEOF:return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();default:return assert(!1),n.createUnreachable()}return i?this.compileAssignmentWithValue(e.operand,r,t!=d.Type.void):r},t.prototype.ensureSmallIntegerWrap=function(e,t){var r=this.module,n=this.currentFunction.flow;switch(t.kind){case 0:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(c.UnaryOp.ExtendI8ToI32,e):r.createBinary(c.BinaryOp.ShrI32,r.createBinary(c.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24)));break;case 1:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(c.UnaryOp.ExtendI16ToI32,e):r.createBinary(c.BinaryOp.ShrI32,r.createBinary(c.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16)));break;case 5:n.canOverflow(e,t)&&(e=r.createBinary(c.BinaryOp.AndI32,e,r.createI32(255)));break;case 6:n.canOverflow(e,t)&&(e=r.createBinary(c.BinaryOp.AndI32,e,r.createI32(65535)));break;case 10:n.canOverflow(e,t)&&(e=r.createBinary(c.BinaryOp.AndI32,e,r.createI32(1)))}return e},t.prototype.makeIsFalseish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return r.createUnary(c.UnaryOp.EqzI32,e);case 3:case 8:return r.createUnary(c.UnaryOp.EqzI64,e);case 9:case 4:return r.createUnary(64==t.size?c.UnaryOp.EqzI64:c.UnaryOp.EqzI32,e);case 11:return r.createBinary(c.BinaryOp.EqF32,e,r.createF32(0));case 12:return r.createBinary(c.BinaryOp.EqF64,e,r.createF64(0));default:return assert(!1),r.createI32(1)}},t.prototype.makeIsTrueish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return e;case 3:case 8:return r.createBinary(c.BinaryOp.NeI64,e,r.createI64(0));case 9:case 4:return 64==t.size?r.createBinary(c.BinaryOp.NeI64,e,r.createI64(0)):e;case 11:return r.createBinary(c.BinaryOp.NeF32,e,r.createF32(0));case 12:return r.createBinary(c.BinaryOp.NeF64,e,r.createF64(0));default:return assert(!1),r.createI32(0)}},t.prototype.makeAllocate=function(e,t){var r,n,a=this.module,o=this.currentFunction,c=this.options.nativeSizeType,u=o.getTempLocal(e.type,!1),h=new Array;if(h.push(a.createSetLocal(u.index,s.compileAllocate(this,e,t))),e.members)try{for(var d=i(e.members.values()),_=d.next();!_.done;_=d.next()){var m=_.value;if(m.kind==l.ElementKind.FIELD){var y=m,g=y.type,E=g.toNativeType(),T=y.prototype.declaration;if(assert(!y.isAny(p.CommonFlags.CONST)),T.initializer)h.push(a.createStore(g.byteSize,a.createGetLocal(u.index,c),this.compileExpression(T.initializer,g,1,0),E,y.memoryOffset));else{var f=y.prototype.declaration.parameterIndex;h.push(a.createStore(g.byteSize,a.createGetLocal(u.index,c),f>=0?a.createGetLocal(1+f,E):g.toNativeZero(a),E,y.memoryOffset))}}}}catch(e){r={error:e}}finally{try{_&&!_.done&&(n=d.return)&&n.call(d)}finally{if(r)throw r.error}}return h.push(a.createGetLocal(u.index,c)),o.freeTempLocal(u),this.currentType=e.type,a.createBlock(null,h,c)},t.prototype.makeConditionalAllocate=function(e,t){var r=this.module,n=this.options.nativeSizeType;return this.currentType=e.type,r.createIf(n==c.NativeType.I64?r.createBinary(c.BinaryOp.NeI64,r.createGetLocal(0,c.NativeType.I64),r.createI64(0)):r.createGetLocal(0,c.NativeType.I32),r.createGetLocal(0,n),r.createTeeLocal(0,this.makeAllocate(e,t)))},t.prototype.addDebugLocation=function(e,t){var r=this.currentFunction,n=t.source;n.debugInfoIndex<0&&(n.debugInfoIndex=this.module.addDebugInfoFile(n.normalizedPath)),t.debugInfoRef=e,r.debugLocations.push(t)},t}(o.DiagnosticEmitter);function T(e,t){switch(void 0===t&&(t=e.simpleName),e.kind){case l.ElementKind.FUNCTION:return(r=e.parent||e.prototype.parent)?T(r)+(e.is(p.CommonFlags.INSTANCE)?p.INSTANCE_DELIMITER:p.STATIC_DELIMITER)+t:t;case l.ElementKind.FIELD:case l.ElementKind.ENUMVALUE:return T(r=assert(e.parent))+(e.is(p.CommonFlags.INSTANCE)?p.INSTANCE_DELIMITER:p.STATIC_DELIMITER)+t;case l.ElementKind.CLASS:return(r=e.prototype.parent)?T(r)+p.STATIC_DELIMITER+t:t;default:var r;return(r=e.parent)?T(r)+p.STATIC_DELIMITER+t:t}}function f(e,t,r){if(void 0===r&&(r=null),y=r?r.simpleName:t.range.source.simplePath,g=e.simpleName,e.hasDecorator(l.DecoratorFlags.EXTERNAL)){var n=e.program,i=assert(h.findDecorator(h.DecoratorKind.EXTERNAL,t.decorators)),a=i.arguments;if(a&&a.length){var s=a[0];s.kind==h.NodeKind.LITERAL&&s.literalKind==h.LiteralKind.STRING?(g=s.value,a.length>=2&&((s=a[1]).kind==h.NodeKind.LITERAL&&s.literalKind==h.LiteralKind.STRING?(y=g,g=s.value,a.length>2&&n.error(o.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"2",a.length.toString())):n.error(o.DiagnosticCode.String_literal_expected,s.range))):n.error(o.DiagnosticCode.String_literal_expected,s.range)}else n.error(o.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,i.range,"1","0")}}t.Compiler=E},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var i=r(0),a=r(5),s=r(8),o=r(1),c=r(3),p=r(2),l=i.LIBRARY_PREFIX+"builtins.ts",u=function(e){function t(){var t=e.call(this)||this;return t.backlog=new Array,t.seenlog=new Set,t.donelog=new Set,t.onComment=null,t.tryParseSignatureIsSignature=!1,t.parseParametersThis=null,t.program=new a.Program(t.diagnostics),t}return n(t,e),t.prototype.parseFile=function(e,t,r){var n=c.normalizePath(t),a=p.mangleInternalPath(n);if(!this.donelog.has(a)){this.donelog.add(a),this.seenlog.add(a);var o=new p.Source(n,e,r?p.SourceKind.ENTRY:t.startsWith(i.LIBRARY_PREFIX)&&t.indexOf(i.PATH_DELIMITER,i.LIBRARY_PREFIX.length)<0?p.SourceKind.LIBRARY:p.SourceKind.DEFAULT),u=this.program;u.sources.push(o),o.normalizedPath==l&&o.set(i.CommonFlags.BUILTIN);var h=new s.Tokenizer(o,u.diagnostics);h.onComment=this.onComment,o.tokenizer=h;for(var d=o.statements;!h.skip(s.Token.ENDOFFILE);){var _=this.parseTopLevelStatement(h);_&&(_.parent=o,d.push(_))}h.finish()}},t.prototype.parseTopLevelStatement=function(e,t){void 0===t&&(t=null);for(var r=i.CommonFlags.NONE,n=-1,a=null;e.skip(s.Token.AT);){n<0&&(n=e.tokenPos);var c=this.parseDecorator(e);c?(a||(a=[]),a.push(c)):this.skipStatement(e)}r|=e.source.flags&i.CommonFlags.BUILTIN;var p=0,l=0;e.skip(s.Token.EXPORT)&&(e.skip(s.Token.DEFAULT)&&this.error(o.DiagnosticCode.Operation_not_supported,e.range()),n<0&&(n=e.tokenPos),r|=i.CommonFlags.EXPORT,p=e.tokenPos,l=e.pos);var u=null!=t&&t.is(i.CommonFlags.AMBIENT);e.skip(s.Token.DECLARE)?(n<0&&(n=e.tokenPos),u&&this.error(o.DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,e.range()),r|=i.CommonFlags.DECLARE|i.CommonFlags.AMBIENT):u&&(r|=i.CommonFlags.AMBIENT);var h=null,d=e.peek();switch(n<0&&(n=e.nextTokenPos),d){case s.Token.CONST:if(e.next(),r|=i.CommonFlags.CONST,e.skip(s.Token.ENUM)){h=this.parseEnum(e,r,a,n);break}h=this.parseVariable(e,r,a,n),a=null;break;case s.Token.LET:r|=i.CommonFlags.LET;case s.Token.VAR:e.next(),h=this.parseVariable(e,r,a,n),a=null;break;case s.Token.ENUM:e.next(),h=this.parseEnum(e,r,a,n),a=null;break;case s.Token.FUNCTION:e.next(),h=this.parseFunction(e,r,a,n),a=null;break;case s.Token.ABSTRACT:var _=e.mark();if(e.next(),!e.skip(s.Token.CLASS)){e.reset(_),h=this.parseStatement(e,!0);break}e.discard(_),r|=i.CommonFlags.ABSTRACT;case s.Token.CLASS:case s.Token.INTERFACE:e.next(),h=this.parseClassOrInterface(e,r,a,n),a=null;break;case s.Token.NAMESPACE:_=e.mark();e.next(),e.peek(!1,s.IdentifierHandling.PREFER)==s.Token.IDENTIFIER?(e.discard(_),h=this.parseNamespace(e,r,a,n),a=null):(e.reset(_),h=this.parseStatement(e,!0));break;case s.Token.IMPORT:e.next(),h=(r|=i.CommonFlags.IMPORT)&i.CommonFlags.EXPORT?this.parseExportImport(e,n):this.parseImport(e);break;case s.Token.TYPE:_=e.mark();e.next(),e.peek(!1,s.IdentifierHandling.PREFER)==s.Token.IDENTIFIER?(e.discard(_),h=this.parseTypeDeclaration(e,r,a,n),a=null):(e.reset(_),h=this.parseStatement(e,!0));break;default:r&i.CommonFlags.EXPORT?h=this.parseExport(e,r,n):(l&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(p,l),"export"),t||(h=this.parseStatement(e,!0)))}if(a)for(var m=0,y=a.length;m"),null}if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"null"),null;_=!0}n=p.Node.createType(h,d,_,e.range(a,e.pos))}for(;e.skip(s.Token.OPENBRACKET);){var y=e.tokenPos;if(!e.skip(s.Token.CLOSEBRACKET))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;var g=e.range(y,e.pos);_=!1;if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"null"),null;_=!0}if(n=p.Node.createType(p.Node.createIdentifierExpression("Array",g),[n],_,e.range(a,e.pos)),_)break}return n},t.prototype.tryParseSignature=function(e){var t,r=e.mark(),n=e.tokenPos,i=null,a=null,c=!1;if(e.skip(s.Token.CLOSEPAREN))c=!0,e.discard(r),i=[];else{c=!1;do{var l=p.ParameterKind.DEFAULT;if(e.skip(s.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),l=p.ParameterKind.REST),e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return e.reset(r),this.tryParseSignatureIsSignature=!1,null;c=!0,e.discard(r);var u=this.parseType(e,!1);if(!u)return null;if(u.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,u.range),this.tryParseSignatureIsSignature=!0,null;a=u}else{if(!e.skipIdentifier())return c?this.error(o.DiagnosticCode.Identifier_expected,e.range()):e.reset(r),this.tryParseSignatureIsSignature=c,null;var h=p.Node.createIdentifierExpression(e.readIdentifier(),e.range(e.tokenPos,e.pos));if(e.skip(s.Token.QUESTION)&&(c=!0,e.discard(r),l==p.ParameterKind.REST?this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):l=p.ParameterKind.OPTIONAL),e.skip(s.Token.COLON)){c=!0,e.discard(r);var d=this.parseType(e);if(!d)return this.tryParseSignatureIsSignature=c,null;var _=new p.ParameterNode;_.parameterKind=l,_.name=h,_.type=d,i?i.push(_):i=[_]}else c&&this.error(o.DiagnosticCode.Type_expected,e.range())}}while(e.skip(s.Token.COMMA));if(!e.skip(s.Token.CLOSEPAREN))return c?this.error(o.DiagnosticCode._0_expected,e.range(),")"):e.reset(r),this.tryParseSignatureIsSignature=c,null}return e.skip(s.Token.EQUALS_GREATERTHAN)?(c=!0,e.discard(r),(t=this.parseType(e))?(this.tryParseSignatureIsSignature=!0,p.Node.createSignature(i||[],t,a,!1,e.range(n,e.pos))):(this.tryParseSignatureIsSignature=c,null)):(c?this.error(o.DiagnosticCode._0_expected,e.range(),"=>"):e.reset(r),this.tryParseSignatureIsSignature=c,null)},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skipIdentifier()){for(var r=e.readIdentifier(),n=p.Node.createIdentifierExpression(r,e.range(t,e.pos));e.skip(s.Token.DOT);){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;r=e.readIdentifier(),n=p.Node.createPropertyAccessExpression(n,p.Node.createIdentifierExpression(r,e.range()),e.range(t,e.pos))}var i=void 0;if(!e.skip(s.Token.OPENPAREN))return p.Node.createDecorator(n,null,e.range(t,e.pos));if(i=this.parseArguments(e))return p.Node.createDecorator(n,i,e.range(t,e.pos))}else this.error(o.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r,n){var i=new Array;do{var a=this.parseVariableDeclaration(e,t,r);if(!a)return null;i.push(a)}while(e.skip(s.Token.COMMA));var o=p.Node.createVariableStatement(i,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),o},t.prototype.parseVariableDeclaration=function(e,t,r){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var n=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=t,c=null;e.skip(s.Token.COLON)&&(c=this.parseType(e));var l=null;if(e.skip(s.Token.EQUALS)){if(a&i.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,e.range()),!(l=this.parseExpression(e,2)))return null}else a&i.CommonFlags.CONST?a&i.CommonFlags.AMBIENT||this.error(o.DiagnosticCode._const_declarations_must_be_initialized,n.range):c||this.error(o.DiagnosticCode.Type_expected,e.range(e.pos));return p.Node.createVariableDeclaration(n,c,l,r,a,s.Range.join(n.range,e.range()))},t.prototype.parseEnum=function(e,t,r,n){if(e.next()!=s.Token.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var a=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.next()!=s.Token.OPENBRACE)return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;for(var c=new Array;!e.skip(s.Token.CLOSEBRACE);){var l=this.parseEnumValue(e,i.CommonFlags.NONE);if(!l)return null;if(c.push(l),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEBRACE))break;return this.error(o.DiagnosticCode._0_expected,e.range(),"}"),null}}var u=p.Node.createEnumDeclaration(a,c,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),u},t.prototype.parseEnumValue=function(e,t){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),n=null;return e.skip(s.Token.EQUALS)&&!(n=this.parseExpression(e,2))?null:p.Node.createEnumValueDeclaration(r,n,t,s.Range.join(r.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=s.Token.SEMICOLON&&e.nextToken!=s.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=p.Node.createReturnStatement(t,e.range());return e.skip(s.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){for(var t=new Array;!e.skip(s.Token.GREATERTHAN);){var r=this.parseTypeParameter(e);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.GREATERTHAN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),">"),null}}return 0===t.length&&this.error(o.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range()),t},t.prototype.parseTypeParameter=function(e){if(e.next()==s.Token.IDENTIFIER){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(s.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return p.Node.createTypeParameter(t,r,s.Range.join(t.range,e.range()))}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e,t){void 0===t&&(t=!1);var r=new Array,n=null,i=!1,a=!1,c=null;if(this.parseParametersThis=null,e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;if(!(c=this.parseType(e)))return null;if(c.kind==p.NodeKind.TYPE?this.parseParametersThis=c:this.error(o.DiagnosticCode.Operation_not_supported,c.range),!e.skip(s.Token.COMMA))return e.skip(s.Token.CLOSEPAREN)?r:(this.error(o.DiagnosticCode._0_expected,e.range(),")"),null)}for(;!e.skip(s.Token.CLOSEPAREN);){var l=this.parseParameter(e,t);if(!l)return null;switch(n&&!a&&(this.error(o.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,n.name.range),a=!0),l.parameterKind){default:i&&this.error(o.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,l.name.range);break;case p.ParameterKind.OPTIONAL:i=!0;break;case p.ParameterKind.REST:n=l}if(r.push(l),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return r},t.prototype.parseParameter=function(e,t){void 0===t&&(t=!1);var r=!1,n=!1,a=null,c=i.CommonFlags.NONE;if(t&&(e.skip(s.Token.PUBLIC)?(a=e.range(),c|=i.CommonFlags.PUBLIC):e.skip(s.Token.PROTECTED)?(a=e.range(),c|=i.CommonFlags.PROTECTED):e.skip(s.Token.PRIVATE)&&(a=e.range(),c|=i.CommonFlags.PRIVATE),e.peek()==s.Token.READONLY)){var l=e.mark();e.next(),e.peek()!=s.Token.COLON?(e.discard(l),a||(a=e.range()),c|=i.CommonFlags.READONLY):e.reset(l)}if(e.skip(s.Token.DOT_DOT_DOT)&&(c?this.error(o.DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,e.range()):a=e.range(),r=!0),e.skipIdentifier()){r||(a=e.range());var u=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),h=null;if((n=e.skip(s.Token.QUESTION))&&r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,u.range),e.skip(s.Token.COLON)){if(!(h=this.parseType(e)))return null}else h=p.Node.createOmittedType(e.range(e.pos));var d=null;if(e.skip(s.Token.EQUALS)&&(r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,u.range),n?this.error(o.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,u.range):n=!0,!(d=this.parseExpression(e,2))))return null;var _=p.Node.createParameter(u,h,d,r?p.ParameterKind.REST:n?p.ParameterKind.OPTIONAL:p.ParameterKind.DEFAULT,s.Range.join(a,e.range()));return _.flags|=c,_}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseFunction=function(e,t,r,n){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range(e.pos)),null;var a=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=-1,l=null;if(e.skip(s.Token.LESSTHAN)){if(c=e.tokenPos,!(l=this.parseTypeParameters(e)))return null;t|=i.CommonFlags.GENERIC}if(!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null;c<0&&(c=e.tokenPos);var u=this.parseParameters(e);if(!u)return null;var h=this.parseParametersThis,d=0!=(t&i.CommonFlags.SET);d&&(1!=u.length&&this.error(o.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,a.range),u.length&&u[0].initializer&&this.error(o.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,a.range)),t&i.CommonFlags.GET&&u.length&&this.error(o.DiagnosticCode.A_get_accessor_cannot_have_parameters,a.range);var _=null;if(e.skip(s.Token.COLON)&&!(_=this.parseType(e,!0,d)))return null;_||(_=p.Node.createOmittedType(e.range(e.pos)),d||this.error(o.DiagnosticCode.Type_expected,_.range));var m=p.Node.createSignature(u,_,h,!1,e.range(c,e.pos)),y=null;if(e.skip(s.Token.OPENBRACE)){if(t&i.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(y=this.parseBlockStatement(e,!1)))return null}else t&i.CommonFlags.AMBIENT||this.error(o.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var g=p.Node.createFunctionDeclaration(a,l,m,y,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),g},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==s.Token.FUNCTION){if(t=e.skipIdentifier()?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==s.Token.OPENPAREN),t=p.Node.createEmptyIdentifierExpression(e.range(e.tokenPos));var i=e.pos,a=this.parseParameters(e);return a?this.parseFunctionExpressionCommon(e,t,a,n,r,i):null},t.prototype.parseFunctionExpressionCommon=function(e,t,r,n,a,c){void 0===a&&(a=-1),void 0===c&&(c=-1),a<0&&(a=t.range.start),c<0&&(c=a);var l=null;if(e.skip(s.Token.COLON)){if(!(l=this.parseType(e)))return null}else l=p.Node.createOmittedType(e.range(e.pos)),this.error(o.DiagnosticCode.Type_expected,l.range);if(n&&!e.skip(s.Token.EQUALS_GREATERTHAN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var u,h=p.Node.createSignature(r,l,null,!1,e.range(c,e.pos));if(n)u=this.parseStatement(e,!1);else{if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;u=this.parseBlockStatement(e,!1)}if(!u)return null;var d=p.Node.createFunctionDeclaration(t,null,h,u,null,n?i.CommonFlags.ARROW:i.CommonFlags.NONE,e.range(a,e.pos));return p.Node.createFunctionExpression(d)},t.prototype.parseClassOrInterface=function(e,t,r,n){var a=e.token==s.Token.INTERFACE;if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var c,l=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(s.Token.LESSTHAN)){if(!(c=this.parseTypeParameters(e)))return null;t|=i.CommonFlags.GENERIC}else c=[];var u=null;if(e.skip(s.Token.EXTENDS)){var h=this.parseType(e);if(!h)return null;if(h.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,h.range),null;u=h}var d=null;if(e.skip(s.Token.IMPLEMENTS)){a&&this.error(o.DiagnosticCode.Interface_declaration_cannot_have_implements_clause,e.range());do{var _=this.parseType(e);if(!_)return null;a||(d||(d=[]),d.push(_))}while(e.skip(s.Token.COMMA))}if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;var m,y=new Array;if(a?(assert(!d),m=p.Node.createInterfaceDeclaration(l,c,u,y,r,t,e.range(n,e.pos))):m=p.Node.createClassDeclaration(l,c,u,d,y,r,t,e.range(n,e.pos)),!e.skip(s.Token.CLOSEBRACE))do{var g=this.parseClassMember(e,m);if(!g)return null;g.parent=m,y.push(g)}while(!e.skip(s.Token.CLOSEBRACE));return m},t.prototype.parseClassExpression=function(e){var t,r=e.tokenPos;if(t=e.skipIdentifier()?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;var n=new Array,a=p.Node.createClassDeclaration(t,[],null,null,n,null,i.CommonFlags.NONE,e.range(r,e.pos));if(!e.skip(s.Token.CLOSEBRACE))do{var c=this.parseClassMember(e,a);if(!c)return null;c.parent=a,n.push(c)}while(!e.skip(s.Token.CLOSEBRACE));return p.Node.createClassExpression(a)},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=t.kind==p.NodeKind.INTERFACEDECLARATION,a=new Array;e.skip(s.Token.AT);){var c=this.parseDecorator(e);if(!c)break;n&&this.error(o.DiagnosticCode.Decorators_are_not_valid_here,c.range),a.push(c)}var l=t.flags&i.CommonFlags.AMBIENT;n&&(l|=i.CommonFlags.VIRTUAL),e.skip(s.Token.PUBLIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"public"),l|=i.CommonFlags.PUBLIC):e.skip(s.Token.PRIVATE)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"private"),l|=i.CommonFlags.PRIVATE):e.skip(s.Token.PROTECTED)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"protected"),l|=i.CommonFlags.PROTECTED);var u=0,h=0,d=0,_=0;e.skip(s.Token.STATIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"static"),l|=i.CommonFlags.STATIC,u=e.tokenPos,h=e.pos):(l|=i.CommonFlags.INSTANCE,e.skip(s.Token.ABSTRACT)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"abstract"),l|=i.CommonFlags.ABSTRACT,d=e.tokenPos,_=e.pos),t.flags&i.CommonFlags.GENERIC&&(l|=i.CommonFlags.GENERIC_CONTEXT));var m=0,y=0;e.skip(s.Token.READONLY)&&(l|=i.CommonFlags.READONLY,m=e.tokenPos,y=e.pos);var g=e.mark(),E=!1,T=!1,f=!1,I=0,v=0;if(n||(e.skip(s.Token.GET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(g):(l|=i.CommonFlags.GET,T=!0,I=e.tokenPos,v=e.pos,l&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly")):e.skip(s.Token.SET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(g):(l|=i.CommonFlags.SET|i.CommonFlags.SET,f=!0,I=e.tokenPos,v=e.pos,l&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly")):e.skip(s.Token.CONSTRUCTOR)&&(E=!0,(l|=i.CommonFlags.CONSTRUCTOR)&i.CommonFlags.STATIC&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(u,h),"static"),l&i.CommonFlags.ABSTRACT&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(d,_),"abstract"),l&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly"))),!E&&!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var A=E?p.Node.createConstructorExpression(e.range()):p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),C=null;if(e.skip(s.Token.LESSTHAN)){var N=e.tokenPos;if(!(C=this.parseTypeParameters(e)))return null;E?this.error(o.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range(N,e.pos)):T||f?this.error(o.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(N,e.pos)):l|=i.CommonFlags.GENERIC}if(e.skip(s.Token.OPENPAREN)){var O=e.tokenPos,S=this.parseParameters(e,E);if(!S)return null;var L=this.parseParametersThis;if(E)for(var b=0,k=S.length;b"),null):null;case s.Token.IDENTIFIER:return p.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case s.Token.THIS:return p.Node.createThisExpression(e.range(r,e.pos));case s.Token.CONSTRUCTOR:return p.Node.createConstructorExpression(e.range(r,e.pos));case s.Token.SUPER:return p.Node.createSuperExpression(e.range(r,e.pos));case s.Token.STRINGLITERAL:return p.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case s.Token.INTEGERLITERAL:return p.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case s.Token.FLOATLITERAL:return p.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case s.Token.SLASH:var T=e.readRegexpPattern();return e.skip(s.Token.SLASH)?p.Node.createRegexpLiteralExpression(T,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(o.DiagnosticCode._0_expected,e.range(),"/"),null);case s.Token.FUNCTION:return this.parseFunctionExpression(e);case s.Token.CLASS:return this.parseClassExpression(e);default:return this.error(o.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){var t=e.mark();if(!e.skip(s.Token.LESSTHAN))return null;var r=new Array;do{if(e.peek()===s.Token.GREATERTHAN)break;var n=this.parseType(e,!0,!0);if(!n)return e.reset(t),null;r.push(n)}while(e.skip(s.Token.COMMA));return e.skip(s.Token.GREATERTHAN)&&e.skip(s.Token.OPENPAREN)?r:(e.reset(t),null)},t.prototype.parseArguments=function(e){for(var t=new Array;!e.skip(s.Token.CLOSEPAREN);){var r=this.parseExpression(e,2);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return t},t.prototype.parseExpression=function(e,t){void 0===t&&(t=1),assert(0!=t);var r=this.parseExpressionStart(e);if(!r)return null;var n,i=r.range.start;if(p.nodeIsCallable(r.kind))for(var a=null;e.skip(s.Token.OPENPAREN)||p.nodeIsGenericCallable(r.kind)&&null!==(a=this.tryParseTypeArgumentsBeforeArguments(e));){var c=this.parseArguments(e);if(!c)return null;r=p.Node.createCallExpression(r,a,c,e.range(i,e.pos))}for(var l,u=null;(l=h(n=e.peek()))>=t;)switch(e.next(),n){case s.Token.AS:var _=this.parseType(e);if(!_)return null;r=p.Node.createAssertionExpression(p.AssertionKind.AS,r,_,e.range(i,e.pos));break;case s.Token.INSTANCEOF:var m=this.parseType(e);if(!m)return null;r=p.Node.createInstanceOfExpression(r,m,e.range(i,e.pos));break;case s.Token.OPENBRACKET:if(!(u=this.parseExpression(e)))return null;if(!e.skip(s.Token.CLOSEBRACKET))return this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;r=p.Node.createElementAccessExpression(r,u,e.range(i,e.pos));break;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:r.kind!=p.NodeKind.IDENTIFIER&&r.kind!=p.NodeKind.ELEMENTACCESS&&r.kind!=p.NodeKind.PROPERTYACCESS&&this.error(o.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,r.range),r=p.Node.createUnaryPostfixExpression(n,r,e.range(i,e.pos));break;case s.Token.QUESTION:var y=this.parseExpression(e);if(!y)return null;if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;var g=this.parseExpression(e,t>1?2:1);if(!g)return null;r=p.Node.createTernaryExpression(r,y,g,e.range(i,e.pos));break;case s.Token.COMMA:var E=[r];do{if(!(r=this.parseExpression(e,2)))return null;E.push(r)}while(e.skip(s.Token.COMMA));r=p.Node.createCommaExpression(E,e.range(i,e.pos));break;default:if(!(u=this.parseExpression(e,d(n)?l:l+1)))return null;if(n==s.Token.DOT)if(u.kind==p.NodeKind.IDENTIFIER)r=p.Node.createPropertyAccessExpression(r,u,e.range(i,e.pos));else{if(u.kind!=p.NodeKind.CALL)return this.error(o.DiagnosticCode.Identifier_expected,u.range),null;var T=u;if(T.expression.kind!=p.NodeKind.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,T.expression.range),null;T.expression=p.Node.createPropertyAccessExpression(r,T.expression,e.range(i,e.pos)),r=T}else r=p.Node.createBinaryExpression(n,r,u,e.range(i,e.pos))}return r},t.prototype.skipStatement=function(e){for(e.peek(!0),e.nextTokenOnNewLine&&e.next();;){var t=e.peek(!0);if(t==s.Token.ENDOFFILE||t==s.Token.SEMICOLON){e.next();break}if(e.nextTokenOnNewLine)break;switch(e.next()){case s.Token.IDENTIFIER:e.readIdentifier();break;case s.Token.STRINGLITERAL:e.readString();break;case s.Token.INTEGERLITERAL:e.readInteger();break;case s.Token.FLOATLITERAL:e.readFloat()}}},t.prototype.skipBlock=function(e){var t=1,r=!0;do{switch(e.next()){case s.Token.ENDOFFILE:this.error(o.DiagnosticCode._0_expected,e.range(),"}"),r=!1;break;case s.Token.OPENBRACE:++t;break;case s.Token.CLOSEBRACE:--t||(r=!1);break;case s.Token.IDENTIFIER:e.readIdentifier();break;case s.Token.STRINGLITERAL:e.readString();break;case s.Token.INTEGERLITERAL:e.readInteger();break;case s.Token.FLOATLITERAL:e.readFloat()}}while(r)},t}(o.DiagnosticEmitter);function h(e){switch(e){case s.Token.COMMA:return 1;case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:return 4;case s.Token.QUESTION:return 5;case s.Token.BAR_BAR:return 6;case s.Token.AMPERSAND_AMPERSAND:return 7;case s.Token.BAR:return 8;case s.Token.CARET:return 9;case s.Token.AMPERSAND:return 10;case s.Token.EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS:case s.Token.EQUALS_EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS_EQUALS:return 11;case s.Token.AS:case s.Token.IN:case s.Token.INSTANCEOF:case s.Token.LESSTHAN:case s.Token.GREATERTHAN:case s.Token.LESSTHAN_EQUALS:case s.Token.GREATERTHAN_EQUALS:return 12;case s.Token.LESSTHAN_LESSTHAN:case s.Token.GREATERTHAN_GREATERTHAN:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 13;case s.Token.PLUS:case s.Token.MINUS:return 14;case s.Token.ASTERISK:case s.Token.SLASH:case s.Token.PERCENT:return 15;case s.Token.ASTERISK_ASTERISK:return 16;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:return 18;case s.Token.DOT:case s.Token.NEW:case s.Token.OPENBRACKET:return 20}return 0}function d(e){switch(e){case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:case s.Token.QUESTION:case s.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=u,function(e){e[e.NONE=0]="NONE",e[e.COMMA=1]="COMMA",e[e.SPREAD=2]="SPREAD",e[e.YIELD=3]="YIELD",e[e.ASSIGNMENT=4]="ASSIGNMENT",e[e.CONDITIONAL=5]="CONDITIONAL",e[e.LOGICAL_OR=6]="LOGICAL_OR",e[e.LOGICAL_AND=7]="LOGICAL_AND",e[e.BITWISE_OR=8]="BITWISE_OR",e[e.BITWISE_XOR=9]="BITWISE_XOR",e[e.BITWISE_AND=10]="BITWISE_AND",e[e.EQUALITY=11]="EQUALITY",e[e.RELATIONAL=12]="RELATIONAL",e[e.SHIFT=13]="SHIFT",e[e.ADDITIVE=14]="ADDITIVE",e[e.MULTIPLICATIVE=15]="MULTIPLICATIVE",e[e.EXPONENTIATED=16]="EXPONENTIATED",e[e.UNARY_PREFIX=17]="UNARY_PREFIX",e[e.UNARY_POSTFIX=18]="UNARY_POSTFIX",e[e.CALL=19]="CALL",e[e.MEMBERACCESS=20]="MEMBERACCESS",e[e.GROUPING=21]="GROUPING"}(t.Precedence||(t.Precedence={}))},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return s};Object.defineProperty(t,"__esModule",{value:!0});var s=r(0),o=r(5),c=r(3),p=function(){function e(e,t){void 0===t&&(t=!1),this.todo=[],this.seen=new Set,this.program=e,this.includePrivate}return e.prototype.walk=function(){var e,t;try{for(var r=i(this.program.moduleLevelExports.values()),n=r.next();!n.done;n=r.next()){var a=n.value;this.visitElement(a)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}for(var s=this.todo;00&&this.push(", "),this.push("$"),this.push(i.toString(10)),this.push(": "),this.push(a(n.getFunctionParamType(e,i)));this.push("): "),this.push(a(n.getFunctionResultType(e))),this.push(" "),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("{\n"),this.decompileExpression(r),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("\n}\n"),++this.functionId},e.prototype.decompileExpression=function(e){var t,r,i,s,o=n.getExpressionId(e),c=n.getExpressionType(e);switch(o){case n.ExpressionId.Block:for(null!=(r=n.getBlockName(e))&&(this.push(r),this.push(": ")),this.push("{\n"),s=n.getBlockChildCount(e),i=0;i("),this.push(n.getLoadOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getLoadPtr(e)),void this.push(")");case n.ExpressionId.Store:return this.push("store<"),this.push(a(c)),this.push(">("),this.push(n.getStoreOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getStorePtr(e)),this.push(", "),this.decompileExpression(n.getStoreValue(e)),void this.push(")");case n.ExpressionId.Const:switch(c){case n.NativeType.I32:return void this.push(n.getConstValueI32(e).toString(10));case n.NativeType.I64:return void this.push(i64_to_string(i64_new(n.getConstValueI64Low(e),n.getConstValueI64High(e))));case n.NativeType.F32:return void this.push(n.getConstValueF32(e).toString(10));case n.NativeType.F64:return void this.push(n.getConstValueF64(e).toString(10))}break;case n.ExpressionId.Unary:switch(n.getUnaryOp(e)){case n.UnaryOp.ClzI32:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI32:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI32:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NegF32:case n.UnaryOp.NegF64:return this.push("-"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.AbsF32:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF32:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF32:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF32:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF32:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF32:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.EqzI32:case n.UnaryOp.EqzI64:return this.push("!"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ClzI64:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI64:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI64:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.AbsF64:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF64:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF64:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF64:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF64:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF64:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ExtendI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ExtendU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.WrapI64:case n.UnaryOp.TruncF32ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretF32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretF64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ConvertI32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.PromoteF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.DemoteF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretI32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretI64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")")}break;case n.ExpressionId.Binary:switch(n.getBinaryOp(e)){case n.BinaryOp.AddI32:case n.BinaryOp.AddI64:case n.BinaryOp.AddF32:case n.BinaryOp.AddF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" + "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.SubI32:case n.BinaryOp.SubI64:case n.BinaryOp.SubF32:case n.BinaryOp.SubF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" - "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.MulI32:case n.BinaryOp.MulI64:case n.BinaryOp.MulF32:case n.BinaryOp.MulF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" * "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivI32:case n.BinaryOp.DivI64:case n.BinaryOp.DivF32:case n.BinaryOp.DivF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RemI32:case n.BinaryOp.RemI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.AndI32:case n.BinaryOp.AndI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" & "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.OrI32:case n.BinaryOp.OrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" | "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.XorI32:case n.BinaryOp.XorI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" ^ "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShlI32:case n.BinaryOp.ShlI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" << "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrU32:case n.BinaryOp.ShrU64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >>> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrI32:case n.BinaryOp.ShrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI32:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI32:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.EqI32:case n.BinaryOp.EqI64:case n.BinaryOp.EqF32:case n.BinaryOp.EqF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" == "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.NeI32:case n.BinaryOp.NeI64:case n.BinaryOp.NeF32:case n.BinaryOp.NeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" != "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtI32:case n.BinaryOp.LtI64:case n.BinaryOp.LtF32:case n.BinaryOp.LtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeI32:case n.BinaryOp.LeI64:case n.BinaryOp.LeF32:case n.BinaryOp.LeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtI32:case n.BinaryOp.GtI64:case n.BinaryOp.GtF32:case n.BinaryOp.GtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeI32:case n.BinaryOp.GeI64:case n.BinaryOp.GeF32:case n.BinaryOp.GeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI64:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI64:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.LtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.CopysignF32:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF32:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF32:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.CopysignF64:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF64:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF64:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")")}return;case n.ExpressionId.Select:return this.push("select<"),this.push(a(c)),this.push(">("),this.decompileExpression(n.getSelectThen(e)),this.push(", "),this.decompileExpression(n.getSelectElse(e)),this.push(", "),this.decompileExpression(n.getSelectCondition(e)),void this.push(")");case n.ExpressionId.Drop:return this.decompileExpression(n.getDropValue(e)),void this.push(";\n");case n.ExpressionId.Return:return void((t=n.getReturnValue(e))?(this.push("return "),this.decompileExpression(t),this.push(";\n")):this.push("return;\n"));case n.ExpressionId.Host:switch(n.getHostOp(e)){case n.HostOp.CurrentMemory:return void this.push("current_memory()");case n.HostOp.GrowMemory:return this.push("grow_memory("),this.decompileExpression(n.getHostOperand(e,0)),void this.push(")")}break;case n.ExpressionId.Nop:return void this.push(";\n");case n.ExpressionId.Unreachable:return void this.push("unreachable()");case n.ExpressionId.AtomicCmpxchg:case n.ExpressionId.AtomicRMW:case n.ExpressionId.AtomicWait:case n.ExpressionId.AtomicWake:}throw new Error("not implemented")},e.prototype.push=function(e){this.text.push(e)},e.prototype.finish=function(){var e=this.text.join("");return this.text=[],e},e}();function a(e){switch(e){case n.NativeType.None:return"void";case n.NativeType.I32:return"i32";case n.NativeType.I64:return"i64";case n.NativeType.F32:return"f32";case n.NativeType.F64:return"f64";case n.NativeType.Unreachable:throw new Error("unreachable type");case n.NativeType.Auto:throw new Error("auto type");default:throw new Error("unexpected type")}}t.Decompiler=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(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>>=0)&&e<256)&&(n=s[e])?n:(r=p(e,(0|e)<0?-1:0,!0),i&&(s[e]=r),r):(i=-128<=(e|=0)&&e<128)&&(n=a[e])?n:(r=p(e,e<0?-1:0,!1),i&&(a[e]=r),r)}function c(e,t){if(isNaN(e))return t?E:g;if(t){if(e<0)return E;if(e>=_)return A}else{if(e<=-m)return C;if(e+1>=m)return v}return e<0?c(-e,t).neg():p(e%d|0,e/d|0,t)}function p(e,t,r){return new n(e,t,r)}n.fromInt=o,n.fromNumber=c,n.fromBits=p;var l=Math.pow;function u(e,t,r){if(0===e.length)throw Error("empty string");if("NaN"===e||"Infinity"===e||"+Infinity"===e||"-Infinity"===e)return g;if("number"==typeof t?(r=t,t=!1):t=!!t,(r=r||10)<2||360)throw Error("interior hyphen");if(0===n)return u(e.substring(1),t,r).neg();for(var i=c(l(r,8)),a=g,s=0;s>>0:this.low},N.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},N.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((a=o).isZero())return p+s;for(;p.length<6;)p="0"+p;s=""+p+s}},N.getHighBits=function(){return this.high},N.getHighBitsUnsigned=function(){return this.high>>>0},N.getLowBits=function(){return this.low},N.getLowBitsUnsigned=function(){return this.low>>>0},N.getNumBitsAbs=function(){if(this.isNegative())return this.eq(C)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&0==(e&1<=0},N.isOdd=function(){return 1==(1&this.low)},N.isEven=function(){return 0==(1&this.low)},N.equals=function(e){return i(e)||(e=h(e)),(this.unsigned===e.unsigned||this.high>>>31!=1||e.high>>>31!=1)&&(this.high===e.high&&this.low===e.low)},N.eq=N.equals,N.notEquals=function(e){return!this.eq(e)},N.neq=N.notEquals,N.ne=N.notEquals,N.lessThan=function(e){return this.comp(e)<0},N.lt=N.lessThan,N.lessThanOrEqual=function(e){return this.comp(e)<=0},N.lte=N.lessThanOrEqual,N.le=N.lessThanOrEqual,N.greaterThan=function(e){return this.comp(e)>0},N.gt=N.greaterThan,N.greaterThanOrEqual=function(e){return this.comp(e)>=0},N.gte=N.greaterThanOrEqual,N.ge=N.greaterThanOrEqual,N.compare=function(e){if(i(e)||(e=h(e)),this.eq(e))return 0;var t=this.isNegative(),r=e.isNegative();return t&&!r?-1:!t&&r?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1},N.comp=N.compare,N.negate=function(){return!this.unsigned&&this.eq(C)?C:this.not().add(T)},N.neg=N.negate,N.add=function(e){i(e)||(e=h(e));var t=this.high>>>16,r=65535&this.high,n=this.low>>>16,a=65535&this.low,s=e.high>>>16,o=65535&e.high,c=e.low>>>16,l=0,u=0,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,u+=(d+=n+c)>>>16,l+=(u+=r+o)>>>16,l+=t+s,p((d&=65535)<<16|(_&=65535),(l&=65535)<<16|(u&=65535),this.unsigned)},N.subtract=function(e){return i(e)||(e=h(e)),this.add(e.neg())},N.sub=N.subtract,N.multiply=function(e){if(this.isZero())return g;if(i(e)||(e=h(e)),r)return p(r.mul(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned);if(e.isZero())return g;if(this.eq(C))return e.isOdd()?C:g;if(e.eq(C))return this.isOdd()?C:g;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(y)&&e.lt(y))return c(this.toNumber()*e.toNumber(),this.unsigned);var t=this.high>>>16,n=65535&this.high,a=this.low>>>16,s=65535&this.low,o=e.high>>>16,l=65535&e.high,u=e.low>>>16,d=65535&e.low,_=0,m=0,E=0,T=0;return E+=(T+=s*d)>>>16,m+=(E+=a*d)>>>16,E&=65535,m+=(E+=s*u)>>>16,_+=(m+=n*d)>>>16,m&=65535,_+=(m+=a*u)>>>16,m&=65535,_+=(m+=s*l)>>>16,_+=t*d+n*u+a*l+s*o,p((E&=65535)<<16|(T&=65535),(_&=65535)<<16|(m&=65535),this.unsigned)},N.mul=N.multiply,N.divide=function(e){if(i(e)||(e=h(e)),e.isZero())throw Error("division by zero");var t,n,a;if(r)return this.unsigned||-2147483648!==this.high||-1!==e.low||-1!==e.high?p((this.unsigned?r.div_u:r.div_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?E:g;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return E;if(e.gt(this.shru(1)))return f;a=E}else{if(this.eq(C))return e.eq(T)||e.eq(I)?C:e.eq(C)?T:(t=this.shr(1).div(e).shl(1)).eq(g)?e.isNegative()?T:I:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(C))return this.unsigned?E:g;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();a=g}for(n=this;n.gte(e);){t=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var s=Math.ceil(Math.log(t)/Math.LN2),o=s<=48?1:l(2,s-48),u=c(t),d=u.mul(e);d.isNegative()||d.gt(n);)d=(u=c(t-=o,this.unsigned)).mul(e);u.isZero()&&(u=T),a=a.add(u),n=n.sub(d)}return a},N.div=N.divide,N.modulo=function(e){return i(e)||(e=h(e)),r?p((this.unsigned?r.rem_u:r.rem_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this.sub(this.div(e).mul(e))},N.mod=N.modulo,N.rem=N.modulo,N.not=function(){return p(~this.low,~this.high,this.unsigned)},N.and=function(e){return i(e)||(e=h(e)),p(this.low&e.low,this.high&e.high,this.unsigned)},N.or=function(e){return i(e)||(e=h(e)),p(this.low|e.low,this.high|e.high,this.unsigned)},N.xor=function(e){return i(e)||(e=h(e)),p(this.low^e.low,this.high^e.high,this.unsigned)},N.shiftLeft=function(e){return i(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?p(this.low<>>32-e,this.unsigned):p(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):p(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},N.shr=N.shiftRight,N.shiftRightUnsigned=function(e){if(i(e)&&(e=e.toInt()),0===(e&=63))return this;var t=this.high;return e<32?p(this.low>>>e|t<<32-e,t>>>e,this.unsigned):p(32===e?t:t>>>e-32,0,this.unsigned)},N.shru=N.shiftRightUnsigned,N.shr_u=N.shiftRightUnsigned,N.toSigned=function(){return this.unsigned?p(this.low,this.high,!1):this},N.toUnsigned=function(){return this.unsigned?this:p(this.low,this.high,!0)},N.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},N.toBytesLE=function(){var e=this.high,t=this.low;return[255&t,t>>>8&255,t>>>16&255,t>>>24,255&e,e>>>8&255,e>>>16&255,e>>>24]},N.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,255&e,t>>>24,t>>>16&255,t>>>8&255,255&t]},n.fromBytes=function(e,t,r){return r?n.fromBytesLE(e,t):n.fromBytesBE(e,t)},n.fromBytesLE=function(e,t){return new n(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)},n.fromBytesBE=function(e,t){return new n(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}},function(e,t,r){(function(e){const t=e.Long||r(16);e.i64_zero=t.ZERO,e.i64_one=t.ONE,e.i64_new=function(e,r){return t.fromBits(e,r)},e.i64_low=function(e){return e.low},e.i64_high=function(e){return e.high},e.i64_add=function(e,t){return e.add(t)},e.i64_sub=function(e,t){return e.sub(t)},e.i64_mul=function(e,t){return e.mul(t)},e.i64_div=function(e,t){return e.div(t)},e.i64_div_u=function(e,t){return e.toUnsigned().div(t.toUnsigned()).toSigned()},e.i64_rem=function(e,t){return e.mod(t)},e.i64_rem_u=function(e,t){return e.toUnsigned().mod(t.toUnsigned()).toSigned()},e.i64_and=function(e,t){return e.and(t)},e.i64_or=function(e,t){return e.or(t)},e.i64_xor=function(e,t){return e.xor(t)},e.i64_shl=function(e,t){return e.shl(t)},e.i64_shr=function(e,t){return e.shr(t)},e.i64_shr_u=function(e,t){return e.shru(t)},e.i64_not=function(e){return e.not()},e.i64_eq=function(e,t){return e.eq(t)},e.i64_ne=function(e,t){return e.ne(t)},e.i64_align=function(e,r){assert(r&&0==(r&r-1));var n=t.fromInt(r-1);return e.add(n).and(n.not())},e.i64_is_i8=function(e){return 0===e.high&&e.low>=0&&e.low<=i8.MAX_VALUE||-1===e.high&&e.low>=i8.MIN_VALUE&&e.low<0},e.i64_is_i16=function(e){return 0===e.high&&e.low>=0&&e.low<=i16.MAX_VALUE||-1===e.high&&e.low>=i16.MIN_VALUE&&e.low<0},e.i64_is_i32=function(e){return 0===e.high&&e.low>=0||-1===e.high&&e.low<0},e.i64_is_u8=function(e){return 0===e.high&&e.low>=0&&e.low<=u8.MAX_VALUE},e.i64_is_u16=function(e){return 0===e.high&&e.low>=0&&e.low<=u16.MAX_VALUE},e.i64_is_u32=function(e){return 0===e.high},e.i64_is_bool=function(e){return 0===e.high&&(0===e.low||1===e.low)};const n=t.fromNumber(f32.MIN_SAFE_INTEGER),i=t.fromNumber(f32.MAX_SAFE_INTEGER);e.i64_is_f32=function(e){return e.gte(n)&&e.lte(i)};const a=t.fromNumber(f64.MIN_SAFE_INTEGER),s=t.fromNumber(f64.MAX_SAFE_INTEGER);e.i64_is_f64=function(e){return e.gte(a)&&e.lte(s)},e.i64_to_f32=function(t){return e.Math.fround(t.toNumber())},e.i64_to_f64=function(e){return e.toNumber()},e.i64_to_string=function(e,t){return(t?e.toUnsigned():e).toString(10)}}).call(this,r(7))},function(e,t,r){(function(e){const t=new Float64Array(1),r=new Float32Array(t.buffer),n=new Int32Array(t.buffer);e.f32_as_i32=function(e){return r[0]=e,n[0]},e.i32_as_f32=function(e){return n[0]=e,r[0]},e.f64_as_i64=function(e){return t[0]=e,i64_new(n[0],n[1])},e.i64_as_f64=function(e){return n[0]=i64_low(e),n[1]=i64_high(e),t[0]}}).call(this,r(7))},function(e,t,r){"use strict";function n(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24}function i(e,t,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function a(e,t){var r=n(e,t),i=n(e,t+4);return i64_new(r,i)}Object.defineProperty(t,"__esModule",{value:!0}),t.readI32=n,t.writeI32=i,t.readI64=a,t.writeI64=function(e,t,r){i(i64_low(e),t,r),i(i64_high(e),t,r+4)},t.readF32=function(e,t){return i32_as_f32(n(e,t))},t.writeF32=function(e,t,r){i(f32_as_i32(e),t,r)},t.readF64=function(e,t){return i64_as_f64(a(e,t))},t.writeF64=function(e,t,r){var n=f64_as_i64(e);i(i64_low(n),t,r),i(i64_high(n),t,r+4)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=" ",i=" ",a=" ";t.indent=function(e,t){for(;t>=4;)e.push(a),t-=4;t>=2&&(e.push(i),t-=2),t&&e.push(n)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=47;function i(e){for(var t,r=0,i=e.length;r+10||i=0;)if(e.charCodeAt(a)==n){r-a==3&&46==e.charCodeAt(a+1)&&46==e.charCodeAt(a+2)||(e=t?e.substring(0,a):e.substring(0,a)+e.substring(r+3),i-=r+3-a,r=a-1);break}if(a<0&&r>0&&(2!=r||46!=e.charCodeAt(0)||46!=e.charCodeAt(1))){i=(e=e.substring(r+4)).length;continue}}}r++}return i>0?e:"."}function a(e){for(var t=e.length;--t>0;)if(e.charCodeAt(t)==n)return e.substring(0,t);return"."}t.normalizePath=i,t.resolvePath=function(e,t){return e.startsWith("std/")?e:i(a(t)+String.fromCharCode(n)+e)},t.dirname=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NULL=0]="NULL",e[e.LINEFEED=10]="LINEFEED",e[e.CARRIAGERETURN=13]="CARRIAGERETURN",e[e.LINESEPARATOR=8232]="LINESEPARATOR",e[e.PARAGRAPHSEPARATOR=8233]="PARAGRAPHSEPARATOR",e[e.NEXTLINE=133]="NEXTLINE",e[e.SPACE=32]="SPACE",e[e.NONBREAKINGSPACE=160]="NONBREAKINGSPACE",e[e.ENQUAD=8192]="ENQUAD",e[e.EMQUAD=8193]="EMQUAD",e[e.ENSPACE=8194]="ENSPACE",e[e.EMSPACE=8195]="EMSPACE",e[e.THREEPEREMSPACE=8196]="THREEPEREMSPACE",e[e.FOURPEREMSPACE=8197]="FOURPEREMSPACE",e[e.SIXPEREMSPACE=8198]="SIXPEREMSPACE",e[e.FIGURESPACE=8199]="FIGURESPACE",e[e.PUNCTUATIONSPACE=8200]="PUNCTUATIONSPACE",e[e.THINSPACE=8201]="THINSPACE",e[e.HAIRSPACE=8202]="HAIRSPACE",e[e.ZEROWIDTHSPACE=8203]="ZEROWIDTHSPACE",e[e.NARROWNOBREAKSPACE=8239]="NARROWNOBREAKSPACE",e[e.IDEOGRAPHICSPACE=12288]="IDEOGRAPHICSPACE",e[e.MATHEMATICALSPACE=8287]="MATHEMATICALSPACE",e[e.OGHAM=5760]="OGHAM",e[e._=95]="_",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.AMPERSAND=38]="AMPERSAND",e[e.ASTERISK=42]="ASTERISK",e[e.AT=64]="AT",e[e.BACKSLASH=92]="BACKSLASH",e[e.BACKTICK=96]="BACKTICK",e[e.BAR=124]="BAR",e[e.CARET=94]="CARET",e[e.CLOSEBRACE=125]="CLOSEBRACE",e[e.CLOSEBRACKET=93]="CLOSEBRACKET",e[e.CLOSEPAREN=41]="CLOSEPAREN",e[e.COLON=58]="COLON",e[e.COMMA=44]="COMMA",e[e.DOLLAR=36]="DOLLAR",e[e.DOT=46]="DOT",e[e.DOUBLEQUOTE=34]="DOUBLEQUOTE",e[e.EQUALS=61]="EQUALS",e[e.EXCLAMATION=33]="EXCLAMATION",e[e.GREATERTHAN=62]="GREATERTHAN",e[e.HASH=35]="HASH",e[e.LESSTHAN=60]="LESSTHAN",e[e.MINUS=45]="MINUS",e[e.OPENBRACE=123]="OPENBRACE",e[e.OPENBRACKET=91]="OPENBRACKET",e[e.OPENPAREN=40]="OPENPAREN",e[e.PERCENT=37]="PERCENT",e[e.PLUS=43]="PLUS",e[e.QUESTION=63]="QUESTION",e[e.SEMICOLON=59]="SEMICOLON",e[e.SINGLEQUOTE=39]="SINGLEQUOTE",e[e.SLASH=47]="SLASH",e[e.TILDE=126]="TILDE",e[e.BACKSPACE=8]="BACKSPACE",e[e.FORMFEED=12]="FORMFEED",e[e.BYTEORDERMARK=65279]="BYTEORDERMARK",e[e.TAB=9]="TAB",e[e.VERTICALTAB=11]="VERTICALTAB"}(t.CharCode||(t.CharCode={})),t.isLineBreak=function(e){switch(e){case 10:case 13:case 8232:case 8233:return!0;default:return!1}},t.isWhiteSpace=function(e){switch(e){case 32:case 9:case 11:case 12:case 160:case 133:case 5760:case 8239:case 8287:case 12288:case 65279:return!0;default:return e>=8192&&e<=8203}},t.isDecimalDigit=function(e){return e>=48&&e<=57},t.isOctalDigit=function(e){return e>=48&&e<=55},t.isIdentifierStart=function(e){return e>=65&&e<=90||e>=97&&e<=122||36==e||95==e||e>127&&function(e){return!(e<0||e>65535)&&a(e,n)}(e)},t.isKeywordCharacter=function(e){return e>=97&&e<=122},t.isIdentifierPart=function(e){return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||36==e||95==e||e>127&&function(e){return!(e<0||e>65535)&&a(e,i)}(e)};var n=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1319,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2208,2208,2210,2220,2308,2361,2365,2365,2384,2384,2392,2401,2417,2423,2425,2431,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3133,3160,3161,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3424,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6176,6263,6272,6312,6314,6314,6320,6389,6400,6428,6480,6509,6512,6516,6528,6571,6593,6599,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7401,7404,7406,7409,7413,7414,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11823,11823,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42647,42656,42735,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43648,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44002,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],i=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1155,1159,1162,1319,1329,1366,1369,1369,1377,1415,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1520,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2048,2093,2112,2139,2208,2208,2210,2220,2276,2302,2304,2403,2406,2415,2417,2423,2425,2431,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024,3031,3031,3046,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3161,3168,3171,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311,3313,3314,3330,3331,3333,3340,3342,3344,3346,3386,3389,3396,3398,3400,3402,3406,3415,3415,3424,3427,3430,3439,3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4957,4959,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5908,5920,5940,5952,5971,5984,5996,5998,6e3,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6263,6272,6314,6320,6389,6400,6428,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6617,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7376,7378,7380,7414,7424,7654,7676,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8204,8205,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775,11823,11823,12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12442,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42647,42655,42737,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43047,43072,43123,43136,43204,43216,43225,43232,43255,43259,43259,43264,43309,43312,43347,43360,43388,43392,43456,43471,43481,43520,43574,43584,43597,43600,43609,43616,43638,43642,43643,43648,43714,43739,43741,43744,43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65062,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500];function a(e,t){if(e2?(r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),p.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,_.range,"1",p.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"2",p.length.toString(10)),f.createUnreachable()):r&&1==r.length?(y=e.compileExpression(p[0],e.options.usizeType,1,0),(x=2==p.length?h(e,p[1]):0)<0?f.createUnreachable():(e.currentType=r[0],f.createLoad(r[0].byteSize,r[0].is(5),y,r[0].is(4)&&d.is(4)&&d.size>r[0].size?(e.currentType=d).toNativeType():(e.currentType=r[0]).toNativeType(),x))):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),f.createUnreachable());case"store":if(e.currentType=a.Type.void,p.length<2||p.length>3)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),p.length<2?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,_.range,"2",p.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"3",p.length.toString(10)),f.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),f.createUnreachable();y=e.compileExpression(p[0],e.options.usizeType,1,0),g=e.compileExpression(p[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(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",p.length.toString(10)),f.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),f.createUnreachable();var R;if(!(R=r[0].classReference))return e.error(n.DiagnosticCode.Operation_not_supported,_.range),f.createUnreachable();var x=void 0;if(p.length){if(p[0].kind!=i.NodeKind.LITERAL||p[0].literalKind!=i.LiteralKind.STRING)return e.error(n.DiagnosticCode.String_literal_expected,p[0].range),f.createUnreachable();var F=p[0].value,D=R.members?R.members.get(F):null;if(!D||D.kind!=o.ElementKind.FIELD)return e.error(n.DiagnosticCode.Type_0_has_no_property_1,p[0].range,R.internalName,F),f.createUnreachable();x=D.memoryOffset}else x=R.currentMemoryOffset;return e.options.isWasm64?d.is(4)&&d.size<=32?(e.currentType=a.Type.u32,f.createI32(x)):f.createI64(x):d.is(4)&&64==d.size?(e.currentType=a.Type.u64,f.createI64(x)):f.createI32(x);case"select":if(3!=p.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"3",p.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(p[0],r[0],1,0)}else y=e.compileExpressionRetainType(p[0],a.Type.i32,0);I=e.currentType;switch(g=e.compileExpression(p[1],I,1,0),E=e.makeIsTrueish(e.compileExpressionRetainType(p[2],a.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(n.DiagnosticCode.Operation_not_supported,_.range),T=f.createUnreachable()}return T;case"unreachable":return 0!=p.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"0",p.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),f.createUnreachable();case"current_memory":return e.currentType=a.Type.i32,0!=p.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"0",p.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),f.createHost(s.HostOp.CurrentMemory);case"grow_memory":return e.currentType=a.Type.i32,1!=p.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"0",p.length.toString(10)),y=f.createUnreachable()):y=e.compileExpression(p[0],a.Type.i32,1,0),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),f.createHost(s.HostOp.GrowMemory,null,[y]);case"move_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),3!=p.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"3",p.length.toString(10)),e.currentType=a.Type.void,f.createUnreachable();throw y=e.compileExpression(p[0],e.options.usizeType,1,0),g=e.compileExpression(p[1],e.options.usizeType,1,0),E=e.compileExpression(p[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"set_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),3!=p.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"3",p.length.toString(10)),e.currentType=a.Type.void,f.createUnreachable();throw y=e.compileExpression(p[0],e.options.usizeType,1,0),g=e.compileExpression(p[1],a.Type.u32,1,0),E=e.compileExpression(p[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?1!=p.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",p.length.toString(10)),e.currentType=r[0],f.createUnreachable()):(y=e.compileExpressionRetainType(p[0],r[0],0),e.currentType=r[0],e.currentType.size!=r[0].size?(e.error(n.DiagnosticCode.Operation_not_supported,_.range),f.createUnreachable()):y):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),f.createUnreachable());case"assert":if(p.length<1||p.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r.length.toString(10))),p.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,_.range,"1",p.length.toString(10)):p.length>2&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"2",p.length.toString(10)),f.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(p[0],r[0],1,1)}else y=e.compileExpressionRetainType(p[0],a.Type.bool,1);I=e.currentType;if(e.currentType=I.nonNullableType,e.options.noAssert)return d==a.Type.void?(e.currentType=a.Type.void,f.createNop()):y;var B=m(e,2==p.length?p[1]:null,_);if(e.currentType=I.nonNullableType,d==a.Type.void){switch(e.currentType.kind){default:T=f.createIf(f.createUnary(s.UnaryOp.EqzI32,y),B);break;case 3:case 8:T=f.createIf(f.createUnary(s.UnaryOp.EqzI64,y),B);break;case 4:case 9:T=f.createIf(f.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,y),B);break;case 11:T=f.createIf(f.createBinary(s.BinaryOp.EqF32,y,f.createF32(0)),B);break;case 12:T=f.createIf(f.createBinary(s.BinaryOp.EqF64,y,f.createF64(0)),B);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,_.range),T=B}e.currentType=a.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,s.NativeType.I32),B);break;case 2:case 7:default:N=e.currentFunction.getAndFreeTempLocal(a.Type.i32,!1);T=f.createIf(f.createTeeLocal(N.index,y),f.createGetLocal(N.index,s.NativeType.I32),B);break;case 3:case 8:N=e.currentFunction.getAndFreeTempLocal(a.Type.i64,!1);T=f.createIf(f.createUnary(s.UnaryOp.EqzI64,f.createTeeLocal(N.index,y)),B,f.createGetLocal(N.index,s.NativeType.I64));break;case 4:case 9:N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);T=f.createIf(f.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,f.createTeeLocal(N.index,y)),B,f.createGetLocal(N.index,e.options.nativeSizeType));break;case 11:N=e.currentFunction.getAndFreeTempLocal(a.Type.f32,!1);T=f.createIf(f.createBinary(s.BinaryOp.EqF32,f.createTeeLocal(N.index,y),f.createF32(0)),B,f.createGetLocal(N.index,s.NativeType.F32));break;case 12:N=e.currentFunction.getAndFreeTempLocal(a.Type.f64,!1);T=f.createIf(f.createBinary(s.BinaryOp.EqF64,f.createTeeLocal(N.index,y),f.createF64(0)),B,f.createGetLocal(N.index,s.NativeType.F64));break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,_.range),T=B}return T;case"unchecked":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=p.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",p.length.toString(10)),f.createUnreachable()):((O=e.currentFunction.flow).set(4096),T=e.compileExpressionRetainType(p[0],d,0),O.unset(4096),T);case"call_indirect":if(p.length<1)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,_.range,"1",p.length.toString(10)),f.createUnreachable();var U=void 0;if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r.length.toString(10)),f.createUnreachable();U=r[0]}else U=d;if(y=e.compileExpressionRetainType(p[0],a.Type.u32,0),7!=e.currentType.kind)return e.error(n.DiagnosticCode.Operation_not_supported,p[0].range),f.createUnreachable();for(var P=p.length-1,w=new Array(P),M=new Array(P+1),G=U.toNativeType(),K=new Array(P),z=0;z1&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,i.range,"1",t.length.toString(10)),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"1",r.length.toString(10)),null}function h(e,t){var r,i;return e.options.isWasm64?(r=e.precomputeExpression(t,a.Type.usize64,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I64||0!=s.getConstValueI64High(r)||(i=s.getConstValueI64Low(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)):(r=e.precomputeExpression(t,a.Type.usize32,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I32||(i=s.getConstValueI32(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)),i}t.compileCall=p;var d="allocate_memory";t.compileAllocate=function(e,t,r){var i=e.program;assert(t.program==i);var a=e.module,s=e.options,c=i.elementsLookup.get(d);if(!c)return i.error(n.DiagnosticCode.Cannot_find_name_0,r.range,d),i.info(n.DiagnosticCode.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf,r.range),a.createUnreachable();if(c.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.error(n.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,c.internalName),a.createUnreachable();var p=e.resolver.resolveFunction(c,null);return p&&e.compileFunction(p)?(e.currentType=t.type,a.createCall(p.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],s.nativeSizeType)):a.createUnreachable()};var _="abort";function m(e,t,r){var n=e.program,i=e.module,c=n.typesLookup.get("string");if(!c)return i.createUnreachable();var p=n.elementsLookup.get(_);if(!p||p.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.createUnreachable();var l=e.resolver.resolveFunction(p,null);if(!l||!e.compileFunction(l))return i.createUnreachable();var u=null!=t?e.compileExpression(t,c,1,0):c.toNativeZero(i),h=e.compileStaticString(r.range.source.normalizedPath);return e.currentType=a.Type.void,i.createBlock(null,[i.createCallImport(l.internalName,[u,h,i.createI32(r.range.line),i.createI32(r.range.column)],s.NativeType.None),i.createUnreachable()])}t.compileAbort=m},function(t,r){t.exports=e},function(e,t,r){(function(e){const t=e.Binaryen||r(24);for(var n in t)(n.startsWith("_Binaryen")||n.startsWith("_Relooper"))&&(e[n]=t[n]);e.allocate_memory=function(e){return e?t._malloc(e):0},e.free_memory=function(e){e&&t._free(e)},e.move_memory=function(e,r,n){return t._memmove(e,r,n)},e.store=function(e,r){t.HEAPU8[e]=r},e.load=function(e){return t.HEAPU8[e]};const i=r(4).Module;i.prototype.toText=function(){return new t.Module(this.ref).emitText()},i.prototype.toAsmjs=function(){return new t.Module(this.ref).emitAsmjs()}}).call(this,r(7))},function(e,t){e.exports=(e=>{var t=new Uint8Array(0),r=0;e.allocate_memory=function(e){if(!(e>>>=0))return 0;if(r+e>t.length){var n=t;(t=new Uint8Array(Math.max(65536,t.length+e,2*t.length))).set(n)}var i=r;return 7&(r+=e)&&(r=1+(7|r)),i},e.free_memory=function(e){},e.move_memory=function(e,r,n){t.copyWithin(e,r,r+n)},e.store=function(e,r,n){t[e+(0|n)]=r},e.load=function(e,r){return t[e+(0|r)]}})},function(e,t,r){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self;function n(){Error.captureStackTrace?Error.captureStackTrace(this,n):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function i(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,i):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}t.ASC_TARGET=0,Object.defineProperties(t.i8=function(e){return e<<24>>24},{MIN_VALUE:{value:-128,writable:!1},MAX_VALUE:{value:127,writable:!1}}),Object.defineProperties(t.i16=function(e){return e<<16>>16},{MIN_VALUE:{value:-32768,writable:!1},MAX_VALUE:{value:32767,writable:!1}}),Object.defineProperties(t.i32=t.isize=function(e){return 0|e},{MIN_VALUE:{value:-2147483648,writable:!1},MAX_VALUE:{value:2147483647,writable:!1}}),Object.defineProperties(t.u8=function(e){return 255&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:255,writable:!1}}),Object.defineProperties(t.u16=function(e){return 65535&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:65535,writable:!1}}),Object.defineProperties(t.u32=t.usize=function(e){return e>>>0},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:4294967295,writable:!1}}),Object.defineProperties(t.bool=function(e){return!!e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:1,writable:!1}}),Object.defineProperties(t.f32=function(e){return Math.fround(e)},{MIN_VALUE:{value:Math.fround(-3.40282347e38),writable:!1},MAX_VALUE:{value:Math.fround(3.40282347e38),writable:!1},MIN_POSITIVE_VALUE:{value:Math.fround(1.175494351e-38),writable:!1},MIN_SAFE_INTEGER:{value:-16777215,writable:!1},MAX_SAFE_INTEGER:{value:16777215,writable:!1},EPSILON:{value:Math.fround(1.1920929e-7),writable:!1}}),Object.defineProperties(t.f64=function(e){return+e},{MIN_VALUE:{value:-1.7976931348623157e308,writable:!1},MAX_VALUE:{value:1.7976931348623157e308,writable:!1},MIN_POSITIVE_VALUE:{value:2.2250738585072014e-308,writable:!1},MIN_SAFE_INTEGER:{value:-9007199254740991,writable:!1},MAX_SAFE_INTEGER:{value:9007199254740991,writable:!1},EPSILON:{value:2.220446049250313e-16,writable:!1}}),t.clz=Math.clz32,t.ctz=function(e){var t=Math.clz32(e&-e);return e?31-t:t},t.popcnt=function(e){return 16843009*((e=(858993459&(e-=e>>>1&1431655765))+(e>>>2&858993459))+(e>>>4)&252645135)>>>24},t.rotl=function(e,t){return e<<(t&=31)|e>>>32-t},t.rotr=function(e,t){return e>>>(t&=31)|e<<32-t},t.abs=Math.abs,t.max=Math.max,t.min=Math.min,t.ceil=Math.ceil,t.floor=Math.floor,t.nearest=function(e){return.5===Math.abs(e-Math.trunc(e))?2*Math.round(.5*e):Math.round(e)},t.select=function(e,t,r){return r?e:t},t.sqrt=Math.sqrt,t.trunc=Math.trunc,t.copysign=function(e,t){return Math.abs(e)*Math.sign(t)},t.bswap=function(e){var t=e>>8&16711935,r=(16711935&e)<<8;return(t=(e=t|r)>>16&65535)|(r=(65535&e)<<16)},t.bswap16=function(e){return e<<8&65280|e>>8&255|4294901760&e},n.prototype=Object.create(Error.prototype),n.prototype.name="UnreachableError",n.prototype.message="unreachable",t.unreachable=function(){throw new n},i.prototype=Object.create(Error.prototype),i.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new i(t)},t.changetype=function(e){return e},t.parseI32=function(e,t){return 0|parseInt(e,void 0)},String.fromCharCodes=function(e){return String.fromCharCode.apply(String,e)},String.fromCodePoints=function(e){return String.fromCodePoint.apply(String,e)},t.isInteger=Number.isInteger,t.isFloat=function(e){return"number"==typeof e},t.isReference=function(e){return"object"==typeof e||"string"==typeof e},t.isString=function(e){return"string"==typeof e||e instanceof String},t.isArray=Array.isArray,t.unchecked=function(e){return e},t.fmod=function(e,t){return e%t},t.fmodf=function(e,t){return Math.fround(e%t)},t.JSMath=Math,r(26)(t)}).call(this,r(7))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(27),r(25),r(18),r(17)},function(e,t,r){r(28),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=29)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NONE=0]="NONE",e[e.IMPORT=1]="IMPORT",e[e.EXPORT=2]="EXPORT",e[e.DECLARE=4]="DECLARE",e[e.CONST=8]="CONST",e[e.LET=16]="LET",e[e.STATIC=32]="STATIC",e[e.READONLY=64]="READONLY",e[e.ABSTRACT=128]="ABSTRACT",e[e.PUBLIC=256]="PUBLIC",e[e.PRIVATE=512]="PRIVATE",e[e.PROTECTED=1024]="PROTECTED",e[e.GET=2048]="GET",e[e.SET=4096]="SET",e[e.AMBIENT=8192]="AMBIENT",e[e.GENERIC=16384]="GENERIC",e[e.GENERIC_CONTEXT=32768]="GENERIC_CONTEXT",e[e.INSTANCE=65536]="INSTANCE",e[e.CONSTRUCTOR=131072]="CONSTRUCTOR",e[e.ARROW=262144]="ARROW",e[e.MODULE_EXPORT=524288]="MODULE_EXPORT",e[e.MODULE_IMPORT=1048576]="MODULE_IMPORT",e[e.BUILTIN=2097152]="BUILTIN",e[e.COMPILED=4194304]="COMPILED",e[e.INLINED=8388608]="INLINED",e[e.SCOPED=16777216]="SCOPED",e[e.TRAMPOLINE=33554432]="TRAMPOLINE",e[e.VIRTUAL=67108864]="VIRTUAL",e[e.MAIN=134217728]="MAIN",e[e.QUOTED=268435456]="QUOTED"}(t.CommonFlags||(t.CommonFlags={})),t.PATH_DELIMITER="/",t.PARENT_SUBST="..",t.GETTER_PREFIX="get:",t.SETTER_PREFIX="set:",t.INSTANCE_DELIMITER="#",t.STATIC_DELIMITER=".",t.INNER_DELIMITER="~",t.LIBRARY_SUBST="~lib",t.LIBRARY_PREFIX=t.LIBRARY_SUBST+t.PATH_DELIMITER,t.FILESPACE_PREFIX="file:"},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(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 p=function(){function e(e,t,r){this.range=null,this.code=e,this.category=t,this.message=r}return e.create=function(t,r,n,a,s){void 0===n&&(n=null),void 0===a&&(a=null),void 0===s&&(s=null);var o=i.diagnosticCodeToString(t);return null!=n&&(o=o.replace("{0}",n)),null!=a&&(o=o.replace("{1}",a)),null!=s&&(o=o.replace("{2}",s)),new e(t,r,o)},e.createInfo=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.INFO,r,i)},e.createWarning=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.WARNING,r,i)},e.createError=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.ERROR,r,i)},e.prototype.withRange=function(e){return this.range=e,this},e.prototype.toString=function(){return this.range?o(this.category)+" "+this.code.toString(10)+': "'+this.message+'" in '+this.range.source.normalizedPath+":"+this.range.line.toString(10)+":"+this.range.column.toString(10):o(this.category)+" "+this.code.toString(10)+": "+this.message},e}();function l(e,r){void 0===r&&(r=!1);for(var n=e.source.text,i=n.length,s=e.start,o=e.end;s>0&&!a.isLineBreak(n.charCodeAt(s-1));)s--;for(;o=0?c.substring(p+1):c,o.statements=new Array,o.range=new a.Range(o,0,r.length),o.text=r,o}return n(t,e),Object.defineProperty(t.prototype,"isEntry",{get:function(){return this.sourceKind==q.ENTRY},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLibrary",{get:function(){return this.sourceKind==q.LIBRARY},enumerable:!0,configurable:!0}),t}(c);t.Source=Z;var J=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.decorators=null,t.cachedProgramLevelInternalName=null,t.cachedFileLevelInternalName=null,t}return n(t,e),Object.defineProperty(t.prototype,"programLevelInternalName",{get:function(){return this.cachedProgramLevelInternalName||(this.cachedProgramLevelInternalName=Re(this,!0)),this.cachedProgramLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"fileLevelInternalName",{get:function(){return this.cachedFileLevelInternalName||(this.cachedFileLevelInternalName=Re(this,!1)),this.cachedFileLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevel",{get:function(){var e=this.parent;return!!e&&(!(e.kind==s.VARIABLE&&!(e=e.parent))&&e.kind==s.SOURCE)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevelExport",{get:function(){var e=this.parent;return!(!e||e.kind==s.VARIABLE&&!(e=e.parent))&&(e.kind==s.NAMESPACEDECLARATION?this.is(i.CommonFlags.EXPORT)&&e.isTopLevelExport:e.kind==s.CLASSDECLARATION?this.is(i.CommonFlags.STATIC)&&e.isTopLevelExport:e.kind==s.SOURCE&&this.is(i.CommonFlags.EXPORT))},enumerable:!0,configurable:!0}),t.prototype.needsExplicitExport=function(e){return e.name.text!=e.externalName.text||this.range.source!=e.range.source||!this.isTopLevelExport},t}(j);t.DeclarationStatement=J;var $=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t}(J);t.VariableLikeDeclarationStatement=$;var ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BLOCK,t}return n(t,e),t}(j);t.BlockStatement=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BREAK,t}return n(t,e),t}(j);t.BreakStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CLASSDECLARATION,t}return n(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(J);t.ClassDeclaration=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CONTINUE,t}return n(t,e),t}(j);t.ContinueStatement=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.DO,t}return n(t,e),t}(j);t.DoStatement=ie;var ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EMPTY,t}return n(t,e),t}(j);t.EmptyStatement=ae;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMDECLARATION,t}return n(t,e),t}(J);t.EnumDeclaration=se;var oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMVALUEDECLARATION,t}return n(t,e),t}(J);t.EnumValueDeclaration=oe;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTIMPORT,t}return n(t,e),t}(c);t.ExportImportStatement=ce;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTMEMBER,t}return n(t,e),t}(c);t.ExportMember=pe;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORT,t}return n(t,e),t}(j);t.ExportStatement=le;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPRESSION,t}return n(t,e),t}(j);t.ExpressionStatement=ue;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FIELDDECLARATION,t.parameterIndex=-1,t}return n(t,e),t}($);t.FieldDeclaration=he;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FOR,t}return n(t,e),t}(j);t.ForStatement=de;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FUNCTIONDECLARATION,t}return n(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(J);t.FunctionDeclaration=_e;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return n(t,e),t}(j);t.IfStatement=me;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORTDECLARATION,t}return n(t,e),t}(J);t.ImportDeclaration=ye;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORT,t}return n(t,e),t}(j);t.ImportStatement=ge;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return n(t,e),t}(re);t.InterfaceDeclaration=Ee;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return n(t,e),t}(_e);t.MethodDeclaration=Te;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.NAMESPACEDECLARATION,t}return n(t,e),t}(J);t.NamespaceDeclaration=fe;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return n(t,e),t}(j);t.ReturnStatement=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCHCASE,t}return n(t,e),t}(c);t.SwitchCase=ve;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCH,t}return n(t,e),t}(j);t.SwitchStatement=Ae;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.THROW,t}return n(t,e),t}(j);t.ThrowStatement=Ce;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TRY,t}return n(t,e),t}(j);t.TryStatement=Ne;var Oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return n(t,e),t}(J);t.TypeDeclaration=Oe;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLEDECLARATION,t}return n(t,e),t}($);t.VariableDeclaration=Se;var Le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return n(t,e),t}(j);t.VariableStatement=Le;var be=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VOID,t}return n(t,e),t}(j);t.VoidStatement=be;var ke=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return n(t,e),t}(j);function Re(e,t){void 0===t&&(t=!1);var r=e.name.text,n=e.parent;return n&&(e.kind!=s.VARIABLEDECLARATION||n.kind!=s.VARIABLE||(n=n.parent))?n.kind==s.CLASSDECLARATION?Re(n,t)+(e.is(i.CommonFlags.STATIC)?i.STATIC_DELIMITER:i.INSTANCE_DELIMITER)+r:n.kind==s.NAMESPACEDECLARATION||n.kind==s.ENUMDECLARATION?Re(n,t)+i.STATIC_DELIMITER+r:t?r:e.range.source.internalPath+i.PATH_DELIMITER+r:r}function xe(e){return e.endsWith(".ts")&&(e=e.substring(0,e.length-3)),e}function Fe(e,t){for(var r=0,n=e.length;r=0;--s)free_memory(a[s])}},e.prototype.createCall=function(e,t,r){var n=h(e),i=u(t);try{return _BinaryenCall(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallImport=function(e,t,r){var n=h(e),i=u(t);try{return _BinaryenCallImport(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallIndirect=function(e,t,r){var n=u(t),i=h(r);try{return _BinaryenCallIndirect(this.ref,e,n,t&&t.length||0,i)}finally{free_memory(i),free_memory(n)}},e.prototype.createUnreachable=function(){return _BinaryenUnreachable(this.ref)},e.prototype.addGlobal=function(e,t,r,n){var i=h(e);try{return _BinaryenAddGlobal(this.ref,i,t,r?1:0,n)}finally{free_memory(i)}},e.prototype.addFunction=function(e,t,r,n){var i=h(e),a=l(r);try{return _BinaryenAddFunction(this.ref,i,t,a,r?r.length:0,n)}finally{free_memory(a),free_memory(i)}},e.prototype.removeFunction=function(e){var t=h(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{free_memory(t)}},e.prototype.addTemporaryFunction=function(e,t,r){this.hasTemporaryFunction=assert(!this.hasTemporaryFunction);var n=this.cachedTemporaryName;n||(this.cachedTemporaryName=n=h(""));var i=l(t);try{var a=_BinaryenAddFunctionType(this.ref,n,e,i,t?t.length:0);return _BinaryenAddFunction(this.ref,n,a,0,0,r)}finally{free_memory(i)}},e.prototype.removeTemporaryFunction=function(){this.hasTemporaryFunction=!assert(this.hasTemporaryFunction);var e=assert(this.cachedTemporaryName);_BinaryenRemoveFunction(this.ref,e),_BinaryenRemoveFunctionType(this.ref,e)},e.prototype.addFunctionExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addTableExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addMemoryExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addGlobalExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.removeExport=function(e){var t=h(e);try{_BinaryenRemoveExport(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=h(e),a=h(t),s=h(r);try{return _BinaryenAddFunctionImport(this.ref,i,a,s,n)}finally{free_memory(s),free_memory(a),free_memory(i)}},e.prototype.addTableImport=function(e,t,r){var n=h(e),i=h(t),a=h(r);try{return _BinaryenAddTableImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addMemoryImport=function(e,t,r){var n=h(e),i=h(t),a=h(r);try{return _BinaryenAddMemoryImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addGlobalImport=function(e,t,r,n){var i=h(e),a=h(t),s=h(r);try{return _BinaryenAddGlobalImport(this.ref,i,a,s,n)}finally{free_memory(s),free_memory(a),free_memory(i)}},e.prototype.removeImport=function(e){var t=h(e);try{_BinaryenRemoveImport(this.ref,t)}finally{free_memory(t)}},e.prototype.setMemory=function(e,t,r,n,i){void 0===i&&(i=null);for(var s=h(i),o=r.length,c=new Array(o),u=new Array(o),d=new Array(o),_=0;_=0;--_)free_memory(c[_]);free_memory(s)}},e.prototype.setFunctionTable=function(e){var t=u(e);try{_BinaryenSetFunctionTable(this.ref,t,e.length)}finally{free_memory(t)}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.setShrinkLevel=function(e){void 0===e&&(e=1),_BinaryenSetShrinkLevel(e)},e.prototype.setDebugInfo=function(e){void 0===e&&(e=!1),_BinaryenSetDebugInfo(e)},e.prototype.optimize=function(e){void 0===e&&(e=0),e?_BinaryenFunctionOptimize(e,this.ref):_BinaryenModuleOptimize(this.ref)},e.prototype.runPasses=function(e,t){void 0===t&&(t=0);for(var r=e.length,n=new Array(r),i=0;i=0;--i)free_memory(n[i])}},e.prototype.precomputeFunction=function(e){var t=this.cachedPrecomputeNames;if(!t){var r=h("precompute");this.cachedPrecomputeName=r,this.cachedPrecomputeNames=t=l([r])}_BinaryenFunctionRunPasses(e,this.ref,t,1)},e.prototype.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.cachedByValue,r=h(e),n=0,i=0;try{_BinaryenModuleAllocateAndWrite(t,this.ref,r),n=d(t);var a=d(t+4);i=d(t+8);var s=new m;return s.output=function(e,t){for(var r=new Uint8Array(t),n=0;n>8&255),store(r+2,a>>16&255),store(r+3,a>>>24),r+=4}return t}function u(e){return l(e)}function h(e){if(null==e)return 0;for(var t=allocate_memory(function(e){for(var t=0,r=0,n=e.length;r=55296&&i<=57343&&r+1=55296&&a<=57343&&n+1>>6),store(r++,128|63&a)):a<=65535?(store(r++,224|a>>>12),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=2097151?(store(r++,240|a>>>18),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=67108863?(store(r++,248|a>>>24),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):(store(r++,252|a>>>30),store(r++,128|a>>>24&63),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a))}return store(r,0),t}function d(e){return load(e)|load(e+1)<<8|load(e+2)<<16|load(e+3)<<24}function _(e){if(!e)return null;for(var t,r,n,i,a,s=new Array;t=load(e++);)128&t?(r=63&load(e++),192!=(224&t)?(n=63&load(e++),224==(240&t)?t=(15&t)<<12|r<<6|n:(i=63&load(e++),240==(248&t)?t=(7&t)<<18|r<<12|n<<6|i:(a=63&load(e++),t=248==(252&t)?(3&t)<<24|r<<18|n<<12|i<<6|a:(1&t)<<30|r<<24|n<<18|i<<12|a<<6|63&load(e++))),s.push(t)):s.push((31&t)<<6|r)):s.push(t);return String.fromCodePoints(s)}t.Relooper=c,t.readString=_;var m=function(){return function(){}}();t.BinaryModule=m},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return s};Object.defineProperty(t,"__esModule",{value:!0});var s,o=r(0),c=r(1),p=r(6),l=r(2),u=r(4),h=r(9),d=function(){return function(){}}(),_=function(){return function(){}}(),m=function(){return function(){}}();function y(e,t){switch(assert(t.length),e){case l.DecoratorKind.OPERATOR:case l.DecoratorKind.OPERATOR_BINARY:switch(t.charCodeAt(0)){case 91:if("[]"==t)return s.INDEXED_GET;if("[]="==t)return s.INDEXED_SET;break;case 123:if("{}"==t)return s.UNCHECKED_INDEXED_GET;if("{}="==t)return s.UNCHECKED_INDEXED_SET;break;case 43:if("+"==t)return s.ADD;break;case 45:if("-"==t)return s.SUB;break;case 42:if("*"==t)return s.MUL;if("**"==t)return s.POW;break;case 47:if("/"==t)return s.DIV;break;case 37:if("%"==t)return s.REM;break;case 38:if("&"==t)return s.BITWISE_AND;break;case 124:if("|"==t)return s.BITWISE_OR;break;case 94:if("^"==t)return s.BITWISE_XOR;break;case 61:if("=="==t)return s.EQ;break;case 33:if("!="==t)return s.NE;break;case 62:if(">"==t)return s.GT;if(">="==t)return s.GE;if(">>"==t)return s.BITWISE_SHR;if(">>>"==t)return s.BITWISE_SHR_U;break;case 60:if("<"==t)return s.LT;if("<="==t)return s.LE;if("<<"==t)return s.BITWISE_SHL}break;case l.DecoratorKind.OPERATOR_PREFIX:switch(t.charCodeAt(0)){case 43:if("+"==t)return s.PLUS;if("++"==t)return s.PREFIX_INC;break;case 45:if("-"==t)return s.MINUS;if("--"==t)return s.PREFIX_DEC;break;case 33:if("!"==t)return s.NOT;break;case 126:if("~"==t)return s.BITWISE_NOT}break;case l.DecoratorKind.OPERATOR_POSTFIX:switch(t.charCodeAt(0)){case 43:if("++"==t)return s.POSTFIX_INC;break;case 45:if("--"==t)return s.POSTFIX_DEC}}return s.INVALID}!function(e){e[e.INVALID=0]="INVALID",e[e.INDEXED_GET=1]="INDEXED_GET",e[e.INDEXED_SET=2]="INDEXED_SET",e[e.UNCHECKED_INDEXED_GET=3]="UNCHECKED_INDEXED_GET",e[e.UNCHECKED_INDEXED_SET=4]="UNCHECKED_INDEXED_SET",e[e.ADD=5]="ADD",e[e.SUB=6]="SUB",e[e.MUL=7]="MUL",e[e.DIV=8]="DIV",e[e.REM=9]="REM",e[e.POW=10]="POW",e[e.BITWISE_AND=11]="BITWISE_AND",e[e.BITWISE_OR=12]="BITWISE_OR",e[e.BITWISE_XOR=13]="BITWISE_XOR",e[e.BITWISE_SHL=14]="BITWISE_SHL",e[e.BITWISE_SHR=15]="BITWISE_SHR",e[e.BITWISE_SHR_U=16]="BITWISE_SHR_U",e[e.EQ=17]="EQ",e[e.NE=18]="NE",e[e.GT=19]="GT",e[e.GE=20]="GE",e[e.LT=21]="LT",e[e.LE=22]="LE",e[e.PLUS=23]="PLUS",e[e.MINUS=24]="MINUS",e[e.NOT=25]="NOT",e[e.BITWISE_NOT=26]="BITWISE_NOT",e[e.PREFIX_INC=27]="PREFIX_INC",e[e.PREFIX_DEC=28]="PREFIX_DEC",e[e.POSTFIX_INC=29]="POSTFIX_INC",e[e.POSTFIX_DEC=30]="POSTFIX_DEC"}(s=t.OperatorKind||(t.OperatorKind={}));var g,E,T=new Map,f=function(e){function t(t){void 0===t&&(t=null);var r=e.call(this,t)||this;return r.diagnosticsOffset=0,r.elementsLookup=new Map,r.instancesLookup=new Map,r.typesLookup=T,r.typeAliases=new Map,r.fileLevelExports=new Map,r.moduleLevelExports=new Map,r.arrayPrototype=null,r.stringInstance=null,r.mainFunction=null,r.resolver=new h.Resolver(r),r.sources=[],r}return n(t,e),t.prototype.getSource=function(e){for(var t=this.sources,r=0,n=t.length;r=0),assert(null!=e.type),e.type.toNativeType()){case u.NativeType.I32:t=this.tempI32s||(this.tempI32s=[]);break;case u.NativeType.I64:t=this.tempI64s||(this.tempI64s=[]);break;case u.NativeType.F32:t=this.tempF32s||(this.tempF32s=[]);break;case u.NativeType.F64:t=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}assert(e.index>=0),t.push(e)}},t.prototype.getAndFreeTempLocal=function(e,t){var r,n;switch(e.toNativeType()){case u.NativeType.I32:r=this.tempI32s||(this.tempI32s=[]);break;case u.NativeType.I64:r=this.tempI64s||(this.tempI64s=[]);break;case u.NativeType.F32:r=this.tempF32s||(this.tempF32s=[]);break;case u.NativeType.F64:r=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}return r.length?(n=r[r.length-1]).type=e:(n=this.addLocal(e),r.push(n)),e.is(36)&&this.flow.setLocalWrapped(n.index,t),n},t.prototype.enterBreakContext=function(){var e=this.nextBreakId++;return this.breakStack?this.breakStack.push(e):this.breakStack=[e],this.breakContext=e.toString(10)},t.prototype.leaveBreakContext=function(){assert(null!=this.breakStack);var e=this.breakStack.length;assert(e>0),this.breakStack.pop(),e>1?this.breakContext=this.breakStack[e-2].toString(10):(this.breakContext=null,this.breakStack=null)},t.prototype.finalize=function(e,t){if(this.ref=t,assert(!this.breakStack||!this.breakStack.length),this.breakStack=null,this.breakContext=null,this.tempI32s=this.tempI64s=this.tempF32s=this.tempF64s=null,this.program.options.sourceMap)for(var r=this.debugLocations,n=0,i=r.length;n=r.length)return!1;t=r[n],e-=64*(n+1)}return i64_ne(i64_and(t,i64_shl(i64_one,i64_new(e))),i64_zero)},e.prototype.setLocalWrapped=function(e,t){var r,n=-1;if(e<64){if(e<0)return;r=this.wrappedLocals}else{var i=this.wrappedLocalsExt;for(n=(e-64)/64|0,i||(this.wrappedLocalsExt=i=new Array(n+1),i.length=0);i.length<=n;)i.push(i64_new(0));r=i[n],e-=64*(n+1)}r=t?i64_or(r,i64_shl(i64_one,i64_new(e))):i64_and(r,i64_not(i64_shl(i64_one,i64_new(e)))),n>=0?this.wrappedLocalsExt[n]=r:this.wrappedLocals=r},e.prototype.inherit=function(e){this.flags|=2047&e.flags,this.wrappedLocals=e.wrappedLocals,this.wrappedLocalsExt=e.wrappedLocalsExt},e.prototype.inheritConditional=function(e){e.is(1)&&this.set(64),e.is(4)&&this.set(128),e.is(8)&&e.breakLabel==this.breakLabel&&this.set(256),e.is(16)&&e.continueLabel==this.continueLabel&&this.set(512),e.is(32)&&this.set(1024)},e.prototype.inheritMutual=function(e,t){this.flags|=e.flags&t.flags&63,this.flags|=1984&e.flags,this.flags|=1984&t.flags,this.wrappedLocals=i64_and(e.wrappedLocals,t.wrappedLocals);var r=e.wrappedLocalsExt,n=t.wrappedLocalsExt;if(null!=r&&null!=n){var i=this.wrappedLocalsExt,a=min(r.length,n.length);if(a){if(i)for(;i.lengtha):this.canOverflow(u.getBinaryLeft(e),t)&&!(u.getExpressionId(r=u.getBinaryRight(e))==u.ExpressionId.Const&&u.getConstValueI32(r)>=a);case u.BinaryOp.DivU32:case u.BinaryOp.RemI32:case u.BinaryOp.RemU32:return this.canOverflow(u.getBinaryLeft(e),t)||this.canOverflow(u.getBinaryRight(e),t)}break;case u.ExpressionId.Unary:switch(u.getUnaryOp(e)){case u.UnaryOp.EqzI32:case u.UnaryOp.EqzI64:return!1;case u.UnaryOp.ClzI32:case u.UnaryOp.CtzI32:case u.UnaryOp.PopcntI32:return t.size<7}break;case u.ExpressionId.Const:var s=0;switch(u.getExpressionType(e)){case u.NativeType.I32:s=u.getConstValueI32(e);break;case u.NativeType.I64:s=u.getConstValueI64Low(e);break;case u.NativeType.F32:s=i32(u.getConstValueF32(e));break;case u.NativeType.F64:s=i32(u.getConstValueF64(e));break;default:assert(!1)}switch(t.kind){case 0:return si8.MAX_VALUE;case 1:return si16.MAX_VALUE;case 5:return s<0||s>u8.MAX_VALUE;case 6:return s<0||s>u16.MAX_VALUE;case 10:return 0!=(-2&s)}break;case u.ExpressionId.Load:var o=void 0;switch(u.getLoadBytes(e)){case 1:o=u.isLoadSigned(e)?p.Type.i8:p.Type.u8;break;case 2:o=u.isLoadSigned(e)?p.Type.i16:p.Type.u16;break;default:o=u.isLoadSigned(e)?p.Type.i32:p.Type.u32}return z(o,t);case u.ExpressionId.Block:if(!u.getBlockName(e)){var c=assert(u.getBlockChildCount(e)),l=u.getBlockChild(e,c-1);return this.canOverflow(l,t)}break;case u.ExpressionId.If:return this.canOverflow(u.getIfTrue(e),t)||this.canOverflow(assert(u.getIfFalse(e)),t);case u.ExpressionId.Select:return this.canOverflow(u.getSelectThen(e),t)||this.canOverflow(u.getSelectElse(e),t);case u.ExpressionId.Call:var h=this.currentFunction.program,d=assert(h.instancesLookup.get(assert(u.getCallTarget(e))));assert(d.kind==g.FUNCTION);var _=d.signature.returnType;return!d.flow.is(2)||z(_,t);case u.ExpressionId.Unreachable:return!1}return!0},e.prototype.finalize=function(){assert(null==this.parent),this.continueLabel=null,this.breakLabel=null,this.returnLabel=null,this.contextualTypeArguments=null},e}();function z(e,t){var r=e.byteSize,n=t.byteSize;return!e.is(4)||r>n||e.is(1)!=t.is(1)}t.Flow=K},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(4);!function(e){e[e.I8=0]="I8",e[e.I16=1]="I16",e[e.I32=2]="I32",e[e.I64=3]="I64",e[e.ISIZE=4]="ISIZE",e[e.U8=5]="U8",e[e.U16=6]="U16",e[e.U32=7]="U32",e[e.U64=8]="U64",e[e.USIZE=9]="USIZE",e[e.BOOL=10]="BOOL",e[e.F32=11]="F32",e[e.F64=12]="F64",e[e.VOID=13]="VOID"}(t.TypeKind||(t.TypeKind={})),function(e){e[e.NONE=0]="NONE",e[e.SIGNED=1]="SIGNED",e[e.UNSIGNED=2]="UNSIGNED",e[e.INTEGER=4]="INTEGER",e[e.FLOAT=8]="FLOAT",e[e.POINTER=16]="POINTER",e[e.SHORT=32]="SHORT",e[e.LONG=64]="LONG",e[e.VALUE=128]="VALUE",e[e.REFERENCE=256]="REFERENCE",e[e.NULLABLE=512]="NULLABLE"}(t.TypeFlags||(t.TypeFlags={}));var i=function(){function e(e,t,r){this.cachedNullableType=null,this.kind=e,this.flags=t,this.size=r,this.byteSize=ceil(r/8),this.classReference=null,this.signatureReference=null,this.nonNullableType=this}return Object.defineProperty(e.prototype,"intType",{get:function(){switch(this.kind){case 0:return e.i8;case 1:return e.i16;case 11:case 2:return e.i32;case 12:case 3:return e.i64;case 4:return 64==this.size?e.isize64:e.isize32;case 5:return e.u8;case 6:return e.u16;case 7:return e.u32;case 8:return e.u64;case 9:return 64==this.size?e.usize64:e.usize32;case 10:default:return e.i32}},enumerable:!0,configurable:!0}),e.prototype.computeSmallIntegerShift=function(e){return e.size-this.size},e.prototype.computeSmallIntegerMask=function(e){var t=this.is(2)?this.size:this.size-1;return-1>>>e.size-t},e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.isAny=function(e){return 0!=(this.flags&e)},e.prototype.asClass=function(t){assert(9==this.kind&&!this.classReference);var r=new e(this.kind,-129&this.flags|256,this.size);return r.classReference=t,r},e.prototype.asFunction=function(t){assert(7==this.kind&&!this.signatureReference);var r=new e(this.kind,-129&this.flags|256,this.size);return r.signatureReference=t,r},e.prototype.asNullable=function(){return assert(this.is(256)),this.cachedNullableType||(assert(!this.is(512)),this.cachedNullableType=new e(this.kind,512|this.flags,this.size),this.cachedNullableType.nonNullableType=this,this.cachedNullableType.classReference=this.classReference,this.cachedNullableType.signatureReference=this.signatureReference),this.cachedNullableType},e.prototype.isAssignableTo=function(e,t){var r,n,i,a;if(void 0===t&&(t=!1),this.is(256)){if(e.is(256)&&(!this.is(512)||e.is(512)))if(r=this.classReference){if(n=e.classReference)return r.isAssignableTo(n)}else if((i=this.signatureReference)&&(a=e.signatureReference))return i.isAssignableTo(a)}else if(!e.is(256))if(this.is(4))if(e.is(4)){if(!t||this.is(1)==e.is(1))return this.size<=e.size}else{if(11==e.kind)return this.size<=23;if(12==e.kind)return this.size<=52}else if(this.is(8)&&e.is(8))return this.size<=e.size;return!1},e.commonCompatible=function(e,t,r){return t.isAssignableTo(e,r)?e:e.isAssignableTo(t,r)?t:null},e.prototype.toString=function(e){if(void 0===e&&(e=!1),!e&&this.is(256)){var t=this.classReference;if(t)return this.is(512)?t.toString()+" | null":t.toString();var r=this.signatureReference;if(r)return this.is(512)?"("+r.toString(!0)+") | null":r.toString(!0);assert(!1)}switch(this.kind){case 0:return"i8";case 1:return"i16";case 2:return"i32";case 3:return"i64";case 4:return"isize";case 5:return"u8";case 6:return"u16";case 7:return"u32";case 8:return"u64";case 9:return"usize";case 10:return"bool";case 11:return"f32";case 12:return"f64";default:assert(!1);case 13:return"void"}},e.prototype.toNativeType=function(){switch(this.kind){default:return n.NativeType.I32;case 3:case 8:return n.NativeType.I64;case 4:case 9:return 64==this.size?n.NativeType.I64:n.NativeType.I32;case 11:return n.NativeType.F32;case 12:return n.NativeType.F64;case 13:return n.NativeType.None}},e.prototype.toNativeZero=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(0);case 4:case 9:if(64!=this.size)return e.createI32(0);case 3:case 8:return e.createI64(0);case 11:return e.createF32(0);case 12:return e.createF64(0)}},e.prototype.toNativeOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(1);case 4:case 9:if(64!=this.size)return e.createI32(1);case 3:case 8:return e.createI64(1);case 11:return e.createF32(1);case 12:return e.createF64(1)}},e.prototype.toNativeNegOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(-1);case 4:case 9:if(64!=this.size)return e.createI32(-1);case 3:case 8:return e.createI64(-1,-1);case 11:return e.createF32(-1);case 12:return e.createF64(-1)}},e.prototype.toSignatureString=function(){switch(this.kind){default:return"i";case 3:case 8:return"I";case 4:case 9:return 64==this.size?"I":"i";case 11:return"f";case 12:return"F";case 13:return"v"}},e.i8=new e(0,165,8),e.i16=new e(1,165,16),e.i32=new e(2,133,32),e.i64=new e(3,197,64),e.isize32=new e(4,149,32),e.isize64=new e(4,213,64),e.u8=new e(5,166,8),e.u16=new e(6,166,16),e.u32=new e(7,134,32),e.u64=new e(8,198,64),e.usize32=new e(9,150,32),e.usize64=new e(9,214,64),e.bool=new e(10,166,1),e.f32=new e(11,137,32),e.f64=new e(12,201,64),e.void=new e(13,0,0),e}();t.Type=i,t.typesToNativeTypes=function(e){for(var t=e.length,r=new Array(t),n=0;ne?t[e]:o(e)},e.prototype.isAssignableTo=function(e){var t=this.thisType,r=e.thisType;if(t){if(!r||!t.isAssignableTo(r))return!1}else if(r)return!1;if(this.hasRest!=e.hasRest)return!1;var n=this.parameterTypes,i=e.parameterTypes,a=n.length;if(a!=i.length)return!1;for(var s=0;s=p&&u!=l?t.push("?: "):t.push(": "),t.push(i[u].toString());return t.push(") => "),t.push(this.returnType.toString()),t.join("")},e}();t.Signature=a;var s=null;function o(e){s||(s=[]);for(var t=s.length;t<=e;++t)s.push("arg$"+t.toString(10));return s[e-1]}t.getDefaultParameterName=o},function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var i,a,s=r(1),o=r(2),c=r(3);function p(e){switch(assert(e.length),e.charCodeAt(0)){case 97:switch(e){case"abstract":return i.ABSTRACT;case"as":return i.AS;case"async":return i.ASYNC;case"await":return i.AWAIT}break;case 98:switch(e){case"break":return i.BREAK}break;case 99:switch(e){case"case":return i.CASE;case"catch":return i.CATCH;case"class":return i.CLASS;case"continue":return i.CONTINUE;case"const":return i.CONST;case"constructor":return i.CONSTRUCTOR}break;case 100:switch(e){case"debugger":return i.DEBUGGER;case"declare":return i.DECLARE;case"default":return i.DEFAULT;case"delete":return i.DELETE;case"do":return i.DO}break;case 101:switch(e){case"else":return i.ELSE;case"enum":return i.ENUM;case"export":return i.EXPORT;case"extends":return i.EXTENDS}break;case 102:switch(e){case"false":return i.FALSE;case"finally":return i.FINALLY;case"for":return i.FOR;case"from":return i.FROM;case"function":return i.FUNCTION}break;case 103:switch(e){case"get":return i.GET}break;case 105:switch(e){case"if":return i.IF;case"implements":return i.IMPLEMENTS;case"import":return i.IMPORT;case"in":return i.IN;case"instanceof":return i.INSTANCEOF;case"interface":return i.INTERFACE;case"is":return i.IS}break;case 107:switch(e){case"keyof":return i.KEYOF}break;case 108:switch(e){case"let":return i.LET}break;case 109:switch(e){case"module":return i.MODULE}break;case 110:switch(e){case"namespace":return i.NAMESPACE;case"new":return i.NEW;case"null":return i.NULL}break;case 111:switch(e){case"of":return i.OF}break;case 112:switch(e){case"package":return i.PACKAGE;case"private":return i.PRIVATE;case"protected":return i.PROTECTED;case"public":return i.PUBLIC}break;case 114:switch(e){case"readonly":return i.READONLY;case"return":return i.RETURN}break;case 115:switch(e){case"set":return i.SET;case"static":return i.STATIC;case"super":return i.SUPER;case"switch":return i.SWITCH}break;case 116:switch(e){case"this":return i.THIS;case"throw":return i.THROW;case"true":return i.TRUE;case"try":return i.TRY;case"type":return i.TYPE;case"typeof":return i.TYPEOF}break;case 118:switch(e){case"var":return i.VAR;case"void":return i.VOID}break;case 119:switch(e){case"while":return i.WHILE;case"with":return i.WITH}break;case 121:switch(e){case"yield":return i.YIELD}}return i.INVALID}function l(e){switch(e){case i.ABSTRACT:case i.AS:case i.CONSTRUCTOR:case i.DECLARE:case i.DELETE:case i.FROM:case i.FOR:case i.GET:case i.IS:case i.KEYOF:case i.MODULE:case i.NAMESPACE:case i.READONLY:case i.SET:case i.TYPE:return!0;default:return!1}}!function(e){e[e.ABSTRACT=0]="ABSTRACT",e[e.AS=1]="AS",e[e.ASYNC=2]="ASYNC",e[e.AWAIT=3]="AWAIT",e[e.BREAK=4]="BREAK",e[e.CASE=5]="CASE",e[e.CATCH=6]="CATCH",e[e.CLASS=7]="CLASS",e[e.CONST=8]="CONST",e[e.CONTINUE=9]="CONTINUE",e[e.CONSTRUCTOR=10]="CONSTRUCTOR",e[e.DEBUGGER=11]="DEBUGGER",e[e.DECLARE=12]="DECLARE",e[e.DEFAULT=13]="DEFAULT",e[e.DELETE=14]="DELETE",e[e.DO=15]="DO",e[e.ELSE=16]="ELSE",e[e.ENUM=17]="ENUM",e[e.EXPORT=18]="EXPORT",e[e.EXTENDS=19]="EXTENDS",e[e.FALSE=20]="FALSE",e[e.FINALLY=21]="FINALLY",e[e.FOR=22]="FOR",e[e.FROM=23]="FROM",e[e.FUNCTION=24]="FUNCTION",e[e.GET=25]="GET",e[e.IF=26]="IF",e[e.IMPLEMENTS=27]="IMPLEMENTS",e[e.IMPORT=28]="IMPORT",e[e.IN=29]="IN",e[e.INSTANCEOF=30]="INSTANCEOF",e[e.INTERFACE=31]="INTERFACE",e[e.IS=32]="IS",e[e.KEYOF=33]="KEYOF",e[e.LET=34]="LET",e[e.MODULE=35]="MODULE",e[e.NAMESPACE=36]="NAMESPACE",e[e.NEW=37]="NEW",e[e.NULL=38]="NULL",e[e.OF=39]="OF",e[e.PACKAGE=40]="PACKAGE",e[e.PRIVATE=41]="PRIVATE",e[e.PROTECTED=42]="PROTECTED",e[e.PUBLIC=43]="PUBLIC",e[e.READONLY=44]="READONLY",e[e.RETURN=45]="RETURN",e[e.SET=46]="SET",e[e.STATIC=47]="STATIC",e[e.SUPER=48]="SUPER",e[e.SWITCH=49]="SWITCH",e[e.THIS=50]="THIS",e[e.THROW=51]="THROW",e[e.TRUE=52]="TRUE",e[e.TRY=53]="TRY",e[e.TYPE=54]="TYPE",e[e.TYPEOF=55]="TYPEOF",e[e.VAR=56]="VAR",e[e.VOID=57]="VOID",e[e.WHILE=58]="WHILE",e[e.WITH=59]="WITH",e[e.YIELD=60]="YIELD",e[e.OPENBRACE=61]="OPENBRACE",e[e.CLOSEBRACE=62]="CLOSEBRACE",e[e.OPENPAREN=63]="OPENPAREN",e[e.CLOSEPAREN=64]="CLOSEPAREN",e[e.OPENBRACKET=65]="OPENBRACKET",e[e.CLOSEBRACKET=66]="CLOSEBRACKET",e[e.DOT=67]="DOT",e[e.DOT_DOT_DOT=68]="DOT_DOT_DOT",e[e.SEMICOLON=69]="SEMICOLON",e[e.COMMA=70]="COMMA",e[e.LESSTHAN=71]="LESSTHAN",e[e.GREATERTHAN=72]="GREATERTHAN",e[e.LESSTHAN_EQUALS=73]="LESSTHAN_EQUALS",e[e.GREATERTHAN_EQUALS=74]="GREATERTHAN_EQUALS",e[e.EQUALS_EQUALS=75]="EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS=76]="EXCLAMATION_EQUALS",e[e.EQUALS_EQUALS_EQUALS=77]="EQUALS_EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS_EQUALS=78]="EXCLAMATION_EQUALS_EQUALS",e[e.EQUALS_GREATERTHAN=79]="EQUALS_GREATERTHAN",e[e.PLUS=80]="PLUS",e[e.MINUS=81]="MINUS",e[e.ASTERISK_ASTERISK=82]="ASTERISK_ASTERISK",e[e.ASTERISK=83]="ASTERISK",e[e.SLASH=84]="SLASH",e[e.PERCENT=85]="PERCENT",e[e.PLUS_PLUS=86]="PLUS_PLUS",e[e.MINUS_MINUS=87]="MINUS_MINUS",e[e.LESSTHAN_LESSTHAN=88]="LESSTHAN_LESSTHAN",e[e.GREATERTHAN_GREATERTHAN=89]="GREATERTHAN_GREATERTHAN",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN=90]="GREATERTHAN_GREATERTHAN_GREATERTHAN",e[e.AMPERSAND=91]="AMPERSAND",e[e.BAR=92]="BAR",e[e.CARET=93]="CARET",e[e.EXCLAMATION=94]="EXCLAMATION",e[e.TILDE=95]="TILDE",e[e.AMPERSAND_AMPERSAND=96]="AMPERSAND_AMPERSAND",e[e.BAR_BAR=97]="BAR_BAR",e[e.QUESTION=98]="QUESTION",e[e.COLON=99]="COLON",e[e.EQUALS=100]="EQUALS",e[e.PLUS_EQUALS=101]="PLUS_EQUALS",e[e.MINUS_EQUALS=102]="MINUS_EQUALS",e[e.ASTERISK_EQUALS=103]="ASTERISK_EQUALS",e[e.ASTERISK_ASTERISK_EQUALS=104]="ASTERISK_ASTERISK_EQUALS",e[e.SLASH_EQUALS=105]="SLASH_EQUALS",e[e.PERCENT_EQUALS=106]="PERCENT_EQUALS",e[e.LESSTHAN_LESSTHAN_EQUALS=107]="LESSTHAN_LESSTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_EQUALS=108]="GREATERTHAN_GREATERTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS=109]="GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS",e[e.AMPERSAND_EQUALS=110]="AMPERSAND_EQUALS",e[e.BAR_EQUALS=111]="BAR_EQUALS",e[e.CARET_EQUALS=112]="CARET_EQUALS",e[e.AT=113]="AT",e[e.IDENTIFIER=114]="IDENTIFIER",e[e.STRINGLITERAL=115]="STRINGLITERAL",e[e.INTEGERLITERAL=116]="INTEGERLITERAL",e[e.FLOATLITERAL=117]="FLOATLITERAL",e[e.INVALID=118]="INVALID",e[e.ENDOFFILE=119]="ENDOFFILE"}(i=t.Token||(t.Token={})),function(e){e[e.DEFAULT=0]="DEFAULT",e[e.PREFER=1]="PREFER",e[e.ALWAYS=2]="ALWAYS"}(a=t.IdentifierHandling||(t.IdentifierHandling={})),t.tokenFromKeyword=p,t.tokenIsAlsoIdentifier=l,t.operatorTokenToString=function(e){switch(e){case i.DELETE:return"delete";case i.IN:return"in";case i.INSTANCEOF:return"instanceof";case i.NEW:return"new";case i.TYPEOF:return"typeof";case i.VOID:return"void";case i.YIELD:return"yield";case i.DOT_DOT_DOT:return"...";case i.COMMA:return",";case i.LESSTHAN:return"<";case i.GREATERTHAN:return">";case i.LESSTHAN_EQUALS:return"<=";case i.GREATERTHAN_EQUALS:return">=";case i.EQUALS_EQUALS:return"==";case i.EXCLAMATION_EQUALS:return"!=";case i.EQUALS_EQUALS_EQUALS:return"===";case i.EXCLAMATION_EQUALS_EQUALS:return"!==";case i.PLUS:return"+";case i.MINUS:return"-";case i.ASTERISK_ASTERISK:return"**";case i.ASTERISK:return"*";case i.SLASH:return"/";case i.PERCENT:return"%";case i.PLUS_PLUS:return"++";case i.MINUS_MINUS:return"--";case i.LESSTHAN_LESSTHAN:return"<<";case i.GREATERTHAN_GREATERTHAN:return">>";case i.GREATERTHAN_GREATERTHAN_GREATERTHAN:return">>>";case i.AMPERSAND:return"&";case i.BAR:return"|";case i.CARET:return"^";case i.EXCLAMATION:return"!";case i.TILDE:return"~";case i.AMPERSAND_AMPERSAND:return"&&";case i.BAR_BAR:return"||";case i.EQUALS:return"=";case i.PLUS_EQUALS:return"+=";case i.MINUS_EQUALS:return"-=";case i.ASTERISK_EQUALS:return"*=";case i.ASTERISK_ASTERISK_EQUALS:return"**=";case i.SLASH_EQUALS:return"/=";case i.PERCENT_EQUALS:return"%=";case i.LESSTHAN_LESSTHAN_EQUALS:return"<<=";case i.GREATERTHAN_GREATERTHAN_EQUALS:return">>=";case i.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:return">>>=";case i.AMPERSAND_EQUALS:return"&=";case i.BAR_EQUALS:return"|=";case i.CARET_EQUALS:return"^=";default:return assert(!1),""}};var u=function(){function e(e,t,r){this.debugInfoRef=0,this.source=e,this.start=t,this.end=r}return e.join=function(t,r){if(t.source!=r.source)throw new Error("source mismatch");return new e(t.source,t.startr.end?t.end:r.end)},Object.defineProperty(e.prototype,"atStart",{get:function(){return new e(this.source,this.start,this.start)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"atEnd",{get:function(){return new e(this.source,this.end,this.end)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"line",{get:function(){for(var e=this.source.text,t=1,r=this.start;r>=0;--r)10==e.charCodeAt(r)&&t++;return t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"column",{get:function(){for(var e=this.source.text,t=0,r=this.start-1;r>=0&&10!=e.charCodeAt(r);--r)++t;return t},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.source.text.substring(this.start,this.end)},e}();t.Range=u;var h=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,r)||this;n.end=0,n.pos=0,n.token=-1,n.tokenPos=0,n.nextToken=-1,n.nextTokenPos=0,n.nextTokenOnNewLine=!1,n.onComment=null,n.source=t,n.pos=0,n.end=t.text.length,n.diagnostics=r||new Array;var i=t.text;if(n.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos+11&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos3&&this.pos1&&this.pos1&&this.pos=this.end){n+=e.substring(r,this.pos),this.error(s.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.end));break}var i=e.charCodeAt(this.pos);if(i==t){n+=e.substring(r,this.pos++);break}if(92!=i){if(c.isLineBreak(i)){n+=e.substring(r,this.pos),this.error(s.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.pos));break}++this.pos}else n+=e.substring(r,this.pos),n+=this.readEscapeSequence(),r=this.pos}return n},t.prototype.readEscapeSequence=function(){if(++this.pos>=this.end)return this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(this.end)),"";var e=this.source.text,t=e.charCodeAt(this.pos++);switch(t){case 48:return"\0";case 98:return"\b";case 116:return"\t";case 110:return"\n";case 118:return"\v";case 102:return"\f";case 114:return"\r";case 39:return"'";case 34:return'"';case 117:return this.pos=this.end){this.error(s.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.end));break}if(92!=e.charCodeAt(this.pos)){var n=e.charCodeAt(this.pos);if(47==n&&!r)break;if(c.isLineBreak(n)){this.error(s.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.pos));break}++this.pos,r=!1}else++this.pos,r=!0}return e.substring(t,this.pos)},t.prototype.readRegexpFlags=function(){for(var e=this.source.text,t=this.pos,r=0;this.pos57)&&95!=r)break;t++}return!0},t.prototype.readInteger=function(){var e=this.source.text;if(48==e.charCodeAt(this.pos)&&this.pos+2=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else if(o>=65&&o<=70)r=i64_add(i64_mul(r,n),i64_new(10+o-65,0));else if(o>=97&&o<=102)r=i64_add(i64_mul(r,n),i64_new(10+o-97,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readDecimalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(10,0),i=t;this.pos=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readOctalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(8,0),i=t;this.pos=48&&o<=55)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}++this.pos}return this.pos==t?this.error(s.DiagnosticCode.Octal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readBinaryInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(2,0),i=i64_new(1,0),a=t;this.pos=48&&n<=57)t=16*t+n-48;else if(n>=65&&n<=70)t=16*t+10+n-65;else{if(!(n>=97&&n<=102))return this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(this.pos-1,this.pos)),"";t=16*t+10+n-97}if(0==--e)break}return e?(this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(this.pos)),""):String.fromCharCode(t)},t.prototype.readExtendedUnicodeEscape=function(){var e=this.pos,t=this.readHexInteger(),r=i64_low(t),n=!1;assert(!i64_high(t)),r>1114111&&(this.error(s.DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,this.range(e,this.pos)),n=!0);var i=this.source.text;return this.pos>=this.end?(this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(e,this.end)),n=!0):125==i.charCodeAt(this.pos)?++this.pos:(this.error(s.DiagnosticCode.Unterminated_Unicode_escape_sequence,this.range(e,this.pos)),n=!0),n?"":r<65536?String.fromCharCode(r):String.fromCharCode(55296+((r-65536)/1024|0),(r-65536)%1024+56320)},t.prototype.finish=function(){},t}(s.DiagnosticEmitter);t.Tokenizer=h;var d=function(){return function(){}}();t.State=d;var _=null},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return s};Object.defineProperty(t,"__esModule",{value:!0});var s,o=r(1),c=r(5),p=r(2),l=r(6),u=r(0);!function(e){e[e.REPORT=0]="REPORT",e[e.SWALLOW=1]="SWALLOW"}(s=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==p.NodeKind.SIGNATURE){var n=this.resolveSignature(e,t,r);return n?e.isNullable?n.type.asNullable():n.type:null}assert(e.kind==p.NodeKind.TYPE);var i=e,a=i.name.text,h=a,d=i.range.source.internalPath+u.PATH_DELIMITER+a,_=this.program.elementsLookup,m=void 0;if((m=_.get(d))||(m=_.get(h)))switch(m.kind){case c.ElementKind.ENUM:return null!==i.typeArguments&&i.typeArguments.length?(r==s.REPORT&&this.error(o.DiagnosticCode.Type_0_is_not_generic,e.range,m.internalName),null):l.Type.i32;case c.ElementKind.CLASS_PROTOTYPE:var y=this.resolveClassInclTypeArguments(m,i.typeArguments,t,e);return y?e.isNullable?y.type.asNullable():y.type:null}var g=this.program.typeAliases.get(a);if(g)return this.resolveType(g.type,t,r);var E=i.typeArguments;if(E){for(var T=E.length,f=new Array(T),I=0;I",h+="<"+A+">")}else if(t){var C=t.get(h);if(C)return C}}var N=this.program.typesLookup,O=void 0;return(O=N.get(d))||(O=N.get(h))?O:(r==s.REPORT&&this.error(o.DiagnosticCode.Cannot_find_name_0,i.name.range,h),null)},t.prototype.resolveSignature=function(e,t,r){void 0===t&&(t=null),void 0===r&&(r=s.REPORT);var n=e.explicitThisType,i=null;if(n&&!(i=this.resolveType(n,t,r)))return null;for(var a=e.parameters,o=a.length,c=new Array(o),u=new Array(o),h=0,d=!1,_=0;_"),_=new c.Function(e,H,V,R||g,r),e.instances.set(d,_),this.program.instancesLookup.set(H,_),_},t.prototype.resolveFunctionPartially=function(e,t,r){void 0===r&&(r=s.REPORT),assert(e.is(u.CommonFlags.INSTANCE));var n=assert(e.classPrototype);if(!t||!t.length)return e;var i=e.simpleName,a=l.typesToString(t),o=new c.FunctionPrototype(this.program,i,n.internalName+"<"+a+">"+u.INSTANCE_DELIMITER+i,e.declaration,n,e.decoratorFlags);return o.flags=e.flags,o.operatorKind=e.operatorKind,o.classTypeArguments=t,o},t.prototype.resolveFunctionInclTypeArguments=function(e,t,r,n,i){void 0===i&&(i=s.REPORT);var a=null;return!e.is(u.CommonFlags.GENERIC)||(assert(null!=t&&0!=t.length),a=this.resolveTypeArguments(assert(e.declaration.typeParameters),t,r,n,i))?this.resolveFunction(e,a,r,i):null},t.prototype.resolveClass=function(e,t,r,n){var h,d,_,m,y,g,E,T;void 0===r&&(r=null),void 0===n&&(n=s.REPORT);var f=t?l.typesToString(t):"",I=e.instances.get(f);if(I)return I;var v=r;if(r=new Map,v)try{for(var A=i(v),C=A.next();!C.done;C=A.next()){var N=a(C.value,2),O=N[0],S=N[1];r.set(O,S)}}catch(e){h={error:e}}finally{try{C&&!C.done&&(d=A.return)&&d.call(A)}finally{if(h)throw h.error}}var L=e.declaration;if(t){var b=L.typeParameters,k=b.length,R=t.length;assert(R==k);for(var x=0;x",U+="<"+f+">"),(I=new c.Class(e,B,U,t,F)).contextualTypeArguments=r,e.instances.set(f,I),this.program.instancesLookup.set(U,I);var P=0;if(F){if(F.members){I.members||(I.members=new Map);try{for(var w=i(F.members.values()),M=w.next();!M.done;M=w.next()){var G=M.value;I.members.set(G.simpleName,G)}}catch(e){_={error:e}}finally{try{M&&!M.done&&(m=w.return)&&m.call(w)}finally{if(_)throw _.error}}}P=F.currentMemoryOffset}if(e.constructorPrototype){var K=this.resolveFunctionPartially(e.constructorPrototype,t,n);if(!K)return null;I.constructorInstance=this.resolveFunction(K,null,null,n)}if(e.instanceMembers)try{for(var z=i(e.instanceMembers.values()),V=z.next();!V.done;V=z.next()){var H=V.value;switch(H.kind){case c.ElementKind.FIELD_PROTOTYPE:I.members||(I.members=new Map);var X=H.declaration,W=null;if(X.type)W=this.resolveType(X.type,I.contextualTypeArguments,n);else{if(null!==F&&null!==F.members){var Y=F.members.get(H.simpleName);Y&&!Y.is(u.CommonFlags.PRIVATE)&&(assert(Y.kind==c.ElementKind.FIELD),W=Y.type)}W||n==s.REPORT&&this.error(o.DiagnosticCode.Type_expected,X.name.range.atEnd)}if(!W)break;var Q=new c.Field(H,U+u.INSTANCE_DELIMITER+H.simpleName,W,X,I);switch(W.byteSize){case 1:break;case 2:1&P&&++P;break;case 4:3&P&&(P=1+(3|P));break;case 8:7&P&&(P=1+(7|P));break;default:assert(!1)}Q.memoryOffset=P,P+=W.byteSize,I.members.set(H.simpleName,Q);break;case c.ElementKind.FUNCTION_PROTOTYPE:I.members||(I.members=new Map);var q=this.resolveFunctionPartially(H,t,n);if(!q)return null;q.internalName=U+u.INSTANCE_DELIMITER+q.simpleName,I.members.set(H.simpleName,q);break;case c.ElementKind.PROPERTY:I.members||(I.members=new Map);var j=assert(H.getterPrototype),Z=H.setterPrototype,J=new c.Property(this.program,H.simpleName,U+u.INSTANCE_DELIMITER+H.simpleName,e),$=this.resolveFunctionPartially(j,t,n);if(!$)return null;if($.internalName=U+u.INSTANCE_DELIMITER+$.simpleName,J.getterPrototype=$,Z){var ee=this.resolveFunctionPartially(Z,t,n);if(!ee)return null;ee.internalName=U+u.INSTANCE_DELIMITER+ee.simpleName,J.setterPrototype=ee}I.members.set(H.simpleName,J);break;default:assert(!1)}}}catch(e){y={error:e}}finally{try{V&&!V.done&&(g=z.return)&&g.call(z)}finally{if(y)throw y.error}}I.currentMemoryOffset=P;try{for(var te=i(e.overloadPrototypes),re=te.next();!re.done;re=te.next()){var ne=a(re.value,2),ie=ne[0],ae=ne[1];assert(ie!=c.OperatorKind.INVALID);var se=void 0;if(ae.is(u.CommonFlags.INSTANCE)){var oe=this.resolveFunctionPartially(ae,t,n);if(!oe)continue;se=this.resolveFunction(oe,null,null,n)}else se=this.resolveFunction(ae,null,null,n);if(se){var ce=I.overloads;ce||(I.overloads=ce=new Map),ce.set(ie,se)}}}catch(e){E={error:e}}finally{try{re&&!re.done&&(T=te.return)&&T.call(te)}finally{if(E)throw E.error}}return I},t.prototype.resolveClassInclTypeArguments=function(e,t,r,n,i){void 0===i&&(i=s.REPORT);var a=null;if(e.is(u.CommonFlags.GENERIC)){var c=e.declaration.typeParameters,p=c.length;assert(p>0);var l=null!==t?t.length:0;if(p!=l)return i==s.REPORT&&this.error(o.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,p.toString(10),l.toString(10)),null;if(!(a=this.resolveTypeArguments(c,t,r,n,i)))return null}else if(null!==t&&t.length)return i==s.REPORT&&this.error(o.DiagnosticCode.Type_0_is_not_generic,n.range,e.internalName),null;return this.resolveClass(e,a,r,i)},t}(o.DiagnosticEmitter);t.Resolver=h},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Operation_not_supported=100]="Operation_not_supported",e[e.Operation_is_unsafe=101]="Operation_is_unsafe",e[e.Conversion_from_type_0_to_1_requires_an_explicit_cast=200]="Conversion_from_type_0_to_1_requires_an_explicit_cast",e[e.Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit=201]="Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit",e[e.Type_0_cannot_be_changed_to_type_1=202]="Type_0_cannot_be_changed_to_type_1",e[e.Type_0_cannot_be_reinterpreted_as_type_1=203]="Type_0_cannot_be_reinterpreted_as_type_1",e[e.Basic_type_0_cannot_be_nullable=204]="Basic_type_0_cannot_be_nullable",e[e.Cannot_export_a_mutable_global=205]="Cannot_export_a_mutable_global",e[e.Compiling_constant_with_non_constant_initializer_as_mutable=206]="Compiling_constant_with_non_constant_initializer_as_mutable",e[e.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa=207]="Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa",e[e.Unmanaged_classes_cannot_implement_interfaces=208]="Unmanaged_classes_cannot_implement_interfaces",e[e.Invalid_regular_expression_flags=209]="Invalid_regular_expression_flags",e[e.Implementation_0_must_match_the_signature_1=210]="Implementation_0_must_match_the_signature_1",e[e.Class_0_is_sealed_and_cannot_be_extended=211]="Class_0_is_sealed_and_cannot_be_extended",e[e.Decorator_0_is_not_valid_here=212]="Decorator_0_is_not_valid_here",e[e.Duplicate_decorator=213]="Duplicate_decorator",e[e.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf=214]="An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf",e[e.Optional_parameter_must_have_an_initializer=215]="Optional_parameter_must_have_an_initializer",e[e.Constructor_of_class_0_must_not_require_any_arguments=216]="Constructor_of_class_0_must_not_require_any_arguments",e[e.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.Enum_member_must_have_initializer=1061]="Enum_member_must_have_initializer",e[e.Statements_are_not_allowed_in_ambient_contexts=1036]="Statements_are_not_allowed_in_ambient_contexts",e[e.Initializers_are_not_allowed_in_ambient_contexts=1039]="Initializers_are_not_allowed_in_ambient_contexts",e[e._0_modifier_cannot_be_used_here=1042]="_0_modifier_cannot_be_used_here",e[e.A_rest_parameter_cannot_be_optional=1047]="A_rest_parameter_cannot_be_optional",e[e.A_rest_parameter_cannot_have_an_initializer=1048]="A_rest_parameter_cannot_have_an_initializer",e[e.A_set_accessor_must_have_exactly_one_parameter=1049]="A_set_accessor_must_have_exactly_one_parameter",e[e.A_set_accessor_parameter_cannot_have_an_initializer=1052]="A_set_accessor_parameter_cannot_have_an_initializer",e[e.A_get_accessor_cannot_have_parameters=1054]="A_get_accessor_cannot_have_parameters",e[e.Type_parameters_cannot_appear_on_a_constructor_declaration=1092]="Type_parameters_cannot_appear_on_a_constructor_declaration",e[e.Type_annotation_cannot_appear_on_a_constructor_declaration=1093]="Type_annotation_cannot_appear_on_a_constructor_declaration",e[e.An_accessor_cannot_have_type_parameters=1094]="An_accessor_cannot_have_type_parameters",e[e.A_set_accessor_cannot_have_a_return_type_annotation=1095]="A_set_accessor_cannot_have_a_return_type_annotation",e[e.Type_parameter_list_cannot_be_empty=1098]="Type_parameter_list_cannot_be_empty",e[e.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement=1104]="A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement",e[e.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement=1105]="A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement",e[e.A_return_statement_can_only_be_used_within_a_function_body=1108]="A_return_statement_can_only_be_used_within_a_function_body",e[e.Expression_expected=1109]="Expression_expected",e[e.Type_expected=1110]="Type_expected",e[e.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement=1113]="A_default_clause_cannot_appear_more_than_once_in_a_switch_statement",e[e.Duplicate_label_0=1114]="Duplicate_label_0",e[e.Octal_literals_are_not_allowed_in_strict_mode=1121]="Octal_literals_are_not_allowed_in_strict_mode",e[e.Digit_expected=1124]="Digit_expected",e[e.Hexadecimal_digit_expected=1125]="Hexadecimal_digit_expected",e[e.Unexpected_end_of_text=1126]="Unexpected_end_of_text",e[e.Invalid_character=1127]="Invalid_character",e[e._case_or_default_expected=1130]="_case_or_default_expected",e[e.A_declare_modifier_cannot_be_used_in_an_already_ambient_context=1038]="A_declare_modifier_cannot_be_used_in_an_already_ambient_context",e[e.Type_argument_expected=1140]="Type_argument_expected",e[e.String_literal_expected=1141]="String_literal_expected",e[e.Line_break_not_permitted_here=1142]="Line_break_not_permitted_here",e[e.Declaration_expected=1146]="Declaration_expected",e[e._const_declarations_must_be_initialized=1155]="_const_declarations_must_be_initialized",e[e.Unterminated_regular_expression_literal=1161]="Unterminated_regular_expression_literal",e[e.Interface_declaration_cannot_have_implements_clause=1176]="Interface_declaration_cannot_have_implements_clause",e[e.Binary_digit_expected=1177]="Binary_digit_expected",e[e.Octal_digit_expected=1178]="Octal_digit_expected",e[e.An_implementation_cannot_be_declared_in_ambient_contexts=1183]="An_implementation_cannot_be_declared_in_ambient_contexts",e[e.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive=1198]="An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive",e[e.Unterminated_Unicode_escape_sequence=1199]="Unterminated_Unicode_escape_sequence",e[e.Decorators_are_not_valid_here=1206]="Decorators_are_not_valid_here",e[e._abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration=1242]="_abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration",e[e.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract=1245]="Method_0_cannot_have_an_implementation_because_it_is_marked_abstract",e[e.A_class_may_only_extend_another_class=1311]="A_class_may_only_extend_another_class",e[e.A_parameter_property_cannot_be_declared_using_a_rest_parameter=1317]="A_parameter_property_cannot_be_declared_using_a_rest_parameter",e[e.Duplicate_identifier_0=2300]="Duplicate_identifier_0",e[e.Cannot_find_name_0=2304]="Cannot_find_name_0",e[e.Module_0_has_no_exported_member_1=2305]="Module_0_has_no_exported_member_1",e[e.Generic_type_0_requires_1_type_argument_s=2314]="Generic_type_0_requires_1_type_argument_s",e[e.Type_0_is_not_generic=2315]="Type_0_is_not_generic",e[e.Type_0_is_not_assignable_to_type_1=2322]="Type_0_is_not_assignable_to_type_1",e[e.Index_signature_is_missing_in_type_0=2329]="Index_signature_is_missing_in_type_0",e[e._this_cannot_be_referenced_in_current_location=2332]="_this_cannot_be_referenced_in_current_location",e[e._super_can_only_be_referenced_in_a_derived_class=2335]="_super_can_only_be_referenced_in_a_derived_class",e[e.Property_0_does_not_exist_on_type_1=2339]="Property_0_does_not_exist_on_type_1",e[e.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures=2349]="Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures",e[e.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature=2351]="Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature",e[e.A_function_whose_declared_type_is_not_void_must_return_a_value=2355]="A_function_whose_declared_type_is_not_void_must_return_a_value",e[e.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access=2357]="The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access",e[e.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access=2364]="The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access",e[e.Operator_0_cannot_be_applied_to_types_1_and_2=2365]="Operator_0_cannot_be_applied_to_types_1_and_2",e[e._get_and_set_accessor_must_have_the_same_type=2380]="_get_and_set_accessor_must_have_the_same_type",e[e.Constructor_implementation_is_missing=2390]="Constructor_implementation_is_missing",e[e.Function_implementation_is_missing_or_not_immediately_following_the_declaration=2391]="Function_implementation_is_missing_or_not_immediately_following_the_declaration",e[e.Multiple_constructor_implementations_are_not_allowed=2392]="Multiple_constructor_implementations_are_not_allowed",e[e.Duplicate_function_implementation=2393]="Duplicate_function_implementation",e[e.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local=2395]="Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local",e[e.Type_0_has_no_property_1=2460]="Type_0_has_no_property_1",e[e.The_0_operator_cannot_be_applied_to_type_1=2469]="The_0_operator_cannot_be_applied_to_type_1",e[e.Export_declaration_conflicts_with_exported_declaration_of_0=2484]="Export_declaration_conflicts_with_exported_declaration_of_0",e[e.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property=2540]="Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property",e[e.The_target_of_an_assignment_must_be_a_variable_or_a_property_access=2541]="The_target_of_an_assignment_must_be_a_variable_or_a_property_access",e[e.Index_signature_in_type_0_only_permits_reading=2542]="Index_signature_in_type_0_only_permits_reading",e[e.Expected_0_arguments_but_got_1=2554]="Expected_0_arguments_but_got_1",e[e.Expected_at_least_0_arguments_but_got_1=2555]="Expected_at_least_0_arguments_but_got_1",e[e.Expected_0_type_arguments_but_got_1=2558]="Expected_0_type_arguments_but_got_1",e[e.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums=2651]="A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums",e[e.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration=2673]="Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration",e[e.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration=2674]="Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration",e[e.Namespace_0_has_no_exported_member_1=2694]="Namespace_0_has_no_exported_member_1",e[e.File_0_not_found=6054]="File_0_not_found",e[e.Numeric_separators_are_not_allowed_here=6188]="Numeric_separators_are_not_allowed_here",e[e.Multiple_consecutive_numeric_separators_are_not_permitted=6189]="Multiple_consecutive_numeric_separators_are_not_permitted"}(t.DiagnosticCode||(t.DiagnosticCode={})),t.diagnosticCodeToString=function(e){switch(e){case 100:return"Operation not supported.";case 101:return"Operation is unsafe.";case 200:return"Conversion from type '{0}' to '{1}' requires an explicit cast.";case 201:return"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.";case 202:return"Type '{0}' cannot be changed to type '{1}'.";case 203:return"Type '{0}' cannot be reinterpreted as type '{1}'.";case 204:return"Basic type '{0}' cannot be nullable.";case 205:return"Cannot export a mutable global.";case 206:return"Compiling constant with non-constant initializer as mutable.";case 207:return"Unmanaged classes cannot extend managed classes and vice-versa.";case 208:return"Unmanaged classes cannot implement interfaces.";case 209:return"Invalid regular expression flags.";case 210:return"Implementation '{0}' must match the signature '{1}'.";case 211:return"Class '{0}' is sealed and cannot be extended.";case 212:return"Decorator '{0}' is not valid here.";case 213:return"Duplicate decorator.";case 214:return"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.";case 215:return"Optional parameter must have an initializer.";case 216:return"Constructor of class '{0}' must not require any arguments.";case 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 1061:return"Enum member must have initializer.";case 1036:return"Statements are not allowed in ambient contexts.";case 1039:return"Initializers are not allowed in ambient contexts.";case 1042:return"'{0}' modifier cannot be used here.";case 1047:return"A rest parameter cannot be optional.";case 1048:return"A rest parameter cannot have an initializer.";case 1049:return"A 'set' accessor must have exactly one parameter.";case 1052:return"A 'set' accessor parameter cannot have an initializer.";case 1054:return"A 'get' accessor cannot have parameters.";case 1092:return"Type parameters cannot appear on a constructor declaration.";case 1093:return"Type annotation cannot appear on a constructor declaration.";case 1094:return"An accessor cannot have type parameters.";case 1095:return"A 'set' accessor cannot have a return type annotation.";case 1098:return"Type parameter list cannot be empty.";case 1104:return"A 'continue' statement can only be used within an enclosing iteration statement.";case 1105:return"A 'break' statement can only be used within an enclosing iteration or switch statement.";case 1108:return"A 'return' statement can only be used within a function body.";case 1109:return"Expression expected.";case 1110:return"Type expected.";case 1113:return"A 'default' clause cannot appear more than once in a 'switch' statement.";case 1114:return"Duplicate label '{0}'.";case 1121:return"Octal literals are not allowed in strict mode.";case 1124:return"Digit expected.";case 1125:return"Hexadecimal digit expected.";case 1126:return"Unexpected end of text.";case 1127:return"Invalid character.";case 1130:return"'case' or 'default' expected.";case 1038:return"A 'declare' modifier cannot be used in an already ambient context.";case 1140:return"Type argument expected.";case 1141:return"String literal expected.";case 1142:return"Line break not permitted here.";case 1146:return"Declaration expected.";case 1155:return"'const' declarations must be initialized.";case 1161:return"Unterminated regular expression literal.";case 1176:return"Interface declaration cannot have 'implements' clause.";case 1177:return"Binary digit expected.";case 1178:return"Octal digit expected.";case 1183:return"An implementation cannot be declared in ambient contexts.";case 1198:return"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.";case 1199:return"Unterminated Unicode escape sequence.";case 1206:return"Decorators are not valid here.";case 1242:return"'abstract' modifier can only appear on a class, method, or property declaration.";case 1245:return"Method '{0}' cannot have an implementation because it is marked abstract.";case 1311:return"A class may only extend another class.";case 1317:return"A parameter property cannot be declared using a rest parameter.";case 2300:return"Duplicate identifier '{0}'.";case 2304:return"Cannot find name '{0}'.";case 2305:return"Module '{0}' has no exported member '{1}'.";case 2314:return"Generic type '{0}' requires {1} type argument(s).";case 2315:return"Type '{0}' is not generic.";case 2322:return"Type '{0}' is not assignable to type '{1}'.";case 2329:return"Index signature is missing in type '{0}'.";case 2332:return"'this' cannot be referenced in current location.";case 2335:return"'super' can only be referenced in a derived class.";case 2339:return"Property '{0}' does not exist on type '{1}'.";case 2349:return"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.";case 2351:return"Cannot use 'new' with an expression whose type lacks a construct signature.";case 2355:return"A function whose declared type is not 'void' must return a value.";case 2357:return"The operand of an increment or decrement operator must be a variable or a property access.";case 2364:return"The left-hand side of an assignment expression must be a variable or a property access.";case 2365:return"Operator '{0}' cannot be applied to types '{1}' and '{2}'.";case 2380:return"'get' and 'set' accessor must have the same type.";case 2390:return"Constructor implementation is missing.";case 2391:return"Function implementation is missing or not immediately following the declaration.";case 2392:return"Multiple constructor implementations are not allowed.";case 2393:return"Duplicate function implementation.";case 2395:return"Individual declarations in merged declaration '{0}' must be all exported or all local.";case 2460:return"Type '{0}' has no property '{1}'.";case 2469:return"The '{0}' operator cannot be applied to type '{1}'.";case 2484:return"Export declaration conflicts with exported declaration of '{0}'.";case 2540:return"Cannot assign to '{0}' because it is a constant or a read-only property.";case 2541:return"The target of an assignment must be a variable or a property access.";case 2542:return"Index signature in type '{0}' only permits reading.";case 2554:return"Expected {0} arguments, but got {1}.";case 2555:return"Expected at least {0} arguments, but got {1}.";case 2558:return"Expected {0} type arguments, but got {1}.";case 2651:return"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.";case 2673:return"Constructor of class '{0}' is private and only accessible within the class declaration.";case 2674:return"Constructor of class '{0}' is protected and only accessible within the class declaration.";case 2694:return"Namespace '{0}' has no exported member '{1}'.";case 6054:return"File '{0}' not found.";case 6188:return"Numeric separators are not allowed here.";case 6189:return"Multiple consecutive numeric separators are not permitted.";default:return""}}},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}};Object.defineProperty(t,"__esModule",{value:!0});var a,s=r(23),o=r(1),c=r(4),p=r(0),l=r(5),u=r(8),h=r(2),d=r(6),_=r(3);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(a=t.Target||(t.Target={}));var m=function(){function e(){this.target=a.WASM32,this.noTreeShaking=!1,this.noAssert=!1,this.importMemory=!1,this.importTable=!1,this.sourceMap=!1,this.memoryBase=0,this.globalAliases=null,this.features=0,this.optimizeLevelHint=0,this.shrinkLevelHint=0}return Object.defineProperty(e.prototype,"isWasm64",{get:function(){return this.target==a.WASM64},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"usizeType",{get:function(){return this.target==a.WASM64?d.Type.usize64:d.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==a.WASM64?d.Type.isize64:d.Type.isize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nativeSizeType",{get:function(){return this.target==a.WASM64?c.NativeType.I64:c.NativeType.I32},enumerable:!0,configurable:!0}),e.prototype.hasFeature=function(e){return 0!=(this.features&e)},e}();t.Options=m,function(e){e[e.NONE=0]="NONE",e[e.SIGN_EXTENSION=1]="SIGN_EXTENSION",e[e.MUTABLE_GLOBAL=2]="MUTABLE_GLOBAL"}(t.Feature||(t.Feature={})),function(e){e[e.NONE=0]="NONE",e[e.IMPLICIT=1]="IMPLICIT",e[e.EXPLICIT=2]="EXPLICIT"}(t.ConversionKind||(t.ConversionKind={})),function(e){e[e.NONE=0]="NONE",e[e.WRAP=1]="WRAP"}(t.WrapMode||(t.WrapMode={}));var y,g,E=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.currentOuterFunction=null,n.currentInlineFunctions=[],n.currentEnum=null,n.currentType=d.Type.void,n.memorySegments=[],n.stringSegments=new Map,n.functionTable=[],n.argcVar=0,n.argcSet=0,n.f32ModInstance=null,n.f64ModInstance=null,n.f32PowInstance=null,n.f64PowInstance=null,n.program=t,n.resolver=t.resolver,r||(r=new m),n.options=r,n.memoryOffset=i64_new(max(r.memoryBase,8)),n.module=c.Module.create(),n}return n(t,e),t.compile=function(e,r){return void 0===r&&(r=null),new t(e,r).compile()},t.prototype.compile=function(){var e=this.options,t=this.module,r=this.program;r.initialize(e);var n=new l.Function(r.startFunction,"start",new d.Signature([],d.Type.void));this.startFunctionInstance=n;var i=new Array;this.startFunctionBody=i,this.currentFunction=n;for(var a=r.sources,s=0,o=a.length;s"),!1;e.type=this.currentType}else assert(!1);if(e.is(p.CommonFlags.AMBIENT|p.CommonFlags.BUILTIN))return!0;var a=e.type.toNativeType(),s=e.isAny(p.CommonFlags.CONST)||e.is(p.CommonFlags.STATIC|p.CommonFlags.READONLY);if(e.is(p.CommonFlags.AMBIENT))return s||this.options.hasFeature(2)?(e.set(p.CommonFlags.MODULE_IMPORT),r?f(e,r,e.parent):(y="env",g=e.simpleName),t.addGlobalImport(e.internalName,y,g,a),e.set(p.CommonFlags.COMPILED),!0):(this.error(o.DiagnosticCode.Operation_not_supported,assert(r).range),!1);var l=!1;e.is(p.CommonFlags.INLINED)?n=this.compileInlineConstant(e,e.type,!0):r&&r.initializer?(n||(n=this.compileExpression(r.initializer,e.type,1,1)),c.getExpressionId(n)!=c.ExpressionId.Const&&(s?(n=this.precomputeExpressionRef(n),c.getExpressionId(n)!=c.ExpressionId.Const&&(this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,r.range),l=!0)):l=!0)):n=e.type.toNativeZero(t);var u=e.internalName;if(l)t.addGlobal(u,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(u,n));else if(s){switch(c.getExpressionType(n)){case c.NativeType.I32:e.constantValueKind=1,e.constantIntegerValue=i64_new(c.getConstValueI32(n),0);break;case c.NativeType.I64:e.constantValueKind=1,e.constantIntegerValue=i64_new(c.getConstValueI64Low(n),c.getConstValueI64High(n));break;case c.NativeType.F32:e.constantValueKind=2,e.constantFloatValue=c.getConstValueF32(n);break;case c.NativeType.F64:e.constantValueKind=2,e.constantFloatValue=c.getConstValueF64(n);break;default:return assert(!1),!1}e.set(p.CommonFlags.INLINED),e.is(p.CommonFlags.MODULE_EXPORT)?(t.addGlobal(u,a,!1,n),t.addGlobalExport(u,T(e))):r&&r.isTopLevel&&t.addGlobal(u,a,!1,n)}else t.addGlobal(u,a,!s,n);return!0},t.prototype.compileEnumDeclaration=function(e){var t=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(t.kind==l.ElementKind.ENUM),this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){var t,r;if(e.is(p.CommonFlags.COMPILED))return!0;e.set(p.CommonFlags.COMPILED);var n=this.module;this.currentEnum=e;var a=null;if(e.members)try{for(var s=i(e.members.values()),u=s.next();!u.done;u=s.next()){var h=u.value;if(h.kind==l.ElementKind.ENUMVALUE){var _=!1,m=h,y=m.declaration;if(m.set(p.CommonFlags.COMPILED),m.is(p.CommonFlags.INLINED))e.declaration.isTopLevelExport&&n.addGlobal(m.internalName,c.NativeType.I32,!1,n.createI32(m.constantValue));else{var g=void 0;y.value?(g=this.compileExpression(y.value,d.Type.i32,1,0),c.getExpressionId(g)!=c.ExpressionId.Const&&(g=this.precomputeExpressionRef(g),c.getExpressionId(g)!=c.ExpressionId.Const&&(e.is(p.CommonFlags.CONST)&&this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),_=!0))):null==a?g=n.createI32(0):a.is(p.CommonFlags.INLINED)?g=n.createI32(a.constantValue+1):(g=n.createBinary(c.BinaryOp.AddI32,n.createGetGlobal(a.internalName,c.NativeType.I32),n.createI32(1)),e.is(p.CommonFlags.CONST)&&this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),_=!0),_?(n.addGlobal(m.internalName,c.NativeType.I32,!0,n.createI32(0)),this.startFunctionBody.push(n.createSetGlobal(m.internalName,g))):(n.addGlobal(m.internalName,c.NativeType.I32,!1,g),c.getExpressionType(g)==c.NativeType.I32?(m.constantValue=c.getConstValueI32(g),m.set(p.CommonFlags.INLINED)):(assert(!1),m.constantValue=0))}a=m,e.is(p.CommonFlags.MODULE_EXPORT)&&(h.is(p.CommonFlags.INLINED)||this.options.hasFeature(2)?n.addGlobalExport(h.internalName,T(h)):y&&this.warning(o.DiagnosticCode.Cannot_export_a_mutable_global,y.range))}}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}return this.currentEnum=null,!0},t.prototype.compileFunctionDeclaration=function(e,t,r){void 0===r&&(r=null);var n=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(n.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.compileFunctionUsingTypeArguments(n,t,r,null,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n,i){var a=this.resolver.resolveFunctionInclTypeArguments(e,t,r,i);return a?(a.outerScope=n,this.compileFunction(a)?a:null):null},t.prototype.ensureFunctionType=function(e,t,r){void 0===r&&(r=null);var n,i=e?e.length:0,a=0;if(r?((n=new Array(1+i))[0]=r.toNativeType(),a=1):n=new Array(i),e)for(var s=0;s=0)return e.functionTableIndex;var t=this.functionTable,r=t.length;return!e.is(p.CommonFlags.TRAMPOLINE)&&e.signature.requiredParameters=0?"case"+h.toString(10):"break")+"|"+a);var y=t.createBlock("case0|"+a,l,c.NativeType.None),g=!0,E=!0,T=!0,f=!0;for(_=0;_=0&&(g&&s.set(1),E&&s.set(2),T&&s.set(4),f&&s.set(32)),y},t.prototype.compileThrowStatement=function(e){var t=this.currentFunction.flow;return t.set(4),t.set(1),s.compileAbort(this,null,e)},t.prototype.compileTryStatement=function(e){return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileVariableStatement=function(e,t){void 0===t&&(t=!1);var r=this.program,n=this.currentFunction,i=e.declarations,a=i.length;if(t||n==this.startFunctionInstance&&e.parent&&e.parent.kind==h.NodeKind.SOURCE){for(var s=0;s");continue}E=this.currentType}var f=!1;if(y.is(p.CommonFlags.CONST))if(T)if(T=this.precomputeExpressionRef(T),c.getExpressionId(T)==c.ExpressionId.Const){var I=new l.Local(r,g,-1,E);switch(c.getExpressionType(T)){case c.NativeType.I32:I=I.withConstantIntegerValue(i64_new(c.getConstValueI32(T),0));break;case c.NativeType.I64:I=I.withConstantIntegerValue(i64_new(c.getConstValueI64Low(T),c.getConstValueI64High(T)));break;case c.NativeType.F32:I=I.withConstantFloatValue(c.getConstValueF32(T));break;case c.NativeType.F64:I=I.withConstantFloatValue(c.getConstValueF64(T));break;default:return assert(!1),this.module.createUnreachable()}var v=n.flow.scopedLocals;if(v){if(v.has(g))return this.error(o.DiagnosticCode.Duplicate_identifier_0,y.name.range,g),this.module.createUnreachable()}else n.flow.scopedLocals=v=new Map;v.set(g,I),f=!0}else this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range);else this.error(o.DiagnosticCode._const_declarations_must_be_initialized,y.range);if(!f){I=void 0;I=y.isAny(p.CommonFlags.LET|p.CommonFlags.CONST)||_.is(2048)?_.addScopedLocal(E,g,!1,y):n.addLocal(E,g,y),T?(u.push(this.compileAssignmentWithValue(y.name,T)),I.type.is(36)&&_.setLocalWrapped(I.index,!_.canOverflow(T,E))):I.type.is(36)&&_.setLocalWrapped(I.index,!0)}}return u.length?1==u.length?u[0]:this.module.createBlock(null,u,c.NativeType.None):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,d.Type.void,2,0)},t.prototype.compileWhileStatement=function(e){var t=this.module,r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var n=this.precomputeExpressionRef(r);if(c.getExpressionId(n)==c.ExpressionId.Const&&c.getExpressionType(n)==c.NativeType.I32){if(!c.getConstValueI32(n))return t.createNop()}else r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType)}var i=this.currentFunction,a=i.enterBreakContext(),s=i.flow,o=s.fork();i.flow=o;var l="break|"+a;o.breakLabel=l;var u="continue|"+a;o.continueLabel=u;var h=this.compileStatement(e.statement),_=o.isAny(29);return i.flow=o.free(),i.leaveBreakContext(),o.unset(792),s.inheritConditional(o),t.createBlock(l,[t.createLoop(u,t.createIf(r,_?h:t.createBlock(null,[h,t.createBreak(u)],c.NativeType.None)))],c.NativeType.None)},t.prototype.compileInlineConstant=function(e,t,r){assert(e.is(p.CommonFlags.INLINED));var n=e.type;switch(!r&&n.is(4)&&t.is(4)&&n.size>i:0);case 5:case 6:case 10:var a=e.type.computeSmallIntegerMask(d.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&a:0);case 2:case 7:return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 4:case 9:if(!e.program.options.isWasm64)return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 3:case 8:return 1==e.constantValueKind?this.module.createI64(i64_low(e.constantIntegerValue),i64_high(e.constantIntegerValue)):this.module.createI64(0);case 12:if(!e.is(p.CommonFlags.BUILTIN)||t!=d.Type.f32)return this.module.createF64(e.constantFloatValue);this.currentType=d.Type.f32;case 11:return this.module.createF32(e.constantFloatValue);default:return assert(!1),this.module.createUnreachable()}},t.prototype.compileExpression=function(e,t,r,n){var i;switch(this.currentType=t,e.kind){case h.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case h.NodeKind.BINARY:i=this.compileBinaryExpression(e,t);break;case h.NodeKind.CALL:i=this.compileCallExpression(e,t);break;case h.NodeKind.COMMA:i=this.compileCommaExpression(e,t);break;case h.NodeKind.ELEMENTACCESS:i=this.compileElementAccessExpression(e,t);break;case h.NodeKind.FUNCTION:i=this.compileFunctionExpression(e,t);break;case h.NodeKind.IDENTIFIER:case h.NodeKind.FALSE:case h.NodeKind.NULL:case h.NodeKind.THIS:case h.NodeKind.SUPER:case h.NodeKind.TRUE:i=this.compileIdentifierExpression(e,t,0==r);break;case h.NodeKind.INSTANCEOF:i=this.compileInstanceOfExpression(e,t);break;case h.NodeKind.LITERAL:i=this.compileLiteralExpression(e,t);break;case h.NodeKind.NEW:i=this.compileNewExpression(e,t);break;case h.NodeKind.PARENTHESIZED:i=this.compileParenthesizedExpression(e,t);break;case h.NodeKind.PROPERTYACCESS:i=this.compilePropertyAccessExpression(e,t,0==r);break;case h.NodeKind.TERNARY:i=this.compileTernaryExpression(e,t);break;case h.NodeKind.UNARYPOSTFIX:i=this.compileUnaryPostfixExpression(e,t);break;case h.NodeKind.UNARYPREFIX:i=this.compileUnaryPrefixExpression(e,t);break;default:this.error(o.DiagnosticCode.Operation_not_supported,e.range),i=this.module.createUnreachable()}var a=this.currentType;return 0!=r&&a!=t?(i=this.convertExpression(i,a,t,r,n,e),this.currentType=t):1==n&&(i=this.ensureSmallIntegerWrap(i,a)),this.options.sourceMap&&this.addDebugLocation(i,e.range),i},t.prototype.compileExpressionRetainType=function(e,t,r){return this.compileExpression(e,t==d.Type.void?d.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r,n){return this.precomputeExpressionRef(this.compileExpression(e,t,r,n))},t.prototype.precomputeExpressionRef=function(e){var t=this.module,r=this.currentType.toNativeType(),n=t.addTemporaryFunction(r,null,e);t.runPasses(["precompute"],n);var i=c.getFunctionBody(n);return t.removeTemporaryFunction(),i},t.prototype.convertExpression=function(e,t,r,n,i,a){assert(0!=n);var s=this.module;return 13==t.kind?(assert(13!=r.kind),this.error(o.DiagnosticCode.Type_0_is_not_assignable_to_type_1,a.range,t.toString(),r.toString()),s.createUnreachable()):13==r.kind?s.createDrop(e):(t.isAssignableTo(r)||1==n&&this.error(o.DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,a.range,t.toString(),r.toString()),t.is(8)?r.is(8)?11==t.kind?12==r.kind&&(e=s.createUnary(c.UnaryOp.PromoteF32,e)):11==r.kind&&(e=s.createUnary(c.UnaryOp.DemoteF64,e)):r.is(4)?e=11==t.kind?r.is(1)?r.is(64)?s.createUnary(c.UnaryOp.TruncF32ToI64,e):s.createUnary(c.UnaryOp.TruncF32ToI32,e):r.is(64)?s.createUnary(c.UnaryOp.TruncF32ToU64,e):s.createUnary(c.UnaryOp.TruncF32ToU32,e):r.is(1)?r.is(64)?s.createUnary(c.UnaryOp.TruncF64ToI64,e):s.createUnary(c.UnaryOp.TruncF64ToI32,e):r.is(64)?s.createUnary(c.UnaryOp.TruncF64ToU64,e):s.createUnary(c.UnaryOp.TruncF64ToU32,e):(assert(0==r.flags,"void type expected"),e=s.createDrop(e)):t.is(4)&&r.is(8)?e=11==r.kind?t.is(64)?s.createUnary(t.is(1)?c.UnaryOp.ConvertI64ToF32:c.UnaryOp.ConvertU64ToF32,e):s.createUnary(t.is(1)?c.UnaryOp.ConvertI32ToF32:c.UnaryOp.ConvertU32ToF32,e):t.is(64)?s.createUnary(t.is(1)?c.UnaryOp.ConvertI64ToF64:c.UnaryOp.ConvertU64ToF64,e):s.createUnary(t.is(1)?c.UnaryOp.ConvertI32ToF64:c.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=s.createUnary(c.UnaryOp.WrapI64,e)):r.is(64)?(e=s.createUnary(r.is(1)?c.UnaryOp.ExtendI32:c.UnaryOp.ExtendU32,this.ensureSmallIntegerWrap(e,t)),i=0):t.is(32)&&t.size",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.GtI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.GtI64:c.BinaryOp.GtI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.GtI64,r,i);break;case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.GtU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.GtU64:c.BinaryOp.GtU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.GtU64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.GtF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.GtF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.LESSTHAN_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.LE)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!0)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"<=",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.LeI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.LeI64:c.BinaryOp.LeI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.LeI64,r,i);break;case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.LeU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.LeU64:c.BinaryOp.LeU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.LeU64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.LeF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.LeF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.GREATERTHAN_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.GE)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!0)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,">=",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.GeI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.GeI64:c.BinaryOp.GeI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.GeI64,r,i);break;case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.GeU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.GeU64:c.BinaryOp.GeU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.GeU64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.GeF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.GeF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EQUALS_EQUALS_EQUALS:case u.Token.EQUALS_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,g==u.Token.EQUALS_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.EQ)){p=this.compileBinaryOverload(v,_,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.EqI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.EqI64:c.BinaryOp.EqI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.EqI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.EqF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.EqF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EXCLAMATION_EQUALS_EQUALS:case u.Token.EXCLAMATION_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,g==u.Token.EXCLAMATION_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.NE)){p=this.compileBinaryOverload(v,_,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:p=h.createBinary(c.BinaryOp.NeI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.NeI64:c.BinaryOp.NeI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.NeI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.NeF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.NeF64,r,i);break;default:assert(!1),p=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EQUALS:return this.compileAssignment(_,m,t);case u.Token.PLUS_EQUALS:y=!0;case u.Token.PLUS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.ADD)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"+",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:p=h.createBinary(c.BinaryOp.AddI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.AddI64:c.BinaryOp.AddI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.AddI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.AddF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.AddF64,r,i);break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.MINUS_EQUALS:y=!0;case u.Token.MINUS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.SUB)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"-",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:p=h.createBinary(c.BinaryOp.SubI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.SubI64:c.BinaryOp.SubI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.SubI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.SubF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.SubF64,r,i);break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.ASTERISK_EQUALS:y=!0;case u.Token.ASTERISK:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.MUL)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"*",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:p=h.createBinary(c.BinaryOp.MulI32,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.MulI64:c.BinaryOp.MulI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.MulI64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.MulF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.MulF64,r,i);break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.ASTERISK_ASTERISK_EQUALS:y=!0;case u.Token.ASTERISK_ASTERISK:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.POW)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var E=void 0;if(11==this.currentType.kind){if(i=this.compileExpression(m,d.Type.f32,1,0),a=this.currentType,!(E=this.f32PowInstance)){if(!(T=this.program.elementsLookup.get("Mathf"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),p=h.createUnreachable();break}if(!(f=T.members?T.members.get("pow"):null)){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),p=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=E=this.resolver.resolveFunction(f,null)}}else if(r=this.convertExpression(r,this.currentType,d.Type.f64,1,0,_),n=this.currentType,i=this.compileExpression(m,d.Type.f64,1,0),a=this.currentType,!(E=this.f64PowInstance)){if(!(T=this.program.elementsLookup.get("Math"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),p=h.createUnreachable();break}if(!(f=T.members?T.members.get("pow"):null)){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),p=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=E=this.resolver.resolveFunction(f,null)}p=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):h.createUnreachable();break;case u.Token.SLASH_EQUALS:y=!0;case u.Token.SLASH:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.DIV)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"/",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.DivI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.DivI64:c.BinaryOp.DivI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.DivI64,r,i);break;case 5:case 6:case 10:case 7:p=h.createBinary(c.BinaryOp.DivU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.DivU64:c.BinaryOp.DivU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.DivU64,r,i);break;case 11:p=h.createBinary(c.BinaryOp.DivF32,r,i);break;case 12:p=h.createBinary(c.BinaryOp.DivF64,r,i);break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.PERCENT_EQUALS:y=!0;case u.Token.PERCENT:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.REM)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"%",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.RemI32,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.RemI64:c.BinaryOp.RemI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.RemI64,r,i);break;case 5:case 6:case 10:case 7:p=h.createBinary(c.BinaryOp.RemU32,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.RemU64:c.BinaryOp.RemU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.RemU64,r,i);break;case 11:if(!(E=this.f32ModInstance)){if(!(T=this.program.elementsLookup.get("Mathf"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),p=h.createUnreachable();break}if(!(f=T.members?T.members.get("mod"):null)){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),p=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=E=this.resolver.resolveFunction(f,null)}p=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):h.createUnreachable();break;case 12:if(!(E=this.f64ModInstance)){var T,f;if(!(T=this.program.elementsLookup.get("Math"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),p=h.createUnreachable();break}if(!(f=T.members?T.members.get("mod"):null)){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),p=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=E=this.resolver.resolveFunction(f,null)}p=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):h.createUnreachable();break;default:assert(!1),p=h.createUnreachable()}break;case u.Token.LESSTHAN_LESSTHAN_EQUALS:y=!0;case u.Token.LESSTHAN_LESSTHAN:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_SHL)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:p=h.createBinary(c.BinaryOp.ShlI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.ShlI64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.ShlI64:c.BinaryOp.ShlI32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_EQUALS:y=!0;case u.Token.GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_SHR)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType,this.currentType.kind){case 0:case 1:case 2:p=h.createBinary(c.BinaryOp.ShrI32,r,i);break;case 3:p=h.createBinary(c.BinaryOp.ShrI64,r,i);break;case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.ShrI64:c.BinaryOp.ShrI32,r,i);break;case 5:case 6:case 10:case 7:p=h.createBinary(c.BinaryOp.ShrU32,r,i);break;case 8:p=h.createBinary(c.BinaryOp.ShrU64,r,i);break;case 9:p=h.createBinary(this.options.isWasm64?c.BinaryOp.ShrU64:c.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:y=!0;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_SHR_U)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 5:case 6:case 10:p=h.createBinary(c.BinaryOp.ShrU32,r,i);case 0:case 1:case 2:case 7:p=h.createBinary(c.BinaryOp.ShrU32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.ShrU64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.ShrU64:c.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.AMPERSAND_EQUALS:y=!0;case u.Token.AMPERSAND:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_AND)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"&",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 10:case 7:p=h.createBinary(c.BinaryOp.AndI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.AndI64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.AndI64:c.BinaryOp.AndI32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.BAR_EQUALS:y=!0;case u.Token.BAR:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_OR)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"|",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:p=h.createBinary(c.BinaryOp.OrI32,r,i);break;case 2:case 7:p=h.createBinary(c.BinaryOp.OrI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.OrI64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.OrI64:c.BinaryOp.OrI32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.CARET_EQUALS:y=!0;case u.Token.CARET:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){var I,v;if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_XOR)){p=this.compileBinaryOverload(v,_,r,m,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(o.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"^",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:p=h.createBinary(c.BinaryOp.XorI32,r,i);break;case 2:case 7:p=h.createBinary(c.BinaryOp.XorI32,r,i);break;case 3:case 8:p=h.createBinary(c.BinaryOp.XorI64,r,i);break;case 9:case 4:p=h.createBinary(this.options.isWasm64?c.BinaryOp.XorI64:c.BinaryOp.XorI32,r,i);break;case 11:case 12:return this.error(o.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),p=h.createUnreachable()}break;case u.Token.AMPERSAND_AMPERSAND:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,p=h.cloneExpression(r,!0,0))this.makeIsTrueish(r,this.currentType),p=h.createIf(this.makeIsTrueish(r,this.currentType),i,p);else{var A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));p=h.createIf(this.makeIsTrueish(h.createTeeLocal(C.index,r),this.currentType),i,h.createGetLocal(assert(C).index,this.currentType.toNativeType()))}break;case u.Token.BAR_BAR:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,p=this.module.cloneExpression(r,!0,0))p=this.module.createIf(this.makeIsTrueish(r,this.currentType),p,i);else{A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));p=h.createIf(this.makeIsTrueish(h.createTeeLocal(C.index,r),this.currentType),h.createGetLocal(assert(C).index,this.currentType.toNativeType()),i)}break;default:assert(!1),p=this.module.createUnreachable()}return y?this.compileAssignmentWithValue(_,p,t!=d.Type.void):p},t.prototype.compileUnaryOverload=function(e,t,r,n){var i,a=0;return e.is(p.CommonFlags.INSTANCE)?(a=r,i=[]):i=[t],this.compileCallDirect(e,i,n,a,e.hasDecorator(l.DecoratorFlags.INLINE))},t.prototype.compileBinaryOverload=function(e,t,r,n,i){var a,s=0;if(e.is(p.CommonFlags.INSTANCE)){var o=assert(e.parent);assert(o.kind==l.ElementKind.CLASS),s=r,a=[n]}else a=[t,n];return this.compileCallDirect(e,a,i,s,e.hasDecorator(l.DecoratorFlags.INLINE))},t.prototype.compileAssignment=function(e,t,r){var n,i=this.program.resolver,a=this.currentFunction,s=i.resolveExpression(e,a);if(!s)return this.module.createUnreachable();switch(s.kind){case l.ElementKind.GLOBAL:if(!this.compileGlobal(s))return this.module.createUnreachable();assert(s.type!=d.Type.void);case l.ElementKind.LOCAL:case l.ElementKind.FIELD:n=s.type;break;case l.ElementKind.PROPERTY:var c=s.setterPrototype;if(c){var p=this.resolver.resolveFunction(c,null);if(!p)return this.module.createUnreachable();assert(1==p.signature.parameterTypes.length),n=p.signature.parameterTypes[0];break}return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,s.internalName),this.module.createUnreachable();case l.ElementKind.CLASS:if(i.currentElementExpression){var u=a.flow.is(4096),h=s.lookupOverload(l.OperatorKind.INDEXED_SET,u);if(!h)return s.lookupOverload(l.OperatorKind.INDEXED_GET,u)?this.error(o.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,s.internalName):this.error(o.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,s.internalName),this.module.createUnreachable();assert(2==h.signature.parameterTypes.length),n=h.signature.parameterTypes[1];break}default:return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}assert(n!=d.Type.void);var _=this.compileExpression(t,n,1,0);return this.compileAssignmentWithValue(e,_,r!=d.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.resolver.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();switch(i.kind){case l.ElementKind.LOCAL:var a=i.type;if(assert(a!=d.Type.void),this.currentType=r?a:d.Type.void,i.is(p.CommonFlags.CONST))return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var s=this.currentFunction.flow;return a.is(36)&&s.setLocalWrapped(i.index,!s.canOverflow(t,a)),r?n.createTeeLocal(i.index,t):n.createSetLocal(i.index,t);case l.ElementKind.GLOBAL:if(!this.compileGlobal(i))return n.createUnreachable();a=i.type;if(assert(a!=d.Type.void),this.currentType=r?a:d.Type.void,i.is(p.CommonFlags.CONST))return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();if(t=this.ensureSmallIntegerWrap(t,a),r){var c=a.toNativeType(),u=i.internalName;return n.createBlock(null,[n.createSetGlobal(u,t),n.createGetGlobal(u,c)],c)}return n.createSetGlobal(i.internalName,t);case l.ElementKind.FIELD:var h=i.declaration;if(i.is(p.CommonFlags.READONLY)&&!this.currentFunction.is(p.CommonFlags.CONSTRUCTOR)&&null!=h&&null==h.initializer)return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var _=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0);a=i.type;this.currentType=r?a:d.Type.void;c=a.toNativeType();if(10==a.kind&&(t=this.ensureSmallIntegerWrap(t,a)),r){s=(L=this.currentFunction).flow;var y=L.getAndFreeTempLocal(a,!s.canOverflow(t,a)).index;return n.createBlock(null,[n.createSetLocal(y,t),n.createStore(a.byteSize,m,n.createGetLocal(y,c),c,i.memoryOffset),n.createGetLocal(y,c)],c)}return n.createStore(a.byteSize,m,t,c,i.memoryOffset);case l.ElementKind.PROPERTY:var g=i.setterPrototype;if(g){var E=this.resolver.resolveFunction(g,null);if(!E)return n.createUnreachable();if(!r){if(E.is(p.CommonFlags.INSTANCE)){_=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0);return this.makeCallDirect(E,[m,t])}return this.makeCallDirect(E,[t])}var T=i.getterPrototype;assert(null!=T);var f=this.resolver.resolveFunction(T,null);if(!f)return n.createUnreachable();var I=(R=f.signature.returnType).toNativeType();if(E.is(p.CommonFlags.INSTANCE)){_=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0),y=this.currentFunction.getAndFreeTempLocal(R,!1).index;return n.createBlock(null,[this.makeCallDirect(E,[n.createTeeLocal(y,m),t]),this.makeCallDirect(f,[n.createGetLocal(y,I)])],I)}return n.createBlock(null,[this.makeCallDirect(E,[t]),this.makeCallDirect(f)],I)}return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();case l.ElementKind.CLASS:var v=this.resolver.currentElementExpression;if(v){var A=this.currentFunction.flow.is(4096),C=i.lookupOverload(l.OperatorKind.INDEXED_GET,A);if(!C)return this.error(o.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.internalName),n.createUnreachable();var N=i.lookupOverload(l.OperatorKind.INDEXED_SET,A);if(!N)return this.error(o.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.internalName),this.currentType=r?C.signature.returnType:d.Type.void,n.createUnreachable();var O=i.type,S=(_=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0),this.compileExpression(v,d.Type.i32,1,0));if(r){var L,b=(L=this.currentFunction).getTempLocal(O,!1),k=L.getAndFreeTempLocal(this.currentType,!1),R=C.signature.returnType;return this.currentFunction.freeTempLocal(b),n.createBlock(null,[this.makeCallDirect(N,[n.createTeeLocal(b.index,m),n.createTeeLocal(k.index,S),t]),this.makeCallDirect(C,[n.createGetLocal(b.index,b.type.toNativeType()),n.createGetLocal(k.index,k.type.toNativeType())])],R.toNativeType())}return this.makeCallDirect(N,[m,S,t])}}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()},t.prototype.compileCallExpression=function(e,t){var r,n,i=this.module,a=this.currentFunction,s=this.resolver.resolveExpression(e.expression,a);if(!s)return i.createUnreachable();switch(s.kind){case l.ElementKind.FUNCTION_PROTOTYPE:var u=s,_=e.typeArguments;if(u.is(p.CommonFlags.AMBIENT|p.CommonFlags.BUILTIN))return this.compileCallExpressionBuiltin(u,e,t);var m=null;if(_){if(!u.is(p.CommonFlags.GENERIC))return this.error(o.DiagnosticCode.Type_0_is_not_generic,e.expression.range,u.internalName),i.createUnreachable();m=this.resolver.resolveFunctionInclTypeArguments(u,_,this.currentFunction.flow.contextualTypeArguments,e)}else{if(u.is(p.CommonFlags.GENERIC)){for(var y=new Map,g=assert(u.declaration.typeParameters),E=g.length,T=0;Ts&&!i)||(this.error(o.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,s.toString(),t.toString()),!1)},t.prototype.compileCallDirect=function(e,t,r,n,i){void 0===n&&(n=0),void 0===i&&(i=!1);var a=t.length,s=e.signature;if(!this.checkCallSignature(s,a,0!=n,r))return this.module.createUnreachable();if(i){if(assert(!e.is(p.CommonFlags.TRAMPOLINE)),!this.currentInlineFunctions.includes(e)){this.currentInlineFunctions.push(e);var c=this.compileCallInlineUnchecked(e,t,r,n);return this.currentInlineFunctions.pop(),c}this.warning(o.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 l.ElementKind.GLOBAL:if(!this.compileGlobal(E))return this.module.createUnreachable();var I=E.type;return assert(I!=d.Type.void),E.is(p.CommonFlags.INLINED)?this.compileInlineConstant(E,t,r):(this.currentType=I,this.module.createGetGlobal(E.internalName,I.toNativeType()));case l.ElementKind.ENUMVALUE:return E.is(p.CommonFlags.COMPILED)?(this.currentType=d.Type.i32,E.is(p.CommonFlags.INLINED)?this.module.createI32(E.constantValue):this.module.createGetGlobal(E.internalName,c.NativeType.I32)):(this.error(o.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,e.range),this.currentType=d.Type.i32,this.module.createUnreachable());case l.ElementKind.FUNCTION_PROTOTYPE:var v=this.resolver.resolveFunction(E,null,i.flow.contextualTypeArguments);if(!v||!this.compileFunction(v))return n.createUnreachable();var A=this.ensureFunctionTableEntry(v);return this.currentType=v.signature.type,this.module.createI32(A)}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileInstanceOfExpression=function(e,t){var r=this.module,n=this.compileExpressionRetainType(e.expression,this.options.usizeType,0),i=this.currentType,a=this.resolver.resolveType(e.isType);return this.currentType=d.Type.bool,a?i.is(512)&&!a.is(512)?i.nonNullableType.isAssignableTo(a)?r.createBinary(i.is(64)?c.BinaryOp.NeI64:c.BinaryOp.NeI32,n,i.toNativeZero(r)):r.createI32(0):r.createI32(i.isAssignableTo(a,!0)?1:0):r.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){void 0===r&&(r=!1);var n=this.module;switch(e.literalKind){case h.LiteralKind.ARRAY:assert(!r);var i=t.classReference;return i&&i.prototype==this.program.arrayPrototype?this.compileArrayLiteral(assert(i.typeArguments)[0],e.elementExpressions,e):(this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable());case h.LiteralKind.FLOAT:var a=e.value;return r&&(a=-a),t==d.Type.f32?n.createF32(a):(this.currentType=d.Type.f64,n.createF64(a));case h.LiteralKind.INTEGER:var s=e.value;switch(r&&(s=i64_sub(i64_new(0),s)),t.kind){case 0:if(i64_is_i8(s))return n.createI32(i64_low(s));break;case 5:if(i64_is_u8(s))return n.createI32(i64_low(s));break;case 1:if(i64_is_i16(s))return n.createI32(i64_low(s));break;case 6:if(i64_is_u16(s))return n.createI32(i64_low(s));break;case 2:if(i64_is_i32(s))return n.createI32(i64_low(s));break;case 7:if(i64_is_u32(s))return n.createI32(i64_low(s));break;case 10:if(i64_is_bool(s))return n.createI32(i64_low(s));break;case 4:if(!this.options.isWasm64){if(i64_is_i32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 9:if(!this.options.isWasm64){if(i64_is_u32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 3:case 8:return n.createI64(i64_low(s),i64_high(s));case 11:if(i64_is_f32(s))return n.createF32(i64_to_f32(s));break;case 12:if(i64_is_f64(s))return n.createF64(i64_to_f64(s));break;case 13:break;default:return assert(!1),n.createUnreachable()}return i64_is_i32(s)?(this.currentType=d.Type.i32,n.createI32(i64_low(s))):i64_is_u32(s)?(this.currentType=d.Type.u32,n.createI32(i64_low(s))):(this.currentType=d.Type.i64,n.createI64(i64_low(s),i64_high(s)));case h.LiteralKind.STRING:return assert(!r),this.compileStaticString(e.value);case h.LiteralKind.OBJECT:return assert(!r),this.compileObjectLiteral(e,t)}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,n.createUnreachable()},t.prototype.compileStaticString=function(e){var t=this.module,r=this.options,n=this.stringSegments,i=n.get(e);if(!i){var a=e.length,s=new Uint8Array(4+2*a);s[0]=255&a,s[1]=a>>>8&255,s[2]=a>>>16&255,s[3]=a>>>24&255;for(var o=0;o>>8&255;i=this.addMemorySegment(s,r.usizeType.byteSize),n.set(e,i)}var c=i.offset,p=this.program.typesLookup.get("string");return this.currentType=p||r.usizeType,r.isWasm64?t.createI64(i64_low(c),i64_high(c)):(assert(i64_is_i32(c)),t.createI32(i64_low(c)))},t.prototype.compileArrayLiteral=function(e,t,r){var n=!0,i=this.module,a=assert(this.program.arrayPrototype);if(!a||a.kind!=l.ElementKind.CLASS_PROTOTYPE)return i.createUnreachable();var s=this.resolver.resolveClass(a,[e]);if(!s)return i.createUnreachable();var p=s.type,u=t.length;if(u){var h=e.toNativeType(),d=void 0,m=void 0;switch(h){case c.NativeType.I32:d=changetype(new Int32Array(u)),m=4*u;break;case c.NativeType.I64:d=changetype(new Array(u)),m=8*u;break;case c.NativeType.F32:d=changetype(new Float32Array(u)),m=4*u;break;case c.NativeType.F64:d=changetype(new Float64Array(u)),m=8*u;break;default:return assert(!1),i.createUnreachable()}for(var y=new Array(u),g=void 0,E=0;E",t.toString()),r.createUnreachable();var i=n.constructorInstance;if(i){if(i.signature.requiredParameters)return this.error(o.DiagnosticCode.Constructor_of_class_0_must_not_require_any_arguments,e.range,n.toString()),r.createUnreachable();if(i.is(p.CommonFlags.PRIVATE))return this.error(o.DiagnosticCode.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,e.range,n.toString()),r.createUnreachable();if(i.is(p.CommonFlags.PROTECTED))return this.error(o.DiagnosticCode.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,e.range,n.toString()),r.createUnreachable()}var a=e.names,c=a.length,u=e.values,h=n.members,d=!1,_=new Array(c+2),m=this.currentFunction.getTempLocal(this.options.usizeType);assert(c==u.length);for(var y=0,g=c;y=0);var h=this.compileExpressionRetainType(u,this.options.usizeType,0);return this.currentType=i.type,n.createLoad(i.type.byteSize,i.type.is(5),h,i.type.toNativeType(),i.memoryOffset);case l.ElementKind.PROPERTY:var _=i.getterPrototype;if(_){var m=this.resolver.resolveFunction(_,null);if(!m)return n.createUnreachable();var y=m.signature;if(!this.checkCallSignature(y,0,m.is(p.CommonFlags.INSTANCE),e))return n.createUnreachable();var g=0!=(m.decoratorFlags&l.DecoratorFlags.INLINE);if(m.is(p.CommonFlags.INSTANCE)){s=assert(m.parent);assert(s.kind==l.ElementKind.CLASS);u=assert(this.resolver.currentThisExpression),h=this.compileExpressionRetainType(u,this.options.usizeType,0);return this.currentType=y.returnType,this.compileCallDirect(m,[],e,h,g)}return this.currentType=y.returnType,this.compileCallDirect(m,[],e,0,g)}return this.error(o.DiagnosticCode.Property_0_does_not_exist_on_type_1,e.range,i.simpleName,i.parent.toString()),n.createUnreachable()}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()},t.prototype.compileTernaryExpression=function(e,t){var r=e.ifThen,n=e.ifElse,i=this.currentFunction,a=i.flow,s=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var l=this.precomputeExpressionRef(s);if(c.getExpressionId(l)==c.ExpressionId.Const&&c.getExpressionType(l)==c.NativeType.I32)return c.getConstValueI32(l)?this.compileExpressionRetainType(r,t,0):this.compileExpressionRetainType(n,t,0);s=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType)}var u=a.fork();i.flow=u;var h=this.compileExpressionRetainType(r,t,0),_=this.currentType;u.free();var m=a.fork();i.flow=m;var y=this.compileExpressionRetainType(n,t,0),g=this.currentType;i.flow=m.free(),a.inheritMutual(u,m);var E=d.Type.commonCompatible(_,g,!1);return E?(h=this.convertExpression(h,_,E,1,0,r),y=this.convertExpression(y,g,E,1,0,n),this.currentType=E,this.module.createIf(s,h,y)):(this.error(o.DiagnosticCode.Type_0_is_not_assignable_to_type_1,e.range,_.toString(),g.toString()),this.currentType=t,this.module.createUnreachable())},t.prototype.compileUnaryPostfixExpression=function(e,t){var r=this.module,n=this.currentFunction,i=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0);if(c.getExpressionId(i)==c.ExpressionId.Unreachable)return i;var a,s,p,l=this.currentType;switch(e.operator){case u.Token.PLUS_PLUS:if(this.currentType.is(256))return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(l.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=c.BinaryOp.AddI32,s=c.NativeType.I32,p=r.createI32(1);break;case 9:case 4:a=(h=this.options).isWasm64?c.BinaryOp.AddI64:c.BinaryOp.AddI32,s=h.nativeSizeType,p=l.toNativeOne(r);break;case 3:case 8:a=c.BinaryOp.AddI64,s=c.NativeType.I64,p=r.createI64(1);break;case 11:a=c.BinaryOp.AddF32,s=c.NativeType.F32,p=r.createF32(1);break;case 12:a=c.BinaryOp.AddF64,s=c.NativeType.F64,p=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;case u.Token.MINUS_MINUS:if(this.currentType.is(256))return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(l.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=c.BinaryOp.SubI32,s=c.NativeType.I32,p=r.createI32(1);break;case 9:case 4:var h;a=(h=this.options).isWasm64?c.BinaryOp.SubI64:c.BinaryOp.SubI32,s=h.nativeSizeType,p=l.toNativeOne(r);break;case 3:case 8:a=c.BinaryOp.SubI64,s=c.NativeType.I64,p=r.createI64(1);break;case 11:a=c.BinaryOp.SubF32,s=c.NativeType.F32,p=r.createF32(1);break;case 12:a=c.BinaryOp.SubF64,s=c.NativeType.F64,p=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;default:return assert(!1),r.createUnreachable()}if(t==d.Type.void)return this.compileAssignmentWithValue(e.operand,r.createBinary(a,i,p),!1);var _=n.getTempLocal(l,!1),m=this.compileAssignmentWithValue(e.operand,r.createBinary(a,this.module.createGetLocal(_.index,s),p),!1);this.currentType=assert(_).type,n.freeTempLocal(_);var y=_.index;return r.createBlock(null,[r.createSetLocal(y,i),m,r.createGetLocal(y,s)],s)},t.prototype.compileUnaryPrefixExpression=function(e,t){var r,n=this.module,i=!1;switch(e.operator){case u.Token.PLUS:if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.PLUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}break;case u.Token.MINUS:if(e.operand.kind==h.NodeKind.LITERAL&&(e.operand.literalKind==h.LiteralKind.INTEGER||e.operand.literalKind==h.LiteralKind.FLOAT)){r=this.compileLiteralExpression(e.operand,t,!0),this.options.sourceMap&&this.addDebugLocation(r,e.range);break}if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.MINUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(c.BinaryOp.SubI32,n.createI32(0),r);break;case 9:case 4:r=n.createBinary(this.options.isWasm64?c.BinaryOp.SubI64:c.BinaryOp.SubI32,this.currentType.toNativeZero(n),r);break;case 3:case 8:r=n.createBinary(c.BinaryOp.SubI64,n.createI64(0),r);break;case 11:r=n.createUnary(c.UnaryOp.NegF32,r);break;case 12:r=n.createUnary(c.UnaryOp.NegF64,r);break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.PLUS_PLUS:if(i=!0,r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.PREFIX_INC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(c.BinaryOp.AddI32,r,this.module.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?c.BinaryOp.AddI64:c.BinaryOp.AddI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(c.BinaryOp.AddI64,r,n.createI64(1));break;case 11:r=n.createBinary(c.BinaryOp.AddF32,r,n.createF32(1));break;case 12:r=n.createBinary(c.BinaryOp.AddF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.MINUS_MINUS:if(i=!0,r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.PREFIX_DEC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(c.BinaryOp.SubI32,r,n.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?c.BinaryOp.SubI64:c.BinaryOp.SubI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(c.BinaryOp.SubI64,r,n.createI64(1));break;case 11:r=n.createBinary(c.BinaryOp.SubF32,r,n.createF32(1));break;case 12:r=n.createBinary(c.BinaryOp.SubF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.EXCLAMATION:if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256))if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}r=this.makeIsFalseish(r,this.currentType),this.currentType=d.Type.bool;break;case u.Token.TILDE:if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t.is(8)?d.Type.i64:t,0,0),this.currentType.is(256)){var a,s;if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.BITWISE_NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(r=this.convertExpression(r,this.currentType,this.currentType.intType,1,0,e.operand),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(c.BinaryOp.XorI32,r,n.createI32(-1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?c.BinaryOp.XorI64:c.BinaryOp.XorI32,r,this.currentType.toNativeNegOne(n));break;case 3:case 8:r=n.createBinary(c.BinaryOp.XorI64,r,n.createI64(-1,-1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.TYPEOF:return this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();default:return assert(!1),n.createUnreachable()}return i?this.compileAssignmentWithValue(e.operand,r,t!=d.Type.void):r},t.prototype.ensureSmallIntegerWrap=function(e,t){var r=this.module,n=this.currentFunction.flow;switch(t.kind){case 0:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(c.UnaryOp.ExtendI8ToI32,e):r.createBinary(c.BinaryOp.ShrI32,r.createBinary(c.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24)));break;case 1:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(c.UnaryOp.ExtendI16ToI32,e):r.createBinary(c.BinaryOp.ShrI32,r.createBinary(c.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16)));break;case 5:n.canOverflow(e,t)&&(e=r.createBinary(c.BinaryOp.AndI32,e,r.createI32(255)));break;case 6:n.canOverflow(e,t)&&(e=r.createBinary(c.BinaryOp.AndI32,e,r.createI32(65535)));break;case 10:n.canOverflow(e,t)&&(e=r.createBinary(c.BinaryOp.AndI32,e,r.createI32(1)))}return e},t.prototype.makeIsFalseish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return r.createUnary(c.UnaryOp.EqzI32,e);case 3:case 8:return r.createUnary(c.UnaryOp.EqzI64,e);case 9:case 4:return r.createUnary(64==t.size?c.UnaryOp.EqzI64:c.UnaryOp.EqzI32,e);case 11:return r.createBinary(c.BinaryOp.EqF32,e,r.createF32(0));case 12:return r.createBinary(c.BinaryOp.EqF64,e,r.createF64(0));default:return assert(!1),r.createI32(1)}},t.prototype.makeIsTrueish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return e;case 3:case 8:return r.createBinary(c.BinaryOp.NeI64,e,r.createI64(0));case 9:case 4:return 64==t.size?r.createBinary(c.BinaryOp.NeI64,e,r.createI64(0)):e;case 11:return r.createBinary(c.BinaryOp.NeF32,e,r.createF32(0));case 12:return r.createBinary(c.BinaryOp.NeF64,e,r.createF64(0));default:return assert(!1),r.createI32(0)}},t.prototype.makeAllocate=function(e,t){var r,n,a=this.module,o=this.currentFunction,c=this.options.nativeSizeType,u=o.getTempLocal(e.type,!1),h=new Array;if(h.push(a.createSetLocal(u.index,s.compileAllocate(this,e,t))),e.members)try{for(var d=i(e.members.values()),_=d.next();!_.done;_=d.next()){var m=_.value;if(m.kind==l.ElementKind.FIELD){var y=m,g=y.type,E=g.toNativeType(),T=y.prototype.declaration;if(assert(!y.isAny(p.CommonFlags.CONST)),T.initializer)h.push(a.createStore(g.byteSize,a.createGetLocal(u.index,c),this.compileExpression(T.initializer,g,1,0),E,y.memoryOffset));else{var f=y.prototype.declaration.parameterIndex;h.push(a.createStore(g.byteSize,a.createGetLocal(u.index,c),f>=0?a.createGetLocal(1+f,E):g.toNativeZero(a),E,y.memoryOffset))}}}}catch(e){r={error:e}}finally{try{_&&!_.done&&(n=d.return)&&n.call(d)}finally{if(r)throw r.error}}return h.push(a.createGetLocal(u.index,c)),o.freeTempLocal(u),this.currentType=e.type,a.createBlock(null,h,c)},t.prototype.makeConditionalAllocate=function(e,t){var r=this.module,n=this.options.nativeSizeType;return this.currentType=e.type,r.createIf(n==c.NativeType.I64?r.createBinary(c.BinaryOp.NeI64,r.createGetLocal(0,c.NativeType.I64),r.createI64(0)):r.createGetLocal(0,c.NativeType.I32),r.createGetLocal(0,n),r.createTeeLocal(0,this.makeAllocate(e,t)))},t.prototype.addDebugLocation=function(e,t){var r=this.currentFunction,n=t.source;n.debugInfoIndex<0&&(n.debugInfoIndex=this.module.addDebugInfoFile(n.normalizedPath)),t.debugInfoRef=e,r.debugLocations.push(t)},t}(o.DiagnosticEmitter);function T(e,t){switch(void 0===t&&(t=e.simpleName),e.kind){case l.ElementKind.FUNCTION:return(r=e.parent||e.prototype.parent)?T(r)+(e.is(p.CommonFlags.INSTANCE)?p.INSTANCE_DELIMITER:p.STATIC_DELIMITER)+t:t;case l.ElementKind.FIELD:case l.ElementKind.ENUMVALUE:return T(r=assert(e.parent))+(e.is(p.CommonFlags.INSTANCE)?p.INSTANCE_DELIMITER:p.STATIC_DELIMITER)+t;case l.ElementKind.CLASS:return(r=e.prototype.parent)?T(r)+p.STATIC_DELIMITER+t:t;default:var r;return(r=e.parent)?T(r)+p.STATIC_DELIMITER+t:t}}function f(e,t,r){if(void 0===r&&(r=null),y=r?r.simpleName:t.range.source.simplePath,g=e.simpleName,e.hasDecorator(l.DecoratorFlags.EXTERNAL)){var n=e.program,i=assert(h.findDecorator(h.DecoratorKind.EXTERNAL,t.decorators)),a=i.arguments;if(a&&a.length){var s=a[0];s.kind==h.NodeKind.LITERAL&&s.literalKind==h.LiteralKind.STRING?(g=s.value,a.length>=2&&((s=a[1]).kind==h.NodeKind.LITERAL&&s.literalKind==h.LiteralKind.STRING?(y=g,g=s.value,a.length>2&&n.error(o.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"2",a.length.toString())):n.error(o.DiagnosticCode.String_literal_expected,s.range))):n.error(o.DiagnosticCode.String_literal_expected,s.range)}else n.error(o.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,i.range,"1","0")}}t.Compiler=E},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var i=r(0),a=r(5),s=r(8),o=r(1),c=r(3),p=r(2),l=i.LIBRARY_PREFIX+"builtins.ts",u=function(e){function t(){var t=e.call(this)||this;return t.backlog=new Array,t.seenlog=new Set,t.donelog=new Set,t.onComment=null,t.tryParseSignatureIsSignature=!1,t.parseParametersThis=null,t.program=new a.Program(t.diagnostics),t}return n(t,e),t.prototype.parseFile=function(e,t,r){var n=c.normalizePath(t),a=p.mangleInternalPath(n);if(!this.donelog.has(a)){this.donelog.add(a),this.seenlog.add(a);var o=new p.Source(n,e,r?p.SourceKind.ENTRY:t.startsWith(i.LIBRARY_PREFIX)&&t.indexOf(i.PATH_DELIMITER,i.LIBRARY_PREFIX.length)<0?p.SourceKind.LIBRARY:p.SourceKind.DEFAULT),u=this.program;u.sources.push(o),o.normalizedPath==l&&o.set(i.CommonFlags.BUILTIN);var h=new s.Tokenizer(o,u.diagnostics);h.onComment=this.onComment,o.tokenizer=h;for(var d=o.statements;!h.skip(s.Token.ENDOFFILE);){var _=this.parseTopLevelStatement(h);_&&(_.parent=o,d.push(_))}h.finish()}},t.prototype.parseTopLevelStatement=function(e,t){void 0===t&&(t=null);for(var r=i.CommonFlags.NONE,n=-1,a=null;e.skip(s.Token.AT);){n<0&&(n=e.tokenPos);var c=this.parseDecorator(e);c?(a||(a=[]),a.push(c)):this.skipStatement(e)}r|=e.source.flags&i.CommonFlags.BUILTIN;var p=0,l=0;e.skip(s.Token.EXPORT)&&(e.skip(s.Token.DEFAULT)&&this.error(o.DiagnosticCode.Operation_not_supported,e.range()),n<0&&(n=e.tokenPos),r|=i.CommonFlags.EXPORT,p=e.tokenPos,l=e.pos);var u=null!=t&&t.is(i.CommonFlags.AMBIENT);e.skip(s.Token.DECLARE)?(n<0&&(n=e.tokenPos),u&&this.error(o.DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,e.range()),r|=i.CommonFlags.DECLARE|i.CommonFlags.AMBIENT):u&&(r|=i.CommonFlags.AMBIENT);var h=null,d=e.peek();switch(n<0&&(n=e.nextTokenPos),d){case s.Token.CONST:if(e.next(),r|=i.CommonFlags.CONST,e.skip(s.Token.ENUM)){h=this.parseEnum(e,r,a,n);break}h=this.parseVariable(e,r,a,n),a=null;break;case s.Token.LET:r|=i.CommonFlags.LET;case s.Token.VAR:e.next(),h=this.parseVariable(e,r,a,n),a=null;break;case s.Token.ENUM:e.next(),h=this.parseEnum(e,r,a,n),a=null;break;case s.Token.FUNCTION:e.next(),h=this.parseFunction(e,r,a,n),a=null;break;case s.Token.ABSTRACT:var _=e.mark();if(e.next(),!e.skip(s.Token.CLASS)){e.reset(_),h=this.parseStatement(e,!0);break}e.discard(_),r|=i.CommonFlags.ABSTRACT;case s.Token.CLASS:case s.Token.INTERFACE:e.next(),h=this.parseClassOrInterface(e,r,a,n),a=null;break;case s.Token.NAMESPACE:_=e.mark();e.next(),e.peek(!1,s.IdentifierHandling.PREFER)==s.Token.IDENTIFIER?(e.discard(_),h=this.parseNamespace(e,r,a,n),a=null):(e.reset(_),h=this.parseStatement(e,!0));break;case s.Token.IMPORT:e.next(),h=(r|=i.CommonFlags.IMPORT)&i.CommonFlags.EXPORT?this.parseExportImport(e,n):this.parseImport(e);break;case s.Token.TYPE:_=e.mark();e.next(),e.peek(!1,s.IdentifierHandling.PREFER)==s.Token.IDENTIFIER?(e.discard(_),h=this.parseTypeDeclaration(e,r,a,n),a=null):(e.reset(_),h=this.parseStatement(e,!0));break;default:r&i.CommonFlags.EXPORT?h=this.parseExport(e,r,n):(l&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(p,l),"export"),t||(h=this.parseStatement(e,!0)))}if(a)for(var m=0,y=a.length;m"),null}if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"null"),null;_=!0}n=p.Node.createType(h,d,_,e.range(a,e.pos))}for(;e.skip(s.Token.OPENBRACKET);){var y=e.tokenPos;if(!e.skip(s.Token.CLOSEBRACKET))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;var g=e.range(y,e.pos);_=!1;if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"null"),null;_=!0}if(n=p.Node.createType(p.Node.createIdentifierExpression("Array",g),[n],_,e.range(a,e.pos)),_)break}return n},t.prototype.tryParseSignature=function(e){var t,r=e.mark(),n=e.tokenPos,i=null,a=null,c=!1;if(e.skip(s.Token.CLOSEPAREN))c=!0,e.discard(r),i=[];else{c=!1;do{var l=p.ParameterKind.DEFAULT;if(e.skip(s.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),l=p.ParameterKind.REST),e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return e.reset(r),this.tryParseSignatureIsSignature=!1,null;c=!0,e.discard(r);var u=this.parseType(e,!1);if(!u)return null;if(u.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,u.range),this.tryParseSignatureIsSignature=!0,null;a=u}else{if(!e.skipIdentifier())return c?this.error(o.DiagnosticCode.Identifier_expected,e.range()):e.reset(r),this.tryParseSignatureIsSignature=c,null;var h=p.Node.createIdentifierExpression(e.readIdentifier(),e.range(e.tokenPos,e.pos));if(e.skip(s.Token.QUESTION)&&(c=!0,e.discard(r),l==p.ParameterKind.REST?this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):l=p.ParameterKind.OPTIONAL),e.skip(s.Token.COLON)){c=!0,e.discard(r);var d=this.parseType(e);if(!d)return this.tryParseSignatureIsSignature=c,null;var _=new p.ParameterNode;_.parameterKind=l,_.name=h,_.type=d,i?i.push(_):i=[_]}else c&&this.error(o.DiagnosticCode.Type_expected,e.range())}}while(e.skip(s.Token.COMMA));if(!e.skip(s.Token.CLOSEPAREN))return c?this.error(o.DiagnosticCode._0_expected,e.range(),")"):e.reset(r),this.tryParseSignatureIsSignature=c,null}return e.skip(s.Token.EQUALS_GREATERTHAN)?(c=!0,e.discard(r),(t=this.parseType(e))?(this.tryParseSignatureIsSignature=!0,p.Node.createSignature(i||[],t,a,!1,e.range(n,e.pos))):(this.tryParseSignatureIsSignature=c,null)):(c?this.error(o.DiagnosticCode._0_expected,e.range(),"=>"):e.reset(r),this.tryParseSignatureIsSignature=c,null)},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skipIdentifier()){for(var r=e.readIdentifier(),n=p.Node.createIdentifierExpression(r,e.range(t,e.pos));e.skip(s.Token.DOT);){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;r=e.readIdentifier(),n=p.Node.createPropertyAccessExpression(n,p.Node.createIdentifierExpression(r,e.range()),e.range(t,e.pos))}var i=void 0;if(!e.skip(s.Token.OPENPAREN))return p.Node.createDecorator(n,null,e.range(t,e.pos));if(i=this.parseArguments(e))return p.Node.createDecorator(n,i,e.range(t,e.pos))}else this.error(o.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r,n){var i=new Array;do{var a=this.parseVariableDeclaration(e,t,r);if(!a)return null;i.push(a)}while(e.skip(s.Token.COMMA));var o=p.Node.createVariableStatement(i,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),o},t.prototype.parseVariableDeclaration=function(e,t,r){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var n=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=t,c=null;e.skip(s.Token.COLON)&&(c=this.parseType(e));var l=null;if(e.skip(s.Token.EQUALS)){if(a&i.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,e.range()),!(l=this.parseExpression(e,2)))return null}else a&i.CommonFlags.CONST?a&i.CommonFlags.AMBIENT||this.error(o.DiagnosticCode._const_declarations_must_be_initialized,n.range):c||this.error(o.DiagnosticCode.Type_expected,e.range(e.pos));return p.Node.createVariableDeclaration(n,c,l,r,a,s.Range.join(n.range,e.range()))},t.prototype.parseEnum=function(e,t,r,n){if(e.next()!=s.Token.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var a=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.next()!=s.Token.OPENBRACE)return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;for(var c=new Array;!e.skip(s.Token.CLOSEBRACE);){var l=this.parseEnumValue(e,i.CommonFlags.NONE);if(!l)return null;if(c.push(l),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEBRACE))break;return this.error(o.DiagnosticCode._0_expected,e.range(),"}"),null}}var u=p.Node.createEnumDeclaration(a,c,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),u},t.prototype.parseEnumValue=function(e,t){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),n=null;return e.skip(s.Token.EQUALS)&&!(n=this.parseExpression(e,2))?null:p.Node.createEnumValueDeclaration(r,n,t,s.Range.join(r.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=s.Token.SEMICOLON&&e.nextToken!=s.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=p.Node.createReturnStatement(t,e.range());return e.skip(s.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){for(var t=new Array;!e.skip(s.Token.GREATERTHAN);){var r=this.parseTypeParameter(e);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.GREATERTHAN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),">"),null}}return 0===t.length&&this.error(o.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range()),t},t.prototype.parseTypeParameter=function(e){if(e.next()==s.Token.IDENTIFIER){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(s.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return p.Node.createTypeParameter(t,r,s.Range.join(t.range,e.range()))}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e,t){void 0===t&&(t=!1);var r=new Array,n=null,i=!1,a=!1,c=null;if(this.parseParametersThis=null,e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;if(!(c=this.parseType(e)))return null;if(c.kind==p.NodeKind.TYPE?this.parseParametersThis=c:this.error(o.DiagnosticCode.Operation_not_supported,c.range),!e.skip(s.Token.COMMA))return e.skip(s.Token.CLOSEPAREN)?r:(this.error(o.DiagnosticCode._0_expected,e.range(),")"),null)}for(;!e.skip(s.Token.CLOSEPAREN);){var l=this.parseParameter(e,t);if(!l)return null;switch(n&&!a&&(this.error(o.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,n.name.range),a=!0),l.parameterKind){default:i&&this.error(o.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,l.name.range);break;case p.ParameterKind.OPTIONAL:i=!0;break;case p.ParameterKind.REST:n=l}if(r.push(l),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return r},t.prototype.parseParameter=function(e,t){void 0===t&&(t=!1);var r=!1,n=!1,a=null,c=i.CommonFlags.NONE;if(t&&(e.skip(s.Token.PUBLIC)?(a=e.range(),c|=i.CommonFlags.PUBLIC):e.skip(s.Token.PROTECTED)?(a=e.range(),c|=i.CommonFlags.PROTECTED):e.skip(s.Token.PRIVATE)&&(a=e.range(),c|=i.CommonFlags.PRIVATE),e.peek()==s.Token.READONLY)){var l=e.mark();e.next(),e.peek()!=s.Token.COLON?(e.discard(l),a||(a=e.range()),c|=i.CommonFlags.READONLY):e.reset(l)}if(e.skip(s.Token.DOT_DOT_DOT)&&(c?this.error(o.DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,e.range()):a=e.range(),r=!0),e.skipIdentifier()){r||(a=e.range());var u=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),h=null;if((n=e.skip(s.Token.QUESTION))&&r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,u.range),e.skip(s.Token.COLON)){if(!(h=this.parseType(e)))return null}else h=p.Node.createOmittedType(e.range(e.pos));var d=null;if(e.skip(s.Token.EQUALS)&&(r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,u.range),n?this.error(o.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,u.range):n=!0,!(d=this.parseExpression(e,2))))return null;var _=p.Node.createParameter(u,h,d,r?p.ParameterKind.REST:n?p.ParameterKind.OPTIONAL:p.ParameterKind.DEFAULT,s.Range.join(a,e.range()));return _.flags|=c,_}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseFunction=function(e,t,r,n){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range(e.pos)),null;var a=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=-1,l=null;if(e.skip(s.Token.LESSTHAN)){if(c=e.tokenPos,!(l=this.parseTypeParameters(e)))return null;t|=i.CommonFlags.GENERIC}if(!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null;c<0&&(c=e.tokenPos);var u=this.parseParameters(e);if(!u)return null;var h=this.parseParametersThis,d=0!=(t&i.CommonFlags.SET);d&&(1!=u.length&&this.error(o.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,a.range),u.length&&u[0].initializer&&this.error(o.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,a.range)),t&i.CommonFlags.GET&&u.length&&this.error(o.DiagnosticCode.A_get_accessor_cannot_have_parameters,a.range);var _=null;if(e.skip(s.Token.COLON)&&!(_=this.parseType(e,!0,d)))return null;_||(_=p.Node.createOmittedType(e.range(e.pos)),d||this.error(o.DiagnosticCode.Type_expected,_.range));var m=p.Node.createSignature(u,_,h,!1,e.range(c,e.pos)),y=null;if(e.skip(s.Token.OPENBRACE)){if(t&i.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(y=this.parseBlockStatement(e,!1)))return null}else t&i.CommonFlags.AMBIENT||this.error(o.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var g=p.Node.createFunctionDeclaration(a,l,m,y,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),g},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==s.Token.FUNCTION){if(t=e.skipIdentifier()?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==s.Token.OPENPAREN),t=p.Node.createEmptyIdentifierExpression(e.range(e.tokenPos));var i=e.pos,a=this.parseParameters(e);return a?this.parseFunctionExpressionCommon(e,t,a,n,r,i):null},t.prototype.parseFunctionExpressionCommon=function(e,t,r,n,a,c){void 0===a&&(a=-1),void 0===c&&(c=-1),a<0&&(a=t.range.start),c<0&&(c=a);var l=null;if(e.skip(s.Token.COLON)){if(!(l=this.parseType(e)))return null}else l=p.Node.createOmittedType(e.range(e.pos)),this.error(o.DiagnosticCode.Type_expected,l.range);if(n&&!e.skip(s.Token.EQUALS_GREATERTHAN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var u,h=p.Node.createSignature(r,l,null,!1,e.range(c,e.pos));if(n)u=this.parseStatement(e,!1);else{if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;u=this.parseBlockStatement(e,!1)}if(!u)return null;var d=p.Node.createFunctionDeclaration(t,null,h,u,null,n?i.CommonFlags.ARROW:i.CommonFlags.NONE,e.range(a,e.pos));return p.Node.createFunctionExpression(d)},t.prototype.parseClassOrInterface=function(e,t,r,n){var a=e.token==s.Token.INTERFACE;if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var c,l=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(s.Token.LESSTHAN)){if(!(c=this.parseTypeParameters(e)))return null;t|=i.CommonFlags.GENERIC}else c=[];var u=null;if(e.skip(s.Token.EXTENDS)){var h=this.parseType(e);if(!h)return null;if(h.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,h.range),null;u=h}var d=null;if(e.skip(s.Token.IMPLEMENTS)){a&&this.error(o.DiagnosticCode.Interface_declaration_cannot_have_implements_clause,e.range());do{var _=this.parseType(e);if(!_)return null;a||(d||(d=[]),d.push(_))}while(e.skip(s.Token.COMMA))}if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;var m,y=new Array;if(a?(assert(!d),m=p.Node.createInterfaceDeclaration(l,c,u,y,r,t,e.range(n,e.pos))):m=p.Node.createClassDeclaration(l,c,u,d,y,r,t,e.range(n,e.pos)),!e.skip(s.Token.CLOSEBRACE))do{var g=this.parseClassMember(e,m);if(!g)return null;g.parent=m,y.push(g)}while(!e.skip(s.Token.CLOSEBRACE));return m},t.prototype.parseClassExpression=function(e){var t,r=e.tokenPos;if(t=e.skipIdentifier()?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;var n=new Array,a=p.Node.createClassDeclaration(t,[],null,null,n,null,i.CommonFlags.NONE,e.range(r,e.pos));if(!e.skip(s.Token.CLOSEBRACE))do{var c=this.parseClassMember(e,a);if(!c)return null;c.parent=a,n.push(c)}while(!e.skip(s.Token.CLOSEBRACE));return p.Node.createClassExpression(a)},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=t.kind==p.NodeKind.INTERFACEDECLARATION,a=new Array;e.skip(s.Token.AT);){var c=this.parseDecorator(e);if(!c)break;n&&this.error(o.DiagnosticCode.Decorators_are_not_valid_here,c.range),a.push(c)}var l=t.flags&i.CommonFlags.AMBIENT;n&&(l|=i.CommonFlags.VIRTUAL),e.skip(s.Token.PUBLIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"public"),l|=i.CommonFlags.PUBLIC):e.skip(s.Token.PRIVATE)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"private"),l|=i.CommonFlags.PRIVATE):e.skip(s.Token.PROTECTED)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"protected"),l|=i.CommonFlags.PROTECTED);var u=0,h=0,d=0,_=0;e.skip(s.Token.STATIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"static"),l|=i.CommonFlags.STATIC,u=e.tokenPos,h=e.pos):(l|=i.CommonFlags.INSTANCE,e.skip(s.Token.ABSTRACT)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"abstract"),l|=i.CommonFlags.ABSTRACT,d=e.tokenPos,_=e.pos),t.flags&i.CommonFlags.GENERIC&&(l|=i.CommonFlags.GENERIC_CONTEXT));var m=0,y=0;e.skip(s.Token.READONLY)&&(l|=i.CommonFlags.READONLY,m=e.tokenPos,y=e.pos);var g=e.mark(),E=!1,T=!1,f=!1,I=0,v=0;if(n||(e.skip(s.Token.GET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(g):(l|=i.CommonFlags.GET,T=!0,I=e.tokenPos,v=e.pos,l&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly")):e.skip(s.Token.SET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(g):(l|=i.CommonFlags.SET|i.CommonFlags.SET,f=!0,I=e.tokenPos,v=e.pos,l&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly")):e.skip(s.Token.CONSTRUCTOR)&&(E=!0,(l|=i.CommonFlags.CONSTRUCTOR)&i.CommonFlags.STATIC&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(u,h),"static"),l&i.CommonFlags.ABSTRACT&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(d,_),"abstract"),l&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,y),"readonly"))),!E&&!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var A=E?p.Node.createConstructorExpression(e.range()):p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),C=null;if(e.skip(s.Token.LESSTHAN)){var N=e.tokenPos;if(!(C=this.parseTypeParameters(e)))return null;E?this.error(o.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range(N,e.pos)):T||f?this.error(o.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(N,e.pos)):l|=i.CommonFlags.GENERIC}if(e.skip(s.Token.OPENPAREN)){var O=e.tokenPos,S=this.parseParameters(e,E);if(!S)return null;var L=this.parseParametersThis;if(E)for(var b=0,k=S.length;b"),null):null;case s.Token.IDENTIFIER:return p.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case s.Token.THIS:return p.Node.createThisExpression(e.range(r,e.pos));case s.Token.CONSTRUCTOR:return p.Node.createConstructorExpression(e.range(r,e.pos));case s.Token.SUPER:return p.Node.createSuperExpression(e.range(r,e.pos));case s.Token.STRINGLITERAL:return p.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case s.Token.INTEGERLITERAL:return p.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case s.Token.FLOATLITERAL:return p.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case s.Token.SLASH:var T=e.readRegexpPattern();return e.skip(s.Token.SLASH)?p.Node.createRegexpLiteralExpression(T,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(o.DiagnosticCode._0_expected,e.range(),"/"),null);case s.Token.FUNCTION:return this.parseFunctionExpression(e);case s.Token.CLASS:return this.parseClassExpression(e);default:return this.error(o.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){var t=e.mark();if(!e.skip(s.Token.LESSTHAN))return null;var r=new Array;do{if(e.peek()===s.Token.GREATERTHAN)break;var n=this.parseType(e,!0,!0);if(!n)return e.reset(t),null;r.push(n)}while(e.skip(s.Token.COMMA));return e.skip(s.Token.GREATERTHAN)&&e.skip(s.Token.OPENPAREN)?r:(e.reset(t),null)},t.prototype.parseArguments=function(e){for(var t=new Array;!e.skip(s.Token.CLOSEPAREN);){var r=this.parseExpression(e,2);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return t},t.prototype.parseExpression=function(e,t){void 0===t&&(t=1),assert(0!=t);var r=this.parseExpressionStart(e);if(!r)return null;var n,i=r.range.start;if(p.nodeIsCallable(r.kind))for(var a=null;e.skip(s.Token.OPENPAREN)||p.nodeIsGenericCallable(r.kind)&&null!==(a=this.tryParseTypeArgumentsBeforeArguments(e));){var c=this.parseArguments(e);if(!c)return null;r=p.Node.createCallExpression(r,a,c,e.range(i,e.pos))}for(var l,u=null;(l=h(n=e.peek()))>=t;)switch(e.next(),n){case s.Token.AS:var _=this.parseType(e);if(!_)return null;r=p.Node.createAssertionExpression(p.AssertionKind.AS,r,_,e.range(i,e.pos));break;case s.Token.INSTANCEOF:var m=this.parseType(e);if(!m)return null;r=p.Node.createInstanceOfExpression(r,m,e.range(i,e.pos));break;case s.Token.OPENBRACKET:if(!(u=this.parseExpression(e)))return null;if(!e.skip(s.Token.CLOSEBRACKET))return this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;r=p.Node.createElementAccessExpression(r,u,e.range(i,e.pos));break;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:r.kind!=p.NodeKind.IDENTIFIER&&r.kind!=p.NodeKind.ELEMENTACCESS&&r.kind!=p.NodeKind.PROPERTYACCESS&&this.error(o.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,r.range),r=p.Node.createUnaryPostfixExpression(n,r,e.range(i,e.pos));break;case s.Token.QUESTION:var y=this.parseExpression(e);if(!y)return null;if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;var g=this.parseExpression(e,t>1?2:1);if(!g)return null;r=p.Node.createTernaryExpression(r,y,g,e.range(i,e.pos));break;case s.Token.COMMA:var E=[r];do{if(!(r=this.parseExpression(e,2)))return null;E.push(r)}while(e.skip(s.Token.COMMA));r=p.Node.createCommaExpression(E,e.range(i,e.pos));break;default:if(!(u=this.parseExpression(e,d(n)?l:l+1)))return null;if(n==s.Token.DOT)if(u.kind==p.NodeKind.IDENTIFIER)r=p.Node.createPropertyAccessExpression(r,u,e.range(i,e.pos));else{if(u.kind!=p.NodeKind.CALL)return this.error(o.DiagnosticCode.Identifier_expected,u.range),null;var T=u;if(T.expression.kind!=p.NodeKind.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,T.expression.range),null;T.expression=p.Node.createPropertyAccessExpression(r,T.expression,e.range(i,e.pos)),r=T}else r=p.Node.createBinaryExpression(n,r,u,e.range(i,e.pos))}return r},t.prototype.skipStatement=function(e){for(e.peek(!0),e.nextTokenOnNewLine&&e.next();;){var t=e.peek(!0);if(t==s.Token.ENDOFFILE||t==s.Token.SEMICOLON){e.next();break}if(e.nextTokenOnNewLine)break;switch(e.next()){case s.Token.IDENTIFIER:e.readIdentifier();break;case s.Token.STRINGLITERAL:e.readString();break;case s.Token.INTEGERLITERAL:e.readInteger();break;case s.Token.FLOATLITERAL:e.readFloat()}}},t.prototype.skipBlock=function(e){var t=1,r=!0;do{switch(e.next()){case s.Token.ENDOFFILE:this.error(o.DiagnosticCode._0_expected,e.range(),"}"),r=!1;break;case s.Token.OPENBRACE:++t;break;case s.Token.CLOSEBRACE:--t||(r=!1);break;case s.Token.IDENTIFIER:e.readIdentifier();break;case s.Token.STRINGLITERAL:e.readString();break;case s.Token.INTEGERLITERAL:e.readInteger();break;case s.Token.FLOATLITERAL:e.readFloat()}}while(r)},t}(o.DiagnosticEmitter);function h(e){switch(e){case s.Token.COMMA:return 1;case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:return 4;case s.Token.QUESTION:return 5;case s.Token.BAR_BAR:return 6;case s.Token.AMPERSAND_AMPERSAND:return 7;case s.Token.BAR:return 8;case s.Token.CARET:return 9;case s.Token.AMPERSAND:return 10;case s.Token.EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS:case s.Token.EQUALS_EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS_EQUALS:return 11;case s.Token.AS:case s.Token.IN:case s.Token.INSTANCEOF:case s.Token.LESSTHAN:case s.Token.GREATERTHAN:case s.Token.LESSTHAN_EQUALS:case s.Token.GREATERTHAN_EQUALS:return 12;case s.Token.LESSTHAN_LESSTHAN:case s.Token.GREATERTHAN_GREATERTHAN:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 13;case s.Token.PLUS:case s.Token.MINUS:return 14;case s.Token.ASTERISK:case s.Token.SLASH:case s.Token.PERCENT:return 15;case s.Token.ASTERISK_ASTERISK:return 16;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:return 18;case s.Token.DOT:case s.Token.NEW:case s.Token.OPENBRACKET:return 20}return 0}function d(e){switch(e){case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:case s.Token.QUESTION:case s.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=u,function(e){e[e.NONE=0]="NONE",e[e.COMMA=1]="COMMA",e[e.SPREAD=2]="SPREAD",e[e.YIELD=3]="YIELD",e[e.ASSIGNMENT=4]="ASSIGNMENT",e[e.CONDITIONAL=5]="CONDITIONAL",e[e.LOGICAL_OR=6]="LOGICAL_OR",e[e.LOGICAL_AND=7]="LOGICAL_AND",e[e.BITWISE_OR=8]="BITWISE_OR",e[e.BITWISE_XOR=9]="BITWISE_XOR",e[e.BITWISE_AND=10]="BITWISE_AND",e[e.EQUALITY=11]="EQUALITY",e[e.RELATIONAL=12]="RELATIONAL",e[e.SHIFT=13]="SHIFT",e[e.ADDITIVE=14]="ADDITIVE",e[e.MULTIPLICATIVE=15]="MULTIPLICATIVE",e[e.EXPONENTIATED=16]="EXPONENTIATED",e[e.UNARY_PREFIX=17]="UNARY_PREFIX",e[e.UNARY_POSTFIX=18]="UNARY_POSTFIX",e[e.CALL=19]="CALL",e[e.MEMBERACCESS=20]="MEMBERACCESS",e[e.GROUPING=21]="GROUPING"}(t.Precedence||(t.Precedence={}))},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return s};Object.defineProperty(t,"__esModule",{value:!0});var s=r(0),o=r(5),c=r(3),p=function(){function e(e,t){void 0===t&&(t=!1),this.todo=[],this.seen=new Set,this.program=e,this.includePrivate}return e.prototype.walk=function(){var e,t;try{for(var r=i(this.program.moduleLevelExports.values()),n=r.next();!n.done;n=r.next()){var a=n.value;this.visitElement(a)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}for(var s=this.todo;00&&this.push(", "),this.push("$"),this.push(i.toString(10)),this.push(": "),this.push(a(n.getFunctionParamType(e,i)));this.push("): "),this.push(a(n.getFunctionResultType(e))),this.push(" "),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("{\n"),this.decompileExpression(r),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("\n}\n"),++this.functionId},e.prototype.decompileExpression=function(e){var t,r,i,s,o=n.getExpressionId(e),c=n.getExpressionType(e);switch(o){case n.ExpressionId.Block:for(null!=(r=n.getBlockName(e))&&(this.push(r),this.push(": ")),this.push("{\n"),s=n.getBlockChildCount(e),i=0;i("),this.push(n.getLoadOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getLoadPtr(e)),void this.push(")");case n.ExpressionId.Store:return this.push("store<"),this.push(a(c)),this.push(">("),this.push(n.getStoreOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getStorePtr(e)),this.push(", "),this.decompileExpression(n.getStoreValue(e)),void this.push(")");case n.ExpressionId.Const:switch(c){case n.NativeType.I32:return void this.push(n.getConstValueI32(e).toString(10));case n.NativeType.I64:return void this.push(i64_to_string(i64_new(n.getConstValueI64Low(e),n.getConstValueI64High(e))));case n.NativeType.F32:return void this.push(n.getConstValueF32(e).toString(10));case n.NativeType.F64:return void this.push(n.getConstValueF64(e).toString(10))}break;case n.ExpressionId.Unary:switch(n.getUnaryOp(e)){case n.UnaryOp.ClzI32:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI32:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI32:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NegF32:case n.UnaryOp.NegF64:return this.push("-"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.AbsF32:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF32:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF32:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF32:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF32:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF32:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.EqzI32:case n.UnaryOp.EqzI64:return this.push("!"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ClzI64:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI64:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI64:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.AbsF64:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF64:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF64:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF64:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF64:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF64:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ExtendI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ExtendU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.WrapI64:case n.UnaryOp.TruncF32ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretF32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretF64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ConvertI32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.PromoteF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.DemoteF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretI32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretI64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")")}break;case n.ExpressionId.Binary:switch(n.getBinaryOp(e)){case n.BinaryOp.AddI32:case n.BinaryOp.AddI64:case n.BinaryOp.AddF32:case n.BinaryOp.AddF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" + "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.SubI32:case n.BinaryOp.SubI64:case n.BinaryOp.SubF32:case n.BinaryOp.SubF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" - "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.MulI32:case n.BinaryOp.MulI64:case n.BinaryOp.MulF32:case n.BinaryOp.MulF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" * "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivI32:case n.BinaryOp.DivI64:case n.BinaryOp.DivF32:case n.BinaryOp.DivF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RemI32:case n.BinaryOp.RemI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.AndI32:case n.BinaryOp.AndI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" & "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.OrI32:case n.BinaryOp.OrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" | "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.XorI32:case n.BinaryOp.XorI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" ^ "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShlI32:case n.BinaryOp.ShlI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" << "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrU32:case n.BinaryOp.ShrU64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >>> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrI32:case n.BinaryOp.ShrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI32:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI32:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.EqI32:case n.BinaryOp.EqI64:case n.BinaryOp.EqF32:case n.BinaryOp.EqF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" == "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.NeI32:case n.BinaryOp.NeI64:case n.BinaryOp.NeF32:case n.BinaryOp.NeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" != "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtI32:case n.BinaryOp.LtI64:case n.BinaryOp.LtF32:case n.BinaryOp.LtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeI32:case n.BinaryOp.LeI64:case n.BinaryOp.LeF32:case n.BinaryOp.LeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtI32:case n.BinaryOp.GtI64:case n.BinaryOp.GtF32:case n.BinaryOp.GtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeI32:case n.BinaryOp.GeI64:case n.BinaryOp.GeF32:case n.BinaryOp.GeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI64:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI64:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.LtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.CopysignF32:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF32:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF32:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.CopysignF64:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF64:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF64:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")")}return;case n.ExpressionId.Select:return this.push("select<"),this.push(a(c)),this.push(">("),this.decompileExpression(n.getSelectThen(e)),this.push(", "),this.decompileExpression(n.getSelectElse(e)),this.push(", "),this.decompileExpression(n.getSelectCondition(e)),void this.push(")");case n.ExpressionId.Drop:return this.decompileExpression(n.getDropValue(e)),void this.push(";\n");case n.ExpressionId.Return:return void((t=n.getReturnValue(e))?(this.push("return "),this.decompileExpression(t),this.push(";\n")):this.push("return;\n"));case n.ExpressionId.Host:switch(n.getHostOp(e)){case n.HostOp.CurrentMemory:return void this.push("current_memory()");case n.HostOp.GrowMemory:return this.push("grow_memory("),this.decompileExpression(n.getHostOperand(e,0)),void this.push(")")}break;case n.ExpressionId.Nop:return void this.push(";\n");case n.ExpressionId.Unreachable:return void this.push("unreachable()");case n.ExpressionId.AtomicCmpxchg:case n.ExpressionId.AtomicRMW:case n.ExpressionId.AtomicWait:case n.ExpressionId.AtomicWake:}throw new Error("not implemented")},e.prototype.push=function(e){this.text.push(e)},e.prototype.finish=function(){var e=this.text.join("");return this.text=[],e},e}();function a(e){switch(e){case n.NativeType.None:return"void";case n.NativeType.I32:return"i32";case n.NativeType.I64:return"i64";case n.NativeType.F32:return"f32";case n.NativeType.F64:return"f64";case n.NativeType.Unreachable:throw new Error("unreachable type");case n.NativeType.Auto:throw new Error("auto type");default:throw new Error("unexpected type")}}t.Decompiler=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(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>>=0)&&e<256)&&(n=s[e])?n:(r=p(e,(0|e)<0?-1:0,!0),i&&(s[e]=r),r):(i=-128<=(e|=0)&&e<128)&&(n=a[e])?n:(r=p(e,e<0?-1:0,!1),i&&(a[e]=r),r)}function c(e,t){if(isNaN(e))return t?E:g;if(t){if(e<0)return E;if(e>=_)return A}else{if(e<=-m)return C;if(e+1>=m)return v}return e<0?c(-e,t).neg():p(e%d|0,e/d|0,t)}function p(e,t,r){return new n(e,t,r)}n.fromInt=o,n.fromNumber=c,n.fromBits=p;var l=Math.pow;function u(e,t,r){if(0===e.length)throw Error("empty string");if("NaN"===e||"Infinity"===e||"+Infinity"===e||"-Infinity"===e)return g;if("number"==typeof t?(r=t,t=!1):t=!!t,(r=r||10)<2||360)throw Error("interior hyphen");if(0===n)return u(e.substring(1),t,r).neg();for(var i=c(l(r,8)),a=g,s=0;s>>0:this.low},N.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},N.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((a=o).isZero())return p+s;for(;p.length<6;)p="0"+p;s=""+p+s}},N.getHighBits=function(){return this.high},N.getHighBitsUnsigned=function(){return this.high>>>0},N.getLowBits=function(){return this.low},N.getLowBitsUnsigned=function(){return this.low>>>0},N.getNumBitsAbs=function(){if(this.isNegative())return this.eq(C)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&0==(e&1<=0},N.isOdd=function(){return 1==(1&this.low)},N.isEven=function(){return 0==(1&this.low)},N.equals=function(e){return i(e)||(e=h(e)),(this.unsigned===e.unsigned||this.high>>>31!=1||e.high>>>31!=1)&&(this.high===e.high&&this.low===e.low)},N.eq=N.equals,N.notEquals=function(e){return!this.eq(e)},N.neq=N.notEquals,N.ne=N.notEquals,N.lessThan=function(e){return this.comp(e)<0},N.lt=N.lessThan,N.lessThanOrEqual=function(e){return this.comp(e)<=0},N.lte=N.lessThanOrEqual,N.le=N.lessThanOrEqual,N.greaterThan=function(e){return this.comp(e)>0},N.gt=N.greaterThan,N.greaterThanOrEqual=function(e){return this.comp(e)>=0},N.gte=N.greaterThanOrEqual,N.ge=N.greaterThanOrEqual,N.compare=function(e){if(i(e)||(e=h(e)),this.eq(e))return 0;var t=this.isNegative(),r=e.isNegative();return t&&!r?-1:!t&&r?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1},N.comp=N.compare,N.negate=function(){return!this.unsigned&&this.eq(C)?C:this.not().add(T)},N.neg=N.negate,N.add=function(e){i(e)||(e=h(e));var t=this.high>>>16,r=65535&this.high,n=this.low>>>16,a=65535&this.low,s=e.high>>>16,o=65535&e.high,c=e.low>>>16,l=0,u=0,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,u+=(d+=n+c)>>>16,l+=(u+=r+o)>>>16,l+=t+s,p((d&=65535)<<16|(_&=65535),(l&=65535)<<16|(u&=65535),this.unsigned)},N.subtract=function(e){return i(e)||(e=h(e)),this.add(e.neg())},N.sub=N.subtract,N.multiply=function(e){if(this.isZero())return g;if(i(e)||(e=h(e)),r)return p(r.mul(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned);if(e.isZero())return g;if(this.eq(C))return e.isOdd()?C:g;if(e.eq(C))return this.isOdd()?C:g;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(y)&&e.lt(y))return c(this.toNumber()*e.toNumber(),this.unsigned);var t=this.high>>>16,n=65535&this.high,a=this.low>>>16,s=65535&this.low,o=e.high>>>16,l=65535&e.high,u=e.low>>>16,d=65535&e.low,_=0,m=0,E=0,T=0;return E+=(T+=s*d)>>>16,m+=(E+=a*d)>>>16,E&=65535,m+=(E+=s*u)>>>16,_+=(m+=n*d)>>>16,m&=65535,_+=(m+=a*u)>>>16,m&=65535,_+=(m+=s*l)>>>16,_+=t*d+n*u+a*l+s*o,p((E&=65535)<<16|(T&=65535),(_&=65535)<<16|(m&=65535),this.unsigned)},N.mul=N.multiply,N.divide=function(e){if(i(e)||(e=h(e)),e.isZero())throw Error("division by zero");var t,n,a;if(r)return this.unsigned||-2147483648!==this.high||-1!==e.low||-1!==e.high?p((this.unsigned?r.div_u:r.div_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?E:g;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return E;if(e.gt(this.shru(1)))return f;a=E}else{if(this.eq(C))return e.eq(T)||e.eq(I)?C:e.eq(C)?T:(t=this.shr(1).div(e).shl(1)).eq(g)?e.isNegative()?T:I:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(C))return this.unsigned?E:g;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();a=g}for(n=this;n.gte(e);){t=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var s=Math.ceil(Math.log(t)/Math.LN2),o=s<=48?1:l(2,s-48),u=c(t),d=u.mul(e);d.isNegative()||d.gt(n);)d=(u=c(t-=o,this.unsigned)).mul(e);u.isZero()&&(u=T),a=a.add(u),n=n.sub(d)}return a},N.div=N.divide,N.modulo=function(e){return i(e)||(e=h(e)),r?p((this.unsigned?r.rem_u:r.rem_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this.sub(this.div(e).mul(e))},N.mod=N.modulo,N.rem=N.modulo,N.not=function(){return p(~this.low,~this.high,this.unsigned)},N.and=function(e){return i(e)||(e=h(e)),p(this.low&e.low,this.high&e.high,this.unsigned)},N.or=function(e){return i(e)||(e=h(e)),p(this.low|e.low,this.high|e.high,this.unsigned)},N.xor=function(e){return i(e)||(e=h(e)),p(this.low^e.low,this.high^e.high,this.unsigned)},N.shiftLeft=function(e){return i(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?p(this.low<>>32-e,this.unsigned):p(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):p(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},N.shr=N.shiftRight,N.shiftRightUnsigned=function(e){if(i(e)&&(e=e.toInt()),0===(e&=63))return this;var t=this.high;return e<32?p(this.low>>>e|t<<32-e,t>>>e,this.unsigned):p(32===e?t:t>>>e-32,0,this.unsigned)},N.shru=N.shiftRightUnsigned,N.shr_u=N.shiftRightUnsigned,N.toSigned=function(){return this.unsigned?p(this.low,this.high,!1):this},N.toUnsigned=function(){return this.unsigned?this:p(this.low,this.high,!0)},N.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},N.toBytesLE=function(){var e=this.high,t=this.low;return[255&t,t>>>8&255,t>>>16&255,t>>>24,255&e,e>>>8&255,e>>>16&255,e>>>24]},N.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,255&e,t>>>24,t>>>16&255,t>>>8&255,255&t]},n.fromBytes=function(e,t,r){return r?n.fromBytesLE(e,t):n.fromBytesBE(e,t)},n.fromBytesLE=function(e,t){return new n(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)},n.fromBytesBE=function(e,t){return new n(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}},function(e,t,r){(function(e){const t=e.Long||r(16);e.i64_zero=t.ZERO,e.i64_one=t.ONE,e.i64_new=function(e,r){return t.fromBits(e,r)},e.i64_low=function(e){return e.low},e.i64_high=function(e){return e.high},e.i64_add=function(e,t){return e.add(t)},e.i64_sub=function(e,t){return e.sub(t)},e.i64_mul=function(e,t){return e.mul(t)},e.i64_div=function(e,t){return e.div(t)},e.i64_div_u=function(e,t){return e.toUnsigned().div(t.toUnsigned()).toSigned()},e.i64_rem=function(e,t){return e.mod(t)},e.i64_rem_u=function(e,t){return e.toUnsigned().mod(t.toUnsigned()).toSigned()},e.i64_and=function(e,t){return e.and(t)},e.i64_or=function(e,t){return e.or(t)},e.i64_xor=function(e,t){return e.xor(t)},e.i64_shl=function(e,t){return e.shl(t)},e.i64_shr=function(e,t){return e.shr(t)},e.i64_shr_u=function(e,t){return e.shru(t)},e.i64_not=function(e){return e.not()},e.i64_eq=function(e,t){return e.eq(t)},e.i64_ne=function(e,t){return e.ne(t)},e.i64_align=function(e,r){assert(r&&0==(r&r-1));var n=t.fromInt(r-1);return e.add(n).and(n.not())},e.i64_is_i8=function(e){return 0===e.high&&e.low>=0&&e.low<=i8.MAX_VALUE||-1===e.high&&e.low>=i8.MIN_VALUE&&e.low<0},e.i64_is_i16=function(e){return 0===e.high&&e.low>=0&&e.low<=i16.MAX_VALUE||-1===e.high&&e.low>=i16.MIN_VALUE&&e.low<0},e.i64_is_i32=function(e){return 0===e.high&&e.low>=0||-1===e.high&&e.low<0},e.i64_is_u8=function(e){return 0===e.high&&e.low>=0&&e.low<=u8.MAX_VALUE},e.i64_is_u16=function(e){return 0===e.high&&e.low>=0&&e.low<=u16.MAX_VALUE},e.i64_is_u32=function(e){return 0===e.high},e.i64_is_bool=function(e){return 0===e.high&&(0===e.low||1===e.low)};const n=t.fromNumber(f32.MIN_SAFE_INTEGER),i=t.fromNumber(f32.MAX_SAFE_INTEGER);e.i64_is_f32=function(e){return e.gte(n)&&e.lte(i)};const a=t.fromNumber(f64.MIN_SAFE_INTEGER),s=t.fromNumber(f64.MAX_SAFE_INTEGER);e.i64_is_f64=function(e){return e.gte(a)&&e.lte(s)},e.i64_to_f32=function(t){return e.Math.fround(t.toNumber())},e.i64_to_f64=function(e){return e.toNumber()},e.i64_to_string=function(e,t){return(t?e.toUnsigned():e).toString(10)}}).call(this,r(7))},function(e,t,r){(function(e){const t=new Float64Array(1),r=new Float32Array(t.buffer),n=new Int32Array(t.buffer);e.f32_as_i32=function(e){return r[0]=e,n[0]},e.i32_as_f32=function(e){return n[0]=e,r[0]},e.f64_as_i64=function(e){return t[0]=e,i64_new(n[0],n[1])},e.i64_as_f64=function(e){return n[0]=i64_low(e),n[1]=i64_high(e),t[0]}}).call(this,r(7))},function(e,t,r){"use strict";function n(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24}function i(e,t,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function a(e,t){var r=n(e,t),i=n(e,t+4);return i64_new(r,i)}Object.defineProperty(t,"__esModule",{value:!0}),t.readI32=n,t.writeI32=i,t.readI64=a,t.writeI64=function(e,t,r){i(i64_low(e),t,r),i(i64_high(e),t,r+4)},t.readF32=function(e,t){return i32_as_f32(n(e,t))},t.writeF32=function(e,t,r){i(f32_as_i32(e),t,r)},t.readF64=function(e,t){return i64_as_f64(a(e,t))},t.writeF64=function(e,t,r){var n=f64_as_i64(e);i(i64_low(n),t,r),i(i64_high(n),t,r+4)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=" ",i=" ",a=" ";t.indent=function(e,t){for(;t>=4;)e.push(a),t-=4;t>=2&&(e.push(i),t-=2),t&&e.push(n)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=47;function i(e){for(var t,r=0,i=e.length;r+10||i=0;)if(e.charCodeAt(a)==n){r-a==3&&46==e.charCodeAt(a+1)&&46==e.charCodeAt(a+2)||(e=t?e.substring(0,a):e.substring(0,a)+e.substring(r+3),i-=r+3-a,r=a-1);break}if(a<0&&r>0&&(2!=r||46!=e.charCodeAt(0)||46!=e.charCodeAt(1))){i=(e=e.substring(r+4)).length;continue}}}r++}return i>0?e:"."}function a(e){for(var t=e.length;--t>0;)if(e.charCodeAt(t)==n)return e.substring(0,t);return"."}t.normalizePath=i,t.resolvePath=function(e,t){return e.startsWith("std/")?e:i(a(t)+String.fromCharCode(n)+e)},t.dirname=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NULL=0]="NULL",e[e.LINEFEED=10]="LINEFEED",e[e.CARRIAGERETURN=13]="CARRIAGERETURN",e[e.LINESEPARATOR=8232]="LINESEPARATOR",e[e.PARAGRAPHSEPARATOR=8233]="PARAGRAPHSEPARATOR",e[e.NEXTLINE=133]="NEXTLINE",e[e.SPACE=32]="SPACE",e[e.NONBREAKINGSPACE=160]="NONBREAKINGSPACE",e[e.ENQUAD=8192]="ENQUAD",e[e.EMQUAD=8193]="EMQUAD",e[e.ENSPACE=8194]="ENSPACE",e[e.EMSPACE=8195]="EMSPACE",e[e.THREEPEREMSPACE=8196]="THREEPEREMSPACE",e[e.FOURPEREMSPACE=8197]="FOURPEREMSPACE",e[e.SIXPEREMSPACE=8198]="SIXPEREMSPACE",e[e.FIGURESPACE=8199]="FIGURESPACE",e[e.PUNCTUATIONSPACE=8200]="PUNCTUATIONSPACE",e[e.THINSPACE=8201]="THINSPACE",e[e.HAIRSPACE=8202]="HAIRSPACE",e[e.ZEROWIDTHSPACE=8203]="ZEROWIDTHSPACE",e[e.NARROWNOBREAKSPACE=8239]="NARROWNOBREAKSPACE",e[e.IDEOGRAPHICSPACE=12288]="IDEOGRAPHICSPACE",e[e.MATHEMATICALSPACE=8287]="MATHEMATICALSPACE",e[e.OGHAM=5760]="OGHAM",e[e._=95]="_",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.AMPERSAND=38]="AMPERSAND",e[e.ASTERISK=42]="ASTERISK",e[e.AT=64]="AT",e[e.BACKSLASH=92]="BACKSLASH",e[e.BACKTICK=96]="BACKTICK",e[e.BAR=124]="BAR",e[e.CARET=94]="CARET",e[e.CLOSEBRACE=125]="CLOSEBRACE",e[e.CLOSEBRACKET=93]="CLOSEBRACKET",e[e.CLOSEPAREN=41]="CLOSEPAREN",e[e.COLON=58]="COLON",e[e.COMMA=44]="COMMA",e[e.DOLLAR=36]="DOLLAR",e[e.DOT=46]="DOT",e[e.DOUBLEQUOTE=34]="DOUBLEQUOTE",e[e.EQUALS=61]="EQUALS",e[e.EXCLAMATION=33]="EXCLAMATION",e[e.GREATERTHAN=62]="GREATERTHAN",e[e.HASH=35]="HASH",e[e.LESSTHAN=60]="LESSTHAN",e[e.MINUS=45]="MINUS",e[e.OPENBRACE=123]="OPENBRACE",e[e.OPENBRACKET=91]="OPENBRACKET",e[e.OPENPAREN=40]="OPENPAREN",e[e.PERCENT=37]="PERCENT",e[e.PLUS=43]="PLUS",e[e.QUESTION=63]="QUESTION",e[e.SEMICOLON=59]="SEMICOLON",e[e.SINGLEQUOTE=39]="SINGLEQUOTE",e[e.SLASH=47]="SLASH",e[e.TILDE=126]="TILDE",e[e.BACKSPACE=8]="BACKSPACE",e[e.FORMFEED=12]="FORMFEED",e[e.BYTEORDERMARK=65279]="BYTEORDERMARK",e[e.TAB=9]="TAB",e[e.VERTICALTAB=11]="VERTICALTAB"}(t.CharCode||(t.CharCode={})),t.isLineBreak=function(e){switch(e){case 10:case 13:case 8232:case 8233:return!0;default:return!1}},t.isWhiteSpace=function(e){switch(e){case 32:case 9:case 11:case 12:case 160:case 133:case 5760:case 8239:case 8287:case 12288:case 65279:return!0;default:return e>=8192&&e<=8203}},t.isDecimalDigit=function(e){return e>=48&&e<=57},t.isOctalDigit=function(e){return e>=48&&e<=55},t.isIdentifierStart=function(e){return e>=65&&e<=90||e>=97&&e<=122||36==e||95==e||e>127&&function(e){return!(e<0||e>65535)&&a(e,n)}(e)},t.isKeywordCharacter=function(e){return e>=97&&e<=122},t.isIdentifierPart=function(e){return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||36==e||95==e||e>127&&function(e){return!(e<0||e>65535)&&a(e,i)}(e)};var n=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1319,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2208,2208,2210,2220,2308,2361,2365,2365,2384,2384,2392,2401,2417,2423,2425,2431,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3133,3160,3161,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3424,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6176,6263,6272,6312,6314,6314,6320,6389,6400,6428,6480,6509,6512,6516,6528,6571,6593,6599,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7401,7404,7406,7409,7413,7414,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11823,11823,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42647,42656,42735,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43648,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44002,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],i=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1155,1159,1162,1319,1329,1366,1369,1369,1377,1415,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1520,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2048,2093,2112,2139,2208,2208,2210,2220,2276,2302,2304,2403,2406,2415,2417,2423,2425,2431,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024,3031,3031,3046,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3161,3168,3171,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311,3313,3314,3330,3331,3333,3340,3342,3344,3346,3386,3389,3396,3398,3400,3402,3406,3415,3415,3424,3427,3430,3439,3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4957,4959,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5908,5920,5940,5952,5971,5984,5996,5998,6e3,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6263,6272,6314,6320,6389,6400,6428,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6617,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7376,7378,7380,7414,7424,7654,7676,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8204,8205,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775,11823,11823,12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12442,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42647,42655,42737,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43047,43072,43123,43136,43204,43216,43225,43232,43255,43259,43259,43264,43309,43312,43347,43360,43388,43392,43456,43471,43481,43520,43574,43584,43597,43600,43609,43616,43638,43642,43643,43648,43714,43739,43741,43744,43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65062,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500];function a(e,t){if(e2?(r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),p.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,_.range,"1",p.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"2",p.length.toString(10)),f.createUnreachable()):r&&1==r.length?(y=e.compileExpression(p[0],e.options.usizeType,1,0),(x=2==p.length?h(e,p[1]):0)<0?f.createUnreachable():(e.currentType=r[0],f.createLoad(r[0].byteSize,r[0].is(5),y,r[0].is(4)&&d.is(4)&&d.size>r[0].size?(e.currentType=d).toNativeType():(e.currentType=r[0]).toNativeType(),x))):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),f.createUnreachable());case"store":if(e.currentType=a.Type.void,p.length<2||p.length>3)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),p.length<2?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,_.range,"2",p.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"3",p.length.toString(10)),f.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),f.createUnreachable();y=e.compileExpression(p[0],e.options.usizeType,1,0),g=e.compileExpression(p[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(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",p.length.toString(10)),f.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),f.createUnreachable();var R;if(!(R=r[0].classReference))return e.error(n.DiagnosticCode.Operation_not_supported,_.range),f.createUnreachable();var x=void 0;if(p.length){if(p[0].kind!=i.NodeKind.LITERAL||p[0].literalKind!=i.LiteralKind.STRING)return e.error(n.DiagnosticCode.String_literal_expected,p[0].range),f.createUnreachable();var F=p[0].value,D=R.members?R.members.get(F):null;if(!D||D.kind!=o.ElementKind.FIELD)return e.error(n.DiagnosticCode.Type_0_has_no_property_1,p[0].range,R.internalName,F),f.createUnreachable();x=D.memoryOffset}else x=R.currentMemoryOffset;return e.options.isWasm64?d.is(4)&&d.size<=32?(e.currentType=a.Type.u32,f.createI32(x)):f.createI64(x):d.is(4)&&64==d.size?(e.currentType=a.Type.u64,f.createI64(x)):f.createI32(x);case"select":if(3!=p.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"3",p.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(p[0],r[0],1,0)}else y=e.compileExpressionRetainType(p[0],a.Type.i32,0);I=e.currentType;switch(g=e.compileExpression(p[1],I,1,0),E=e.makeIsTrueish(e.compileExpressionRetainType(p[2],a.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(n.DiagnosticCode.Operation_not_supported,_.range),T=f.createUnreachable()}return T;case"unreachable":return 0!=p.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"0",p.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),f.createUnreachable();case"current_memory":return e.currentType=a.Type.i32,0!=p.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"0",p.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),f.createHost(s.HostOp.CurrentMemory);case"grow_memory":return e.currentType=a.Type.i32,1!=p.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"0",p.length.toString(10)),y=f.createUnreachable()):y=e.compileExpression(p[0],a.Type.i32,1,0),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),f.createHost(s.HostOp.GrowMemory,null,[y]);case"move_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),3!=p.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"3",p.length.toString(10)),e.currentType=a.Type.void,f.createUnreachable();throw y=e.compileExpression(p[0],e.options.usizeType,1,0),g=e.compileExpression(p[1],e.options.usizeType,1,0),E=e.compileExpression(p[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"set_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),3!=p.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"3",p.length.toString(10)),e.currentType=a.Type.void,f.createUnreachable();throw y=e.compileExpression(p[0],e.options.usizeType,1,0),g=e.compileExpression(p[1],a.Type.u32,1,0),E=e.compileExpression(p[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?1!=p.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",p.length.toString(10)),e.currentType=r[0],f.createUnreachable()):(y=e.compileExpressionRetainType(p[0],r[0],0),e.currentType=r[0],e.currentType.size!=r[0].size?(e.error(n.DiagnosticCode.Operation_not_supported,_.range),f.createUnreachable()):y):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),f.createUnreachable());case"assert":if(p.length<1||p.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r.length.toString(10))),p.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,_.range,"1",p.length.toString(10)):p.length>2&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"2",p.length.toString(10)),f.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(p[0],r[0],1,1)}else y=e.compileExpressionRetainType(p[0],a.Type.bool,1);I=e.currentType;if(e.currentType=I.nonNullableType,e.options.noAssert)return d==a.Type.void?(e.currentType=a.Type.void,f.createNop()):y;var B=m(e,2==p.length?p[1]:null,_);if(e.currentType=I.nonNullableType,d==a.Type.void){switch(e.currentType.kind){default:T=f.createIf(f.createUnary(s.UnaryOp.EqzI32,y),B);break;case 3:case 8:T=f.createIf(f.createUnary(s.UnaryOp.EqzI64,y),B);break;case 4:case 9:T=f.createIf(f.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,y),B);break;case 11:T=f.createIf(f.createBinary(s.BinaryOp.EqF32,y,f.createF32(0)),B);break;case 12:T=f.createIf(f.createBinary(s.BinaryOp.EqF64,y,f.createF64(0)),B);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,_.range),T=B}e.currentType=a.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,s.NativeType.I32),B);break;case 2:case 7:default:N=e.currentFunction.getAndFreeTempLocal(a.Type.i32,!1);T=f.createIf(f.createTeeLocal(N.index,y),f.createGetLocal(N.index,s.NativeType.I32),B);break;case 3:case 8:N=e.currentFunction.getAndFreeTempLocal(a.Type.i64,!1);T=f.createIf(f.createUnary(s.UnaryOp.EqzI64,f.createTeeLocal(N.index,y)),B,f.createGetLocal(N.index,s.NativeType.I64));break;case 4:case 9:N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);T=f.createIf(f.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,f.createTeeLocal(N.index,y)),B,f.createGetLocal(N.index,e.options.nativeSizeType));break;case 11:N=e.currentFunction.getAndFreeTempLocal(a.Type.f32,!1);T=f.createIf(f.createBinary(s.BinaryOp.EqF32,f.createTeeLocal(N.index,y),f.createF32(0)),B,f.createGetLocal(N.index,s.NativeType.F32));break;case 12:N=e.currentFunction.getAndFreeTempLocal(a.Type.f64,!1);T=f.createIf(f.createBinary(s.BinaryOp.EqF64,f.createTeeLocal(N.index,y),f.createF64(0)),B,f.createGetLocal(N.index,s.NativeType.F64));break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,_.range),T=B}return T;case"unchecked":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=p.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",p.length.toString(10)),f.createUnreachable()):((O=e.currentFunction.flow).set(4096),T=e.compileExpressionRetainType(p[0],d,0),O.unset(4096),T);case"call_indirect":if(p.length<1)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,_.range,"1",p.length.toString(10)),f.createUnreachable();var U=void 0;if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r.length.toString(10)),f.createUnreachable();U=r[0]}else U=d;if(y=e.compileExpressionRetainType(p[0],a.Type.u32,0),7!=e.currentType.kind)return e.error(n.DiagnosticCode.Operation_not_supported,p[0].range),f.createUnreachable();for(var P=p.length-1,w=new Array(P),M=new Array(P+1),G=U.toNativeType(),K=new Array(P),z=0;z1&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,i.range,"1",t.length.toString(10)),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"1",r.length.toString(10)),null}function h(e,t){var r,i;return e.options.isWasm64?(r=e.precomputeExpression(t,a.Type.usize64,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I64||0!=s.getConstValueI64High(r)||(i=s.getConstValueI64Low(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)):(r=e.precomputeExpression(t,a.Type.usize32,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I32||(i=s.getConstValueI32(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)),i}t.compileCall=p;var d="allocate_memory";t.compileAllocate=function(e,t,r){var i=e.program;assert(t.program==i);var a=e.module,s=e.options,c=i.elementsLookup.get(d);if(!c)return i.error(n.DiagnosticCode.Cannot_find_name_0,r.range,d),i.info(n.DiagnosticCode.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf,r.range),a.createUnreachable();if(c.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.error(n.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,c.internalName),a.createUnreachable();var p=e.resolver.resolveFunction(c,null);return p&&e.compileFunction(p)?(e.currentType=t.type,a.createCall(p.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],s.nativeSizeType)):a.createUnreachable()};var _="abort";function m(e,t,r){var n=e.program,i=e.module,c=n.typesLookup.get("string");if(!c)return i.createUnreachable();var p=n.elementsLookup.get(_);if(!p||p.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.createUnreachable();var l=e.resolver.resolveFunction(p,null);if(!l||!e.compileFunction(l))return i.createUnreachable();var u=null!=t?e.compileExpression(t,c,1,0):c.toNativeZero(i),h=e.compileStaticString(r.range.source.normalizedPath);return e.currentType=a.Type.void,i.createBlock(null,[i.createCallImport(l.internalName,[u,h,i.createI32(r.range.line),i.createI32(r.range.column)],s.NativeType.None),i.createUnreachable()])}t.compileAbort=m},function(t,r){t.exports=e},function(e,t,r){(function(e){const t=e.Binaryen||r(24);for(var n in t)(n.startsWith("_Binaryen")||n.startsWith("_Relooper"))&&(e[n]=t[n]);e.allocate_memory=function(e){return e?t._malloc(e):0},e.free_memory=function(e){e&&t._free(e)},e.move_memory=function(e,r,n){return t._memmove(e,r,n)},e.store=function(e,r){t.HEAPU8[e]=r},e.load=function(e){return t.HEAPU8[e]};const i=r(4).Module;i.prototype.toText=function(){return new t.Module(this.ref).emitText()},i.prototype.toAsmjs=function(){return new t.Module(this.ref).emitAsmjs()}}).call(this,r(7))},function(e,t){e.exports=(e=>{var t=new Uint8Array(0),r=0;e.allocate_memory=function(e){if(!(e>>>=0))return 0;if(r+e>t.length){var n=t;(t=new Uint8Array(Math.max(65536,t.length+e,2*t.length))).set(n)}var i=r;return 7&(r+=e)&&(r=1+(7|r)),i},e.free_memory=function(e){},e.move_memory=function(e,r,n){t.copyWithin(e,r,r+n)},e.store=function(e,r,n){t[e+(0|n)]=r},e.load=function(e,r){return t[e+(0|r)]}})},function(e,t,r){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self;function n(){Error.captureStackTrace?Error.captureStackTrace(this,n):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function i(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,i):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}t.ASC_TARGET=0,Object.defineProperties(t.i8=function(e){return e<<24>>24},{MIN_VALUE:{value:-128,writable:!1},MAX_VALUE:{value:127,writable:!1}}),Object.defineProperties(t.i16=function(e){return e<<16>>16},{MIN_VALUE:{value:-32768,writable:!1},MAX_VALUE:{value:32767,writable:!1}}),Object.defineProperties(t.i32=t.isize=function(e){return 0|e},{MIN_VALUE:{value:-2147483648,writable:!1},MAX_VALUE:{value:2147483647,writable:!1}}),Object.defineProperties(t.u8=function(e){return 255&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:255,writable:!1}}),Object.defineProperties(t.u16=function(e){return 65535&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:65535,writable:!1}}),Object.defineProperties(t.u32=t.usize=function(e){return e>>>0},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:4294967295,writable:!1}}),Object.defineProperties(t.bool=function(e){return!!e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:1,writable:!1}}),Object.defineProperties(t.f32=function(e){return Math.fround(e)},{MIN_VALUE:{value:Math.fround(-3.40282347e38),writable:!1},MAX_VALUE:{value:Math.fround(3.40282347e38),writable:!1},MIN_POSITIVE_VALUE:{value:Math.fround(1.175494351e-38),writable:!1},MIN_SAFE_INTEGER:{value:-16777215,writable:!1},MAX_SAFE_INTEGER:{value:16777215,writable:!1},EPSILON:{value:Math.fround(1.1920929e-7),writable:!1}}),Object.defineProperties(t.f64=function(e){return+e},{MIN_VALUE:{value:-1.7976931348623157e308,writable:!1},MAX_VALUE:{value:1.7976931348623157e308,writable:!1},MIN_POSITIVE_VALUE:{value:2.2250738585072014e-308,writable:!1},MIN_SAFE_INTEGER:{value:-9007199254740991,writable:!1},MAX_SAFE_INTEGER:{value:9007199254740991,writable:!1},EPSILON:{value:2.220446049250313e-16,writable:!1}}),t.clz=Math.clz32,t.ctz=function(e){var t=Math.clz32(e&-e);return e?31-t:t},t.popcnt=function(e){return 16843009*((e=(858993459&(e-=e>>>1&1431655765))+(e>>>2&858993459))+(e>>>4)&252645135)>>>24},t.rotl=function(e,t){return e<<(t&=31)|e>>>32-t},t.rotr=function(e,t){return e>>>(t&=31)|e<<32-t},t.abs=Math.abs,t.max=Math.max,t.min=Math.min,t.ceil=Math.ceil,t.floor=Math.floor,t.nearest=function(e){return.5===Math.abs(e-Math.trunc(e))?2*Math.round(.5*e):Math.round(e)},t.select=function(e,t,r){return r?e:t},t.sqrt=Math.sqrt,t.trunc=Math.trunc,t.copysign=function(e,t){return Math.abs(e)*Math.sign(t)},t.bswap=function(e){var t=e>>8&16711935,r=(16711935&e)<<8;return(t=(e=t|r)>>16&65535)|(r=(65535&e)<<16)},t.bswap16=function(e){return e<<8&65280|e>>8&255|4294901760&e},n.prototype=Object.create(Error.prototype),n.prototype.name="UnreachableError",n.prototype.message="unreachable",t.unreachable=function(){throw new n},i.prototype=Object.create(Error.prototype),i.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new i(t)},t.changetype=function(e){return e},t.parseI32=function(e,t){return 0|parseInt(e,void 0)},String.fromCharCodes=function(e){return String.fromCharCode.apply(String,e)},String.fromCodePoints=function(e){return String.fromCodePoint.apply(String,e)},t.isInteger=Number.isInteger,t.isFloat=function(e){return"number"==typeof e},t.isReference=function(e){return"object"==typeof e||"string"==typeof e},t.isString=function(e){return"string"==typeof e||e instanceof String},t.isArray=Array.isArray,t.unchecked=function(e){return e},t.fmod=function(e,t){return e%t},t.fmodf=function(e,t){return Math.fround(e%t)},t.JSMath=Math,r(26)(t)}).call(this,r(7))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(27),r(25),r(18),r(17)},function(e,t,r){r(28),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 7a37cc0b..02326d53 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/./node_modules/long/src/long.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./src/glue/js/float.js","webpack://assemblyscript/./src/util/binary.ts","webpack://assemblyscript/./src/util/text.ts","webpack://assemblyscript/./src/util/path.ts","webpack://assemblyscript/./src/util/charcode.ts","webpack://assemblyscript/./src/builtins.ts","webpack://assemblyscript/external \"binaryen\"","webpack://assemblyscript/./src/glue/js/binaryen.js","webpack://assemblyscript/./std/portable/memory.js","webpack://assemblyscript/./std/portable/index.js","webpack://assemblyscript/./src/glue/js/index.ts"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__24__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","CommonFlags","PATH_DELIMITER","PARENT_SUBST","GETTER_PREFIX","SETTER_PREFIX","INSTANCE_DELIMITER","STATIC_DELIMITER","INNER_DELIMITER","LIBRARY_SUBST","LIBRARY_PREFIX","FILESPACE_PREFIX","DiagnosticCategory","diagnosticMessages_generated_1","util_1","diagnosticMessages_generated_2","diagnosticCategoryToString","category","INFO","WARNING","ERROR","assert","diagnosticCategoryToColor","COLOR_BLUE","COLOR_YELLOW","COLOR_RED","DiagnosticCode","diagnosticCodeToString","COLOR_RESET","DiagnosticMessage","code","message","range","arg0","arg1","arg2","replace","createInfo","createWarning","createError","withRange","toString","source","normalizedPath","line","column","formatDiagnosticContext","useColors","text","len","length","start","end","isLineBreak","charCodeAt","sb","substring","push","join","formatDiagnosticMessage","showContext","DiagnosticEmitter","diagnostics","Array","emitDiagnostic","info","warning","error","common_1","tokenizer_1","Token","Range","NodeKind","nodeIsConstantValue","kind","LITERAL","NULL","TRUE","FALSE","nodeIsCallable","IDENTIFIER","CALL","ELEMENTACCESS","PROPERTYACCESS","nodeIsGenericCallable","Node","parent","flags","NONE","is","flag","isAny","set","createType","typeArguments","isNullable","type","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","extendsType","elem","TypeParameterNode","createParameter","initializer","ParameterNode","parameterKind","createSignature","parameters","returnType","explicitThisType","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","arguments","decoratorKind","decoratorNameToKind","createComment","node","CommentNode","commentKind","expr","IdentifierExpression","createEmptyIdentifierExpression","createArrayLiteralExpression","elements","ArrayLiteralExpression","elementExpressions","nodes","k","setParentIfNotNull","createAssertionExpression","assertionKind","expression","toType","AssertionExpression","createBinaryExpression","operator","left","right","BinaryExpression","createCallExpression","typeArgs","CallExpression","createClassExpression","declaration","ClassExpression","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","element","ElementAccessExpression","elementExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","FunctionExpression","ARROW","createInstanceOfExpression","isType","InstanceOfExpression","createIntegerLiteralExpression","IntegerLiteralExpression","createNewExpression","NewExpression","createNullExpression","NullExpression","createObjectLiteralExpression","names","values","ObjectLiteralExpression","createParenthesizedExpression","ParenthesizedExpression","createPropertyAccessExpression","PropertyAccessExpression","createRegexpLiteralExpression","pattern","RegexpLiteralExpression","patternFlags","createTernaryExpression","condition","ifThen","ifElse","TernaryExpression","createStringLiteralExpression","StringLiteralExpression","createSuperExpression","SuperExpression","createThisExpression","ThisExpression","createTrueExpression","TrueExpression","createUnaryPostfixExpression","operand","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","statements","BlockStatement","createBreakStatement","label","BreakStatement","createClassDeclaration","identifier","typeParameters","implementsTypes","members","decorators","ClassDeclaration","createContinueStatement","ContinueStatement","createDoStatement","statement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","path","ExportStatement","normalizePath","startsWith","resolvePath","internalPath","mangleInternalPath","createExportImportStatement","externalName","ExportImportStatement","createExportMember","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","ifTrue","ifFalse","IfStatement","createImportStatement","decls","ImportStatement","declarations","namespaceName","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createFunctionDeclaration","signature","body","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createNamespaceDeclaration","NamespaceDeclaration","createReturnStatement","ReturnStatement","createSwitchStatement","cases","SwitchStatement","createSwitchCase","SwitchCase","createThrowStatement","ThrowStatement","createTryStatement","catchVariable","catchStatements","finallyStatements","TryStatement","createTypeDeclaration","alias","TypeDeclaration","createVariableStatement","VariableStatement","createVariableDeclaration","VariableDeclaration","createVoidStatement","VoidStatement","createWhileStatement","WhileStatement","CommonTypeNode","_super","__extends","_this","apply","TYPE","TYPEPARAMETER","ParameterKind","PARAMETER","implicitFieldDeclaration","DecoratorKind","SIGNATURE","nameStr","EXTERNAL","GLOBAL","INLINE","OPERATOR","SEALED","UNMANAGED","propStr","OPERATOR_BINARY","OPERATOR_PREFIX","OPERATOR_POSTFIX","CUSTOM","DECORATOR","CommentKind","COMMENT","Expression","LiteralKind","LiteralExpression","literalKind","ARRAY","AssertionKind","ASSERTION","BINARY","CLASS","COMMA","CONSTRUCTOR","FLOAT","FUNCTION","INSTANCEOF","INTEGER","NEW","OBJECT","PARENTHESIZED","REGEXP","TERNARY","STRING","SUPER","THIS","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","isLastStatement","BLOCK","FUNCTIONDECLARATION","METHODDECLARATION","SourceKind","Statement","Source","SOURCE","tokenizer","debugInfoIndex","exportPaths","sourceKind","pos","lastIndexOf","simplePath","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","VARIABLE","NAMESPACEDECLARATION","EXPORT","isTopLevelExport","CLASSDECLARATION","STATIC","needsExplicitExport","member","VariableLikeDeclarationStatement","BREAK","CONTINUE","DO","EMPTY","ENUMDECLARATION","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","FIELDDECLARATION","parameterIndex","FOR","IF","IMPORTDECLARATION","IMPORT","INTERFACEDECLARATION","RETURN","SWITCHCASE","SWITCH","THROW","TRY","TYPEDECLARATION","VARIABLEDECLARATION","VOID","WHILE","asGlobal","endsWith","findDecorator","decorator","__export","NativeType","ExpressionId","compiler_1","_BinaryenTypeNone","_BinaryenTypeInt32","_BinaryenTypeInt64","_BinaryenTypeFloat32","_BinaryenTypeFloat64","_BinaryenTypeUnreachable","_BinaryenTypeAuto","_BinaryenInvalidId","_BinaryenBlockId","_BinaryenIfId","_BinaryenLoopId","_BinaryenBreakId","_BinaryenSwitchId","_BinaryenCallId","_BinaryenCallImportId","_BinaryenCallIndirectId","_BinaryenGetLocalId","_BinaryenSetLocalId","_BinaryenGetGlobalId","_BinaryenSetGlobalId","_BinaryenLoadId","_BinaryenStoreId","_BinaryenConstId","_BinaryenUnaryId","_BinaryenBinaryId","_BinaryenSelectId","_BinaryenDropId","_BinaryenReturnId","_BinaryenHostId","_BinaryenNopId","_BinaryenUnreachableId","_BinaryenAtomicCmpxchgId","_BinaryenAtomicRMWId","_BinaryenAtomicWaitId","_BinaryenAtomicWakeId","UnaryOp","_BinaryenClzInt32","_BinaryenCtzInt32","_BinaryenPopcntInt32","_BinaryenNegFloat32","_BinaryenAbsFloat32","_BinaryenCeilFloat32","_BinaryenFloorFloat32","_BinaryenTruncFloat32","_BinaryenNearestFloat32","_BinaryenSqrtFloat32","_BinaryenEqZInt32","_BinaryenClzInt64","_BinaryenCtzInt64","_BinaryenPopcntInt64","_BinaryenNegFloat64","_BinaryenAbsFloat64","_BinaryenCeilFloat64","_BinaryenFloorFloat64","_BinaryenTruncFloat64","_BinaryenNearestFloat64","_BinaryenSqrtFloat64","_BinaryenEqZInt64","_BinaryenExtendSInt32","_BinaryenExtendUInt32","_BinaryenWrapInt64","_BinaryenTruncSFloat32ToInt32","_BinaryenTruncSFloat32ToInt64","_BinaryenTruncUFloat32ToInt32","_BinaryenTruncUFloat32ToInt64","_BinaryenTruncSFloat64ToInt32","_BinaryenTruncSFloat64ToInt64","_BinaryenTruncUFloat64ToInt32","_BinaryenTruncUFloat64ToInt64","_BinaryenReinterpretFloat32","_BinaryenReinterpretFloat64","_BinaryenConvertSInt32ToFloat32","_BinaryenConvertSInt32ToFloat64","_BinaryenConvertUInt32ToFloat32","_BinaryenConvertUInt32ToFloat64","_BinaryenConvertSInt64ToFloat32","_BinaryenConvertSInt64ToFloat64","_BinaryenConvertUInt64ToFloat32","_BinaryenConvertUInt64ToFloat64","_BinaryenPromoteFloat32","_BinaryenDemoteFloat64","_BinaryenReinterpretInt32","_BinaryenReinterpretInt64","_BinaryenExtendS8Int32","_BinaryenExtendS16Int32","_BinaryenExtendS8Int64","_BinaryenExtendS16Int64","_BinaryenExtendS32Int64","BinaryOp","_BinaryenAddInt32","_BinaryenSubInt32","_BinaryenMulInt32","_BinaryenDivSInt32","_BinaryenDivUInt32","_BinaryenRemSInt32","_BinaryenRemUInt32","_BinaryenAndInt32","_BinaryenOrInt32","_BinaryenXorInt32","_BinaryenShlInt32","_BinaryenShrUInt32","_BinaryenShrSInt32","_BinaryenRotLInt32","_BinaryenRotRInt32","_BinaryenEqInt32","_BinaryenNeInt32","_BinaryenLtSInt32","_BinaryenLtUInt32","_BinaryenLeSInt32","_BinaryenLeUInt32","_BinaryenGtSInt32","_BinaryenGtUInt32","_BinaryenGeSInt32","_BinaryenGeUInt32","_BinaryenAddInt64","_BinaryenSubInt64","_BinaryenMulInt64","_BinaryenDivSInt64","_BinaryenDivUInt64","_BinaryenRemSInt64","_BinaryenRemUInt64","_BinaryenAndInt64","_BinaryenOrInt64","_BinaryenXorInt64","_BinaryenShlInt64","_BinaryenShrUInt64","_BinaryenShrSInt64","_BinaryenRotLInt64","_BinaryenRotRInt64","_BinaryenEqInt64","_BinaryenNeInt64","_BinaryenLtSInt64","_BinaryenLtUInt64","_BinaryenLeSInt64","_BinaryenLeUInt64","_BinaryenGtSInt64","_BinaryenGtUInt64","_BinaryenGeSInt64","_BinaryenGeUInt64","_BinaryenAddFloat32","_BinaryenSubFloat32","_BinaryenMulFloat32","_BinaryenDivFloat32","_BinaryenCopySignFloat32","_BinaryenMinFloat32","_BinaryenMaxFloat32","_BinaryenEqFloat32","_BinaryenNeFloat32","_BinaryenLtFloat32","_BinaryenLeFloat32","_BinaryenGtFloat32","_BinaryenGeFloat32","_BinaryenAddFloat64","_BinaryenSubFloat64","_BinaryenMulFloat64","_BinaryenDivFloat64","_BinaryenCopySignFloat64","_BinaryenMinFloat64","_BinaryenMaxFloat64","_BinaryenEqFloat64","_BinaryenNeFloat64","_BinaryenLtFloat64","_BinaryenLeFloat64","_BinaryenGtFloat64","_BinaryenGeFloat64","HostOp","_BinaryenPageSize","_BinaryenCurrentMemory","_BinaryenGrowMemory","_BinaryenHasFeature","AtomicRMWOp","_BinaryenAtomicRMWAdd","_BinaryenAtomicRMWSub","_BinaryenAtomicRMWAnd","_BinaryenAtomicRMWOr","_BinaryenAtomicRMWXor","_BinaryenAtomicRMWXchg","MemorySegment","buffer","offset","segment","Module","cachedTemporaryName","hasTemporaryFunction","cachedPrecomputeName","cachedPrecomputeNames","ref","_BinaryenModuleCreate","cachedByValue","allocate_memory","createFrom","cArr","allocU8Array","_BinaryenModuleRead","free_memory","changetype","addFunctionType","result","paramTypes","cStr","allocString","allocI32Array","_BinaryenAddFunctionType","getFunctionTypeBySignature","_BinaryenGetFunctionTypeBySignature","removeFunctionType","_BinaryenRemoveFunctionType","createI32","out","_BinaryenLiteralInt32","_BinaryenConst","createI64","valueLow","valueHigh","_BinaryenLiteralInt64","createF32","_BinaryenLiteralFloat32","createF64","_BinaryenLiteralFloat64","createUnary","op","_BinaryenUnary","createBinary","_BinaryenBinary","createHost","operands","allocPtrArray","_BinaryenHost","createGetLocal","index","_BinaryenGetLocal","createTeeLocal","_BinaryenTeeLocal","createGetGlobal","_BinaryenGetGlobal","createLoad","bytes","signed","ptr","_BinaryenLoad","createStore","_BinaryenStore","createAtomicLoad","_BinaryenAtomicLoad","createAtomicStore","_BinaryenAtomicStore","createAtomicRMW","_BinaryenAtomicRMW","createAtomicCmpxchg","expected","replacement","_BinaryenAtomicCmpxchg","createAtomicWait","timeout","expectedType","_BinaryenAtomicWait","createAtomicWake","wakeCount","_BinaryenAtomicWake","createSetLocal","_BinaryenSetLocal","createSetGlobal","_BinaryenSetGlobal","createBlock","children","None","_BinaryenBlock","createBreak","_BinaryenBreak","createDrop","_BinaryenDrop","createLoop","_BinaryenLoop","createIf","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","defaultName","numNames","strs","_BinaryenSwitch","createCall","target","_BinaryenCall","createCallImport","_BinaryenCallImport","createCallIndirect","typeName","_BinaryenCallIndirect","createUnreachable","_BinaryenUnreachable","addGlobal","mutable","_BinaryenAddGlobal","addFunction","varTypes","_BinaryenAddFunction","removeFunction","_BinaryenRemoveFunction","addTemporaryFunction","tempName","typeRef","removeTemporaryFunction","addFunctionExport","internalName","cStr1","cStr2","_BinaryenAddFunctionExport","addTableExport","_BinaryenAddTableExport","addMemoryExport","_BinaryenAddMemoryExport","addGlobalExport","_BinaryenAddGlobalExport","removeExport","_BinaryenRemoveExport","addFunctionImport","externalModuleName","externalBaseName","functionType","cStr3","_BinaryenAddFunctionImport","addTableImport","_BinaryenAddTableImport","addMemoryImport","_BinaryenAddMemoryImport","addGlobalImport","globalType","_BinaryenAddGlobalImport","removeImport","_BinaryenRemoveImport","setMemory","initial","maximum","segments","exportName","segs","offs","sizs","Target","WASM64","i64_low","i64_high","cArr1","cArr2","cArr3","_BinaryenSetMemory","setFunctionTable","funcs","_BinaryenSetFunctionTable","setStart","func","_BinaryenSetStart","setOptimizeLevel","level","_BinaryenSetOptimizeLevel","setShrinkLevel","_BinaryenSetShrinkLevel","setDebugInfo","on","_BinaryenSetDebugInfo","optimize","_BinaryenFunctionOptimize","_BinaryenModuleOptimize","runPasses","passes","_BinaryenFunctionRunPasses","_BinaryenModuleRunPasses","precomputeFunction","validate","_BinaryenModuleValidate","interpret","_BinaryenModuleInterpret","toBinary","sourceMapUrl","binaryPtr","sourceMapPtr","_BinaryenModuleAllocateAndWrite","readInt","binaryBytes","ret","BinaryModule","output","Uint8Array","load","readBuffer","sourceMap","readString","toText","Error","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","i32","MAX_VALUE","nested1","nested2","_BinaryenExpressionGetId","Const","_BinaryenExpressionGetType","I32","_BinaryenConstGetValueI32","I64","_BinaryenConstGetValueI64Low","_BinaryenConstGetValueI64High","F32","_BinaryenConstGetValueF32","F64","_BinaryenConstGetValueF64","GetLocal","_BinaryenGetLocalGetIndex","GetGlobal","globalName","_BinaryenGetGlobalGetName","Load","_BinaryenLoadGetPtr","_BinaryenLoadIsAtomic","_BinaryenLoadGetBytes","_BinaryenLoadGetOffset","_BinaryenLoadIsSigned","_BinaryenLoadGetAlign","Unary","_BinaryenUnaryGetValue","_BinaryenUnaryGetOp","Binary","_BinaryenBinaryGetLeft","_BinaryenBinaryGetRight","_BinaryenBinaryGetOp","addDebugInfoFile","_BinaryenModuleAddDebugInfoFileName","getDebugInfoFile","_BinaryenModuleGetDebugInfoFileName","setDebugLocation","fileIndex","lineNumber","columnNumber","_BinaryenFunctionSetDebugLocation","MAX_MEMORY_WASM32","MAX_MEMORY_WASM64","getExpressionId","getExpressionType","getConstValueI32","getConstValueI64Low","getConstValueI64High","getConstValueF32","getConstValueF64","getGetLocalIndex","getSetLocalIndex","_BinaryenSetLocalGetIndex","getSetLocalValue","_BinaryenSetLocalGetValue","isTeeLocal","_BinaryenSetLocalIsTee","getBinaryOp","getBinaryLeft","getBinaryRight","getUnaryOp","getUnaryValue","getLoadBytes","getLoadOffset","getLoadPtr","isLoadSigned","getStoreBytes","_BinaryenStoreGetBytes","getStoreOffset","_BinaryenStoreGetOffset","getStorePtr","_BinaryenStoreGetPtr","getStoreValue","_BinaryenStoreGetValue","getBlockName","_BinaryenBlockGetName","getBlockChildCount","_BinaryenBlockGetNumChildren","getBlockChild","_BinaryenBlockGetChild","getIfCondition","_BinaryenIfGetCondition","getIfTrue","_BinaryenIfGetIfTrue","getIfFalse","_BinaryenIfGetIfFalse","getLoopName","_BinaryenLoopGetName","getLoopBody","_BinaryenLoopGetBody","getBreakName","_BinaryenBreakGetName","getBreakCondition","_BinaryenBreakGetCondition","getSelectThen","_BinaryenSelectGetIfTrue","getSelectElse","_BinaryenSelectGetIfFalse","getSelectCondition","_BinaryenSelectGetCondition","getDropValue","_BinaryenDropGetValue","getReturnValue","_BinaryenReturnGetValue","getCallTarget","_BinaryenCallGetTarget","getHostOp","_BinaryenHostGetOp","getHostOperandCount","_BinaryenHostGetNumOperands","getHostOperand","_BinaryenHostGetOperand","getHostName","_BinaryenHostGetNameOperand","getFunctionBody","_BinaryenFunctionGetBody","getFunctionName","_BinaryenFunctionGetName","getFunctionParamCount","_BinaryenFunctionGetNumParams","getFunctionParamType","_BinaryenFunctionGetParam","getFunctionResultType","_BinaryenFunctionGetResult","relooper","_RelooperCreate","addBlock","_RelooperAddBlock","addBranch","from","to","_RelooperAddBranch","addBlockWithSwitch","_RelooperAddBlockWithSwitch","addBranchForSwitch","indexes","_RelooperAddBranchForSwitch","renderAndDispose","entry","labelHelper","_RelooperRenderAndDispose","u8s","numValues","idx","store","i32s","val","ptrs","str","u","stringLengthUTF8","cp","u1","u2","u3","u4","arr","String","fromCodePoints","OperatorKind","diagnostics_1","types_1","ast_1","module_1","resolver_1","QueuedImport","QueuedExport","TypeAlias","operatorKindFromDecorator","arg","INDEXED_GET","INDEXED_SET","UNCHECKED_INDEXED_GET","UNCHECKED_INDEXED_SET","ADD","SUB","MUL","POW","DIV","REM","BITWISE_AND","BITWISE_OR","BITWISE_XOR","EQ","NE","GT","GE","BITWISE_SHR","BITWISE_SHR_U","LT","LE","BITWISE_SHL","PLUS","PREFIX_INC","MINUS","PREFIX_DEC","NOT","BITWISE_NOT","POSTFIX_INC","POSTFIX_DEC","INVALID","ElementKind","DecoratorFlags","noTypesYet","Map","Program","diagnosticsOffset","elementsLookup","instancesLookup","typesLookup","typeAliases","fileLevelExports","moduleLevelExports","arrayPrototype","stringInstance","mainFunction","resolver","Resolver","sources","getSource","lookupSourceByPath","normalizedPathWithoutExtension","tmp","initialize","options","Type","i8","i16","i64","isizeType","u8","u16","u32","u64","usizeType","bool","f32","f64","void","setConstantInteger","i64_new","isWasm64","noTreeShaking","noAssert","memoryBase","optimizeLevelHint","shrinkLevelHint","hasFeature","queuedImports","queuedExports","queuedExtends","queuedImplements","filespace","Filespace","currentFilespace","j","initializeClass","initializeEnum","initializeExports","initializeFunction","initializeImports","initializeInterface","initializeNamespace","initializeTypeAlias","initializeVariables","queuedImport","tryLocateImport","localName","splice","externalNameAlt","Module_0_has_no_exported_member_1","queuedExports_1","__values","queuedExports_1_1","next","done","_c","__read","queuedExport","currentExport","isReExport","setExportAndCheckLibrary","Cannot_find_name_0","derivedPrototype","derivedDeclaration","derivedType","baseElement","resolveIdentifier","CLASS_PROTOTYPE","basePrototype","A_class_may_only_extend_another_class","globalAliases","globalAliases_1","globalAliases_1_1","_d","stringPrototype","resolveClass","has","Duplicate_identifier_0","programLevelInternalName","FUNCTION_PROTOTYPE","startFunction","GENERIC","AMBIENT","MAIN","Global","withConstantIntegerValue","setConstantFloat","withConstantFloatValue","queuedNamedExports","checkDecorators","acceptedFlags","presentFlags","decoratorKindToFlag","Duplicate_decorator","Decorator_0_is_not_valid_here","checkGlobal","parentNode","hasDecorator","BUILTIN","isLibrary","namespace","fileLevelInternalName","simpleName","ClassPrototype","numImplementsTypes","Unmanaged_classes_cannot_implement_interfaces","Operation_not_supported","MODULE_EXPORT","Export_declaration_conflicts_with_exported_declaration_of_0","isEntry","memberDeclarations","memberDeclaration","initializeField","GET","SET","initializeAccessor","initializeMethod","classPrototype","isInterface","INTERFACE_PROTOTYPE","staticField","ABSTRACT","instanceMembers","instanceField","FieldPrototype","decoratorFlags","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperatorOverloads","numArgs","firstArg","overloads","overloadPrototypes","Duplicate_function_implementation","operatorKind","String_literal_expected","Expected_0_arguments_but_got_1","internalPropertyName","propertyElement","isGetter","isNew","PROPERTY","getterPrototype","setterPrototype","Property","baseName","staticName","staticPrototype","instanceName","instancePrototype","Enum","initializeEnumValue","enm","EnumValue","initializeExport","prefix","FILESPACE","referencedName","referencedElement","seen","Set","add","initializeImport","indexPart","InterfacePrototype","parentNamespace","Namespace","existingExport","Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local","global_1","Element","program","NAMESPACE","ENUM","ENUMVALUE","constantValue","ConstantValueKind","VariableLikeElement","constantValueKind","constantIntegerValue","CONST","INLINED","constantFloatValue","Parameter","Local","LOCAL","scopedGlobal","instances","classTypeArguments","Function","contextualTypeArguments","localsByName","localsByIndex","additionalLocals","breakContext","debugLocations","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","DECLARE","localIndex","INSTANCE","local","thisType","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","_b","inheritedName","inheritedType","parameterTypes","parameterType","parameterName","getParameterName","flow","Flow","addLocal","getTempLocal","wrapped","temps","toNativeType","pop","setLocalWrapped","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","debugLocation","debugInfoRef","FunctionTarget","FUNCTION_TARGET","toSignatureString","asFunction","FIELD_PROTOTYPE","Field","FIELD","memoryOffset","Class","base","currentMemoryOffset","constructorInstance","asClass","inheritedTypeArguments_2","inheritedTypeArguments_2_1","baseType","isAssignableTo","current","lookupOverload","unchecked","uncheckedOverload","instance","overload","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","returnLabel","wrappedLocals","wrappedLocalsExt","unset","fork","branch","slice","free","scopedLocal","SCOPED","addScopedLocal","existingLocal","addScopedLocalAlias","scopedAlias","getScopedLocal","isLocalWrapped","map","ext","i64_ne","i64_and","i64_shl","i64_one","i64_zero","off","i64_or","i64_not","inherit","other","inheritConditional","inheritMutual","leftExt","rightExt","thisExt","minLength","min","canOverflow","canConversionOverflow","SetLocal","EqI32","EqI64","EqF32","EqF64","NeI32","NeI64","NeF32","NeF64","LtI32","LtU32","LtI64","LtU64","LtF32","LtF64","LeI32","LeU32","LeI64","LeU64","LeF32","LeF64","GtI32","GtU32","GtI64","GtU64","GtF32","GtF64","GeI32","GeU32","GeI64","GeU64","GeF32","GeF64","MulI32","AndI32","computeSmallIntegerMask","ShlI32","shift","size","ShrI32","ShrU32","DivU32","RemI32","RemU32","EqzI32","EqzI64","ClzI32","CtzI32","PopcntI32","MIN_VALUE","fromType","Block","last","If","Select","Call","Unreachable","fromSize","byteSize","toSize","TypeKind","TypeFlags","cachedNullableType","ceil","classReference","signatureReference","nonNullableType","isize64","isize32","usize64","usize32","computeSmallIntegerShift","targetType","classType","asNullable","signednessIsRelevant","currentClass","targetClass","targetFunction","commonCompatible","signednessIsImportant","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","typesToNativeTypes","types","numTypes","typesToString","Signature","cachedFunctionTarget","parameterNames","requiredParameters","hasRest","getDefaultParameterName","thisThisType","targetThisType","thisParameterTypes","targetParameterTypes","numParameters","thisParameterType","targetParameterType","thisReturnType","targetReturnType","makeSignatureString","includeThis","optionalStart","restIndex","cachedDefaultParameterNames","g","eval","e","window","IdentifierHandling","tokenFromKeyword","AS","ASYNC","AWAIT","CASE","CATCH","DEBUGGER","DEFAULT","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","IS","KEYOF","LET","MODULE","OF","PACKAGE","PRIVATE","PROTECTED","PUBLIC","READONLY","TYPEOF","VAR","WITH","YIELD","tokenIsAlsoIdentifier","token","operatorTokenToString","DOT_DOT_DOT","LESSTHAN","GREATERTHAN","LESSTHAN_EQUALS","GREATERTHAN_EQUALS","EQUALS_EQUALS","EXCLAMATION_EQUALS","EQUALS_EQUALS_EQUALS","EXCLAMATION_EQUALS_EQUALS","ASTERISK_ASTERISK","ASTERISK","SLASH","PERCENT","PLUS_PLUS","MINUS_MINUS","LESSTHAN_LESSTHAN","GREATERTHAN_GREATERTHAN","GREATERTHAN_GREATERTHAN_GREATERTHAN","AMPERSAND","BAR","CARET","EXCLAMATION","TILDE","AMPERSAND_AMPERSAND","BAR_BAR","EQUALS","PLUS_EQUALS","MINUS_EQUALS","ASTERISK_EQUALS","ASTERISK_ASTERISK_EQUALS","SLASH_EQUALS","PERCENT_EQUALS","LESSTHAN_LESSTHAN_EQUALS","GREATERTHAN_GREATERTHAN_EQUALS","GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS","AMPERSAND_EQUALS","BAR_EQUALS","CARET_EQUALS","a","b","Tokenizer","tokenPos","nextToken","nextTokenPos","nextTokenOnNewLine","onComment","identifierHandling","unsafeNext","maxTokenLength","STRINGLITERAL","OPENPAREN","CLOSEPAREN","isDecimalDigit","FLOATLITERAL","DOT","commentStartPos","LINE","TRIPLE","closed","_0_expected","testInteger","INTEGERLITERAL","COLON","SEMICOLON","EQUALS_GREATERTHAN","QUESTION","OPENBRACKET","CLOSEBRACKET","OPENBRACE","CLOSEBRACE","AT","isIdentifierStart","isKeywordCharacter","posBefore","isIdentifierPart","keywordToken","ALWAYS","PREFER","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skipIdentifier","skip","skipIdentifierName","mark","state","reusableState","State","discard","reset","readIdentifier","quote","Unterminated_string_literal","readEscapeSequence","Unexpected_end_of_text","readExtendedUnicodeEscape","readUnicodeEscape","fromCharCode","readRegexpPattern","escaped","Unterminated_regular_expression_literal","readRegexpFlags","Invalid_regular_expression_flags","readInteger","readHexInteger","readBinaryInteger","readOctalInteger","isOctalDigit","Octal_literals_are_not_allowed_in_strict_mode","readDecimalInteger","i64_16","sepEnd","i64_add","i64_mul","Numeric_separators_are_not_allowed_here","Multiple_consecutive_numeric_separators_are_not_permitted","Hexadecimal_digit_expected","i64_10","Digit_expected","i64_8","Octal_digit_expected","i64_2","i64_1","Binary_digit_expected","readFloat","readDecimalFloat","parseFloat","readHexFloat","remain","value32","invalid","An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive","Unterminated_Unicode_escape_sequence","finish","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","resolveFunction","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","currentInlineFunction","currentEnum","currentType","memorySegments","stringSegments","functionTable","argcVar","argcSet","f32ModInstance","f64ModInstance","f32PowInstance","f64PowInstance","max","compile","startFunctionInstance","startFunctionBody","compileSource","funcRef","ensureFunctionType","i64_align","numPages","i64_shr_u","functionTableSize","functionTableExported","entries","compileSourceByPath","File_0_not_found","COMPILED","isGeneric","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","initExpr","resolvedType","compileExpressionRetainType","Type_0_is_not_assignable_to_type_1","nativeType","isConstant","MODULE_IMPORT","mangleImportName","initializeInStart","compileInlineConstant","compileExpression","precomputeExpressionRef","Compiling_constant_with_non_constant_initializer_as_mutable","mangleExportName","isTopLevel","compileEnum","previousValue","initInStart","valueDeclaration","AddI32","Cannot_export_a_mutable_global","compileFunctionUsingTypeArguments","compileFunction","resultType","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","isConstructor","stmts","compileStatements","unshift","nativeSizeType","makeConditionalAllocate","A_function_whose_declared_type_is_not_void_must_return_a_value","ensureTrampoline","ensureArgcSet","compileInterfaceDeclaration","compileNamespace","compileClassUsingTypeArguments","internalExportName","functionInstance","functionDeclaration","globalDeclaration","compileClass","staticMembers","setter","ctorInstance","getterName","setterName","addMemorySegment","alignment","ensureFunctionTableEntry","TRAMPOLINE","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileVoidStatement","compileWhileStatement","addDebugLocation","numStatements","Nop","A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement","A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement","condExpr","makeIsTrueish","terminated","repeatLabel","alwaysTrue","condPre","incrExpr","bodyExpr","usesContinue","breakBlock","repeatBlock","GENERIC_CONTEXT","condExprPrecomp","ifTrueFlow","ifTrueExpr","ifFalseExpr","ifFalseFlow","numCases","tempLocal","tempLocalIndex","breaks","breakIndex","defaultIndex","currentBlock","alwaysReturns","alwaysReturnsWrapped","alwaysThrows","alwaysAllocates","isLast","nextLabel","count","compileAbort","isKnownGlobal","numDeclarations","initializers","isInlined","_const_declarations_must_be_initialized","compileAssignmentWithValue","contextualType","retainType","mask","conversionKind","wrapMode","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileInstanceOfExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","ensureSmallIntegerWrap","precomputeExpression","Conversion_from_type_0_to_1_requires_an_explicit_cast","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","leftExpr","leftType","rightExpr","rightType","commonType","compound","compileBinaryOverload","Operator_0_cannot_be_applied_to_types_1_and_2","compileAssignment","AddI64","AddF32","AddF64","SubI32","SubI64","SubF32","SubF64","MulI64","MulF32","MulF64","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","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","ctor","Constructor_of_class_0_must_not_require_any_arguments","Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration","Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration","hasErrors","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","builtinsFile","Parser","backlog","seenlog","donelog","tryParseSignatureIsSignature","parseParametersThis","parseFile","indexOf","tn","parseTopLevelStatement","startPos","parseDecorator","skipStatement","exportStart","exportEnd","contextIsAmbient","A_declare_modifier_cannot_be_used_in_an_already_ambient_context","first","parseEnum","parseVariable","parseFunction","parseStatement","parseClassOrInterface","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","Decorators_are_not_valid_here","nextFile","clear","parseType","acceptParenthesized","suppressErrors","isNullableSignature","tryParseSignature","Unexpected_token","innerType","Identifier_expected","nullable","parameter","bracketStart","bracketRange","isSignature","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","Long","wasm","WebAssembly","Instance","low","high","unsigned","isLong","obj","__isLong__","INT_CACHE","UINT_CACHE","fromInt","cachedObj","cache","fromBits","fromNumber","isNaN","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","Math","pow","fromString","radix","RangeError","radixToPower","parseInt","power","mul","fromValue","TWO_PWR_16_DBL","TWO_PWR_24","ONE","UONE","NEG_ONE","LongPrototype","toInt","toNumber","isZero","isNegative","eq","radixLong","div","rem1","sub","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","equals","notEquals","neq","ne","lessThan","comp","lt","lessThanOrEqual","lte","le","greaterThan","gt","greaterThanOrEqual","gte","ge","compare","thisNeg","otherNeg","negate","not","addend","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","subtract","subtrahend","multiply","multiplier","get_high","b00","divide","divisor","approx","res","div_u","div_s","toUnsigned","shru","shr","shl","floor","log2","log","LN2","delta","approxRes","approxRem","modulo","rem_u","rem_s","mod","and","or","xor","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toSigned","toBytes","toBytesLE","toBytesBE","hi","lo","fromBytes","fromBytesLE","fromBytesBE","i64_div","i64_div_u","i64_rem","i64_rem_u","i64_xor","i64_shr","i64_eq","minSafeF32","MIN_SAFE_INTEGER","maxSafeF32","MAX_SAFE_INTEGER","minSafeF64","maxSafeF64","fround","f32_as_i32","i32_as_f32","f64_as_i64","i64_as_f64","readI32","readI64","readF32","readF64","valueI64","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","deferASM","deferASMCall","typeArgument","valueType","allocateInternalName","allocatePrototype","An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf","allocateInstance","abortInternalName","abortPrototype","abortInstance","messageArg","filenameArg","binaryen","Binaryen","_malloc","_free","move_memory","dest","src","_memmove","HEAPU8","emitText","emitAsmjs","globalScope","HEAP","HEAP_OFFSET","oldHeap","copyWithin","UnreachableError","captureStackTrace","stack","AssertionError","ASC_TARGET","defineProperties","writable","MIN_POSITIVE_VALUE","EPSILON","clz32","abs","trunc","round","sqrt","x","y","sign","isTrueish","undefined","fromCodePoint","Number","isInteger","isArray"],"mappings":"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K,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,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,MA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","file":"assemblyscript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"binaryen\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"binaryen\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"assemblyscript\"] = factory(require(\"binaryen\"));\n\telse\n\t\troot[\"assemblyscript\"] = factory(root[\"binaryen\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__24__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 29);\n","/**\r\n * Common constants.\r\n * @module common\r\n *//***/\r\n\r\n/** Indicates traits of a {@link Node} or {@link Element}. */\r\nexport enum CommonFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n\r\n // Basic modifiers\r\n\r\n /** Has an `import` modifier. */\r\n IMPORT = 1 << 0,\r\n /** Has an `export` modifier. */\r\n EXPORT = 1 << 1,\r\n /** Has a `declare` modifier. */\r\n DECLARE = 1 << 2,\r\n /** Has a `const` modifier. */\r\n CONST = 1 << 3,\r\n /** Has a `let` modifier. */\r\n LET = 1 << 4,\r\n /** Has a `static` modifier. */\r\n STATIC = 1 << 5,\r\n /** Has a `readonly` modifier. */\r\n READONLY = 1 << 6,\r\n /** Has an `abstract` modifier. */\r\n ABSTRACT = 1 << 7,\r\n /** Has a `public` modifier. */\r\n PUBLIC = 1 << 8,\r\n /** Has a `private` modifier. */\r\n PRIVATE = 1 << 9,\r\n /** Has a `protected` modifier. */\r\n PROTECTED = 1 << 10,\r\n /** Has a `get` modifier. */\r\n GET = 1 << 11,\r\n /** Has a `set` modifier. */\r\n SET = 1 << 12,\r\n\r\n // Extended modifiers usually derived from basic modifiers\r\n\r\n /** Is ambient, that is either declared or nested in a declared element. */\r\n AMBIENT = 1 << 13,\r\n /** Is generic. */\r\n GENERIC = 1 << 14,\r\n /** Is part of a generic context. */\r\n GENERIC_CONTEXT = 1 << 15,\r\n /** Is an instance member. */\r\n INSTANCE = 1 << 16,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 17,\r\n /** Is an arrow function. */\r\n ARROW = 1 << 18,\r\n /** Is a module export. */\r\n MODULE_EXPORT = 1 << 19,\r\n /** Is a module import. */\r\n MODULE_IMPORT = 1 << 20,\r\n\r\n // Compilation states\r\n\r\n /** Is a builtin. */\r\n BUILTIN = 1 << 21,\r\n /** Is compiled. */\r\n COMPILED = 1 << 22,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 23,\r\n /** Is scoped. */\r\n SCOPED = 1 << 24,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 25,\r\n /** Is a virtual method. */\r\n VIRTUAL = 1 << 26,\r\n /** Is the main function. */\r\n MAIN = 1 << 27,\r\n\r\n // Other\r\n\r\n QUOTED = 1 << 28\r\n}\r\n\r\n/** Path delimiter inserted between file system levels. */\r\nexport const PATH_DELIMITER = \"/\";\r\n/** Substitution used to indicate the parent directory. */\r\nexport const PARENT_SUBST = \"..\";\r\n/** Function name prefix used for getters. */\r\nexport const GETTER_PREFIX = \"get:\";\r\n/** Function name prefix used for setters. */\r\nexport const SETTER_PREFIX = \"set:\";\r\n/** Delimiter used between class names and instance members. */\r\nexport const INSTANCE_DELIMITER = \"#\";\r\n/** Delimiter used between class and namespace names and static members. */\r\nexport const STATIC_DELIMITER = \".\";\r\n/** Delimiter used between a function and its inner elements. */\r\nexport const INNER_DELIMITER = \"~\";\r\n/** Substitution used to indicate a library directory. */\r\nexport const LIBRARY_SUBST = \"~lib\";\r\n/** Library directory prefix. */\r\nexport const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER;\r\n/** Prefix used to indicate a filespace element. */\r\nexport const FILESPACE_PREFIX = \"file:\";\r\n","/**\r\n * Shared diagnostic handling inherited by the parser and the compiler.\r\n * @module diagnostics\r\n * @preferred\r\n *//***/\r\n\r\nimport {\r\n Range\r\n} from \"./ast\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nimport {\r\n isLineBreak\r\n} from \"./util\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\n/** Indicates the category of a {@link DiagnosticMessage}. */\r\nexport enum DiagnosticCategory {\r\n /** Informatory message. */\r\n INFO,\r\n /** Warning message. */\r\n WARNING,\r\n /** Error message. */\r\n ERROR\r\n}\r\n\r\n/** Returns the string representation of the specified diagnostic category. */\r\nexport function diagnosticCategoryToString(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return \"INFO\";\r\n case DiagnosticCategory.WARNING: return \"WARNING\";\r\n case DiagnosticCategory.ERROR: return \"ERROR\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** ANSI escape sequence for blue foreground. */\r\nexport const COLOR_BLUE: string = \"\\u001b[96m\";\r\n/** ANSI escape sequence for yellow foreground. */\r\nexport const COLOR_YELLOW: string = \"\\u001b[93m\";\r\n/** ANSI escape sequence for red foreground. */\r\nexport const COLOR_RED: string = \"\\u001b[91m\";\r\n/** ANSI escape sequence to reset the foreground color. */\r\nexport const COLOR_RESET: string = \"\\u001b[0m\";\r\n\r\n/** Returns the ANSI escape sequence for the specified category. */\r\nexport function diagnosticCategoryToColor(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return COLOR_BLUE;\r\n case DiagnosticCategory.WARNING: return COLOR_YELLOW;\r\n case DiagnosticCategory.ERROR: return COLOR_RED;\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** Represents a diagnostic message. */\r\nexport class DiagnosticMessage {\r\n\r\n /** Message code. */\r\n code: i32;\r\n /** Message category. */\r\n category: DiagnosticCategory;\r\n /** Message text. */\r\n message: string;\r\n /** Respective source range, if any. */\r\n range: Range | null = null;\r\n\r\n /** Constructs a new diagnostic message. */\r\n private constructor(code: i32, category: DiagnosticCategory, message: string) {\r\n this.code = code;\r\n this.category = category;\r\n this.message = message;\r\n }\r\n\r\n /** Creates a new diagnostic message of the specified category. */\r\n static create(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): DiagnosticMessage {\r\n var message = diagnosticCodeToString(code);\r\n if (arg0 != null) message = message.replace(\"{0}\", arg0);\r\n if (arg1 != null) message = message.replace(\"{1}\", arg1);\r\n if (arg2 != null) message = message.replace(\"{2}\", arg2);\r\n return new DiagnosticMessage(code, category, message);\r\n }\r\n\r\n /** Creates a new informatory diagnostic message. */\r\n static createInfo(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.INFO, arg0, arg1);\r\n }\r\n\r\n /** Creates a new warning diagnostic message. */\r\n static createWarning(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.WARNING, arg0, arg1);\r\n }\r\n\r\n /** Creates a new error diagnostic message. */\r\n static createError(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.ERROR, arg0, arg1);\r\n }\r\n\r\n /** Adds a source range to this message. */\r\n withRange(range: Range): this {\r\n this.range = range;\r\n return this;\r\n }\r\n\r\n /** Converts this message to a string. */\r\n toString(): string {\r\n if (this.range) {\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \\\"\" +\r\n this.message +\r\n \"\\\" in \" +\r\n this.range.source.normalizedPath +\r\n \":\" +\r\n this.range.line.toString(10) +\r\n \":\" +\r\n this.range.column.toString(10)\r\n );\r\n }\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \" +\r\n this.message\r\n );\r\n }\r\n}\r\n\r\n/** Formats a diagnostic message, optionally with terminal colors and source context. */\r\nexport function formatDiagnosticMessage(\r\n message: DiagnosticMessage,\r\n useColors: bool = false,\r\n showContext: bool = false\r\n): string {\r\n\r\n // general information\r\n var sb: string[] = [];\r\n if (useColors) sb.push(diagnosticCategoryToColor(message.category));\r\n sb.push(diagnosticCategoryToString(message.category));\r\n if (useColors) sb.push(COLOR_RESET);\r\n sb.push(message.code < 1000 ? \" AS\" : \" TS\");\r\n sb.push(message.code.toString(10));\r\n sb.push(\": \");\r\n sb.push(message.message);\r\n\r\n // include range information if available\r\n if (message.range) {\r\n\r\n // include context information if requested\r\n let range = message.range;\r\n if (showContext) {\r\n sb.push(\"\\n\");\r\n sb.push(formatDiagnosticContext(message.range, useColors));\r\n }\r\n\r\n sb.push(\"\\n\");\r\n sb.push(\" in \");\r\n sb.push(range.source.normalizedPath);\r\n sb.push(\"(\");\r\n sb.push(range.line.toString(10));\r\n sb.push(\",\");\r\n sb.push(range.column.toString(10));\r\n sb.push(\")\");\r\n }\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Formats the diagnostic context for the specified range, optionally with terminal colors. */\r\nexport function formatDiagnosticContext(range: Range, useColors: bool = false): string {\r\n var text = range.source.text;\r\n var len = text.length;\r\n var start = range.start;\r\n var end = range.end;\r\n while (start > 0 && !isLineBreak(text.charCodeAt(start - 1))) start--;\r\n while (end < len && !isLineBreak(text.charCodeAt(end))) end++;\r\n var sb: string[] = [\r\n \"\\n \",\r\n text.substring(start, end),\r\n \"\\n \"\r\n ];\r\n while (start < range.start) {\r\n sb.push(\" \");\r\n start++;\r\n }\r\n if (useColors) sb.push(COLOR_RED);\r\n if (range.start == range.end) {\r\n sb.push(\"^\");\r\n } else {\r\n while (start++ < range.end) sb.push(\"~\");\r\n }\r\n if (useColors) sb.push(COLOR_RESET);\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Base class of all diagnostic emitters. */\r\nexport abstract class DiagnosticEmitter {\r\n\r\n /** Diagnostic messages emitted so far. */\r\n diagnostics: DiagnosticMessage[];\r\n\r\n /** Initializes this diagnostic emitter. */\r\n protected constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n }\r\n\r\n /** Emits a diagnostic message of the specified category. */\r\n emitDiagnostic(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range);\r\n this.diagnostics.push(message);\r\n // console.log(formatDiagnosticMessage(message, true, true) + \"\\n\"); // temporary\r\n // console.log(new Error(\"stack\").stack);\r\n }\r\n\r\n /** Emits an informatory diagnostic message. */\r\n info(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.INFO, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits a warning diagnostic message. */\r\n warning(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.WARNING, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits an error diagnostic message. */\r\n error(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.ERROR, range, arg0, arg1, arg2);\r\n }\r\n}\r\n","/**\r\n * Abstract syntax tree representing a source file once parsed.\r\n * @module ast\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Token,\r\n Tokenizer,\r\n Range\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n normalizePath,\r\n resolvePath,\r\n CharCode\r\n} from \"./util\";\r\n\r\nexport { Token, Range };\r\n\r\n/** Indicates the kind of a node. */\r\nexport enum NodeKind {\r\n\r\n SOURCE,\r\n\r\n // types\r\n TYPE,\r\n TYPEPARAMETER,\r\n PARAMETER,\r\n SIGNATURE,\r\n\r\n // expressions\r\n IDENTIFIER,\r\n ASSERTION,\r\n BINARY,\r\n CALL,\r\n CLASS,\r\n COMMA,\r\n ELEMENTACCESS,\r\n FALSE,\r\n FUNCTION,\r\n INSTANCEOF,\r\n LITERAL,\r\n NEW,\r\n NULL,\r\n PARENTHESIZED,\r\n PROPERTYACCESS,\r\n TERNARY,\r\n SUPER,\r\n THIS,\r\n TRUE,\r\n CONSTRUCTOR,\r\n UNARYPOSTFIX,\r\n UNARYPREFIX,\r\n\r\n // statements\r\n BLOCK,\r\n BREAK,\r\n CONTINUE,\r\n DO,\r\n EMPTY,\r\n EXPORT,\r\n EXPORTIMPORT,\r\n EXPRESSION,\r\n FOR,\r\n IF,\r\n IMPORT,\r\n RETURN,\r\n SWITCH,\r\n THROW,\r\n TRY,\r\n VARIABLE,\r\n VOID,\r\n WHILE,\r\n\r\n // declaration statements\r\n CLASSDECLARATION,\r\n ENUMDECLARATION,\r\n ENUMVALUEDECLARATION,\r\n FIELDDECLARATION,\r\n FUNCTIONDECLARATION,\r\n IMPORTDECLARATION,\r\n INTERFACEDECLARATION,\r\n METHODDECLARATION,\r\n NAMESPACEDECLARATION,\r\n TYPEDECLARATION,\r\n VARIABLEDECLARATION,\r\n\r\n // special\r\n DECORATOR,\r\n EXPORTMEMBER,\r\n SWITCHCASE,\r\n COMMENT\r\n}\r\n\r\n/** Checks if a node represents a constant value. */\r\nexport function nodeIsConstantValue(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.LITERAL:\r\n case NodeKind.NULL:\r\n case NodeKind.TRUE:\r\n case NodeKind.FALSE: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable. */\r\nexport function nodeIsCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.CALL:\r\n case NodeKind.ELEMENTACCESS:\r\n case NodeKind.PROPERTYACCESS: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable with generic arguments. */\r\nexport function nodeIsGenericCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.PROPERTYACCESS: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all nodes. */\r\nexport abstract class Node {\r\n\r\n /** Node kind indicator. */\r\n kind: NodeKind;\r\n /** Source range. */\r\n range: Range;\r\n /** Parent node. */\r\n parent: Node | null = null;\r\n /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n\r\n /** Tests if this node has the specified flag or flags. */\r\n is(flag: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this node has one of the specified flags. */\r\n isAny(flag: CommonFlags): bool { return (this.flags & flag) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n\r\n // types\r\n\r\n static createType(\r\n name: IdentifierExpression,\r\n typeArguments: CommonTypeNode[] | null,\r\n isNullable: bool,\r\n range: Range\r\n ): TypeNode {\r\n var type = new TypeNode();\r\n type.range = range;\r\n type.name = name; name.parent = type;\r\n type.typeArguments = typeArguments; if (typeArguments) setParent(typeArguments, type);\r\n type.isNullable = isNullable;\r\n return type;\r\n }\r\n\r\n static createOmittedType(\r\n range: Range\r\n ): TypeNode {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"\", range),\r\n null,\r\n false,\r\n range\r\n );\r\n }\r\n\r\n static createTypeParameter(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n range: Range\r\n ): TypeParameterNode {\r\n var elem = new TypeParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.extendsType = extendsType; if (extendsType) extendsType.parent = elem;\r\n return elem;\r\n }\r\n\r\n static createParameter(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode,\r\n initializer: Expression | null,\r\n kind: ParameterKind,\r\n range: Range\r\n ): ParameterNode {\r\n var elem = new ParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.parameterKind = kind;\r\n return elem;\r\n }\r\n\r\n static createSignature(\r\n parameters: ParameterNode[],\r\n returnType: CommonTypeNode,\r\n explicitThisType: TypeNode | null,\r\n isNullable: bool,\r\n range: Range\r\n ): SignatureNode {\r\n var sig = new SignatureNode();\r\n sig.range = range;\r\n sig.parameters = parameters; setParent(parameters, sig);\r\n sig.returnType = returnType; returnType.parent = sig;\r\n sig.explicitThisType = explicitThisType; if (explicitThisType) explicitThisType.parent = sig;\r\n sig.isNullable = isNullable;\r\n return sig;\r\n }\r\n\r\n // special\r\n\r\n static createDecorator(\r\n name: Expression,\r\n args: Expression[] | null,\r\n range: Range\r\n ): DecoratorNode {\r\n var stmt = new DecoratorNode();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.arguments = args; if (args) setParent(args, stmt);\r\n stmt.decoratorKind = decoratorNameToKind(name);\r\n return stmt;\r\n }\r\n\r\n static createComment(\r\n text: string,\r\n kind: CommentKind,\r\n range: Range\r\n ): CommentNode {\r\n var node = new CommentNode();\r\n node.range = range;\r\n node.commentKind = kind;\r\n node.text = text;\r\n return node;\r\n }\r\n\r\n // expressions\r\n\r\n static createIdentifierExpression(\r\n name: string,\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = name;\r\n return expr;\r\n }\r\n\r\n static createEmptyIdentifierExpression(\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = \"\";\r\n return expr;\r\n }\r\n\r\n static createArrayLiteralExpression(\r\n elements: (Expression | null)[],\r\n range: Range\r\n ): ArrayLiteralExpression {\r\n var expr = new ArrayLiteralExpression();\r\n expr.range = range;\r\n expr.elementExpressions = elements; setParentIfNotNull(elements, expr);\r\n return expr;\r\n }\r\n\r\n static createAssertionExpression(\r\n assertionKind: AssertionKind,\r\n expression: Expression,\r\n toType: CommonTypeNode,\r\n range: Range\r\n ): AssertionExpression {\r\n var expr = new AssertionExpression();\r\n expr.range = range;\r\n expr.assertionKind = assertionKind;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.toType = toType; toType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createBinaryExpression(\r\n operator: Token,\r\n left: Expression,\r\n right: Expression,\r\n range: Range\r\n ): BinaryExpression {\r\n var expr = new BinaryExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.left = left; left.parent = expr;\r\n expr.right = right; right.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createCallExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): CallExpression {\r\n var expr = new CallExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createClassExpression(\r\n declaration: ClassDeclaration\r\n ): ClassExpression {\r\n var expr = new ClassExpression();\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createCommaExpression(\r\n expressions: Expression[],\r\n range: Range\r\n ): CommaExpression {\r\n var expr = new CommaExpression();\r\n expr.range = range;\r\n expr.expressions = expressions; setParent(expressions, expr);\r\n return expr;\r\n }\r\n\r\n static createConstructorExpression(\r\n range: Range\r\n ): ConstructorExpression {\r\n var expr = new ConstructorExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createElementAccessExpression(\r\n expression: Expression,\r\n element: Expression,\r\n range: Range\r\n ): ElementAccessExpression {\r\n var expr = new ElementAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.elementExpression = element; element.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createFalseExpression(\r\n range: Range\r\n ): FalseExpression {\r\n var expr = new FalseExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createFloatLiteralExpression(\r\n value: f64,\r\n range: Range\r\n ): FloatLiteralExpression {\r\n var expr = new FloatLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createFunctionExpression(\r\n declaration: FunctionDeclaration\r\n ): FunctionExpression {\r\n var expr = new FunctionExpression();\r\n expr.flags = declaration.flags & CommonFlags.ARROW;\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createInstanceOfExpression(\r\n expression: Expression,\r\n isType: CommonTypeNode,\r\n range: Range\r\n ): InstanceOfExpression {\r\n var expr = new InstanceOfExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.isType = isType; isType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createIntegerLiteralExpression(\r\n value: I64,\r\n range: Range\r\n ): IntegerLiteralExpression {\r\n var expr = new IntegerLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createNewExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): NewExpression {\r\n var expr = new NewExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createNullExpression(\r\n range: Range\r\n ): NullExpression {\r\n var expr = new NullExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createObjectLiteralExpression(\r\n names: IdentifierExpression[],\r\n values: Expression[],\r\n range: Range\r\n ): ObjectLiteralExpression {\r\n var expr = new ObjectLiteralExpression();\r\n expr.range = range;\r\n expr.names = names;\r\n expr.values = values;\r\n return expr;\r\n }\r\n\r\n static createParenthesizedExpression(\r\n expression: Expression,\r\n range: Range\r\n ): ParenthesizedExpression {\r\n var expr = new ParenthesizedExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createPropertyAccessExpression(\r\n expression: Expression,\r\n property: IdentifierExpression,\r\n range: Range\r\n ): PropertyAccessExpression {\r\n var expr = new PropertyAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.property = property; property.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createRegexpLiteralExpression(\r\n pattern: string,\r\n flags: string,\r\n range: Range\r\n ): RegexpLiteralExpression {\r\n var expr = new RegexpLiteralExpression();\r\n expr.range = range;\r\n expr.pattern = pattern;\r\n expr.patternFlags = flags;\r\n return expr;\r\n }\r\n\r\n static createTernaryExpression(\r\n condition: Expression,\r\n ifThen: Expression,\r\n ifElse: Expression,\r\n range: Range\r\n ): TernaryExpression {\r\n var expr = new TernaryExpression();\r\n expr.range = range;\r\n expr.condition = condition; condition.parent = expr;\r\n expr.ifThen = ifThen; ifThen.parent = expr;\r\n expr.ifElse = ifElse; ifElse.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createStringLiteralExpression(\r\n value: string,\r\n range: Range\r\n ): StringLiteralExpression {\r\n var expr = new StringLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createSuperExpression(\r\n range: Range\r\n ): SuperExpression {\r\n var expr = new SuperExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createThisExpression(\r\n range: Range\r\n ): ThisExpression {\r\n var expr = new ThisExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createTrueExpression(\r\n range: Range\r\n ): TrueExpression {\r\n var expr = new TrueExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createUnaryPostfixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPostfixExpression {\r\n var expr = new UnaryPostfixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createUnaryPrefixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPrefixExpression {\r\n var expr = new UnaryPrefixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n // statements\r\n\r\n static createBlockStatement(\r\n statements: Statement[],\r\n range: Range\r\n ): BlockStatement {\r\n var stmt = new BlockStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createBreakStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): BreakStatement {\r\n var stmt = new BreakStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createClassDeclaration(\r\n identifier: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n implementsTypes: TypeNode[] | null, // can't be functions\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ClassDeclaration {\r\n var stmt = new ClassDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = identifier; identifier.parent = stmt;\r\n stmt.typeParameters = typeParameters; setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.implementsTypes = implementsTypes; if (implementsTypes) setParent(implementsTypes, stmt);\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createContinueStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): ContinueStatement {\r\n var stmt = new ContinueStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createDoStatement(\r\n statement: Statement,\r\n condition: Expression,\r\n range: Range\r\n ): DoStatement {\r\n var stmt = new DoStatement();\r\n stmt.range = range;\r\n stmt.statement = statement; statement.parent = stmt;\r\n stmt.condition = condition; condition.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createEmptyStatement(\r\n range: Range\r\n ): EmptyStatement {\r\n var stmt = new EmptyStatement();\r\n stmt.range = range;\r\n return stmt;\r\n }\r\n\r\n static createEnumDeclaration(\r\n name: IdentifierExpression,\r\n members: EnumValueDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumDeclaration {\r\n var stmt = new EnumDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.values = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createEnumValueDeclaration(\r\n name: IdentifierExpression,\r\n value: Expression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumValueDeclaration {\r\n var stmt = new EnumValueDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportStatement(\r\n members: ExportMember[] | null,\r\n path: StringLiteralExpression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ExportStatement {\r\n var stmt = new ExportStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.members = members; if (members) setParent(members, stmt);\r\n stmt.path = path;\r\n if (path) {\r\n let normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n } else {\r\n stmt.normalizedPath = null;\r\n stmt.internalPath = null;\r\n }\r\n return stmt;\r\n }\r\n\r\n static createExportImportStatement(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression,\r\n range: Range\r\n ): ExportImportStatement {\r\n var stmt = new ExportImportStatement();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.externalName = externalName; externalName.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportMember(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression | null,\r\n range: Range\r\n ): ExportMember {\r\n var elem = new ExportMember();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n if (!externalName) {\r\n externalName = name;\r\n } else {\r\n externalName.parent = elem;\r\n }\r\n elem.externalName = externalName;\r\n return elem;\r\n }\r\n\r\n static createExpressionStatement(\r\n expression: Expression\r\n ): ExpressionStatement {\r\n var stmt = new ExpressionStatement();\r\n stmt.range = expression.range;\r\n stmt.expression = expression; expression.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createIfStatement(\r\n condition: Expression,\r\n ifTrue: Statement,\r\n ifFalse: Statement | null,\r\n range: Range\r\n ): IfStatement {\r\n var stmt = new IfStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.ifTrue = ifTrue; ifTrue.parent = stmt;\r\n stmt.ifFalse = ifFalse; if (ifFalse) ifFalse.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createImportStatement(\r\n decls: ImportDeclaration[] | null,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = decls; if (decls) setParent(decls, stmt);\r\n stmt.namespaceName = null;\r\n stmt.path = path;\r\n var normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative in project\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute in library\r\n if (!normalizedPath.startsWith(LIBRARY_PREFIX)) {\r\n normalizedPath = LIBRARY_PREFIX + normalizedPath;\r\n }\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportStatementWithWildcard(\r\n identifier: IdentifierExpression,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = null;\r\n stmt.namespaceName = identifier;\r\n stmt.path = path;\r\n stmt.normalizedPath = resolvePath(\r\n normalizePath(path.value),\r\n range.source.normalizedPath\r\n );\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportDeclaration(\r\n externalName: IdentifierExpression,\r\n name: IdentifierExpression | null,\r\n range: Range\r\n ): ImportDeclaration {\r\n var elem = new ImportDeclaration();\r\n elem.range = range;\r\n elem.externalName = externalName; externalName.parent = elem;\r\n if (!name) {\r\n name = externalName;\r\n } else {\r\n name.parent = elem;\r\n }\r\n elem.name = name;\r\n return elem;\r\n }\r\n\r\n static createInterfaceDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): InterfaceDeclaration {\r\n var stmt = new InterfaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createFieldDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FieldDeclaration {\r\n var stmt = new FieldDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.type = type; if (type) type.parent = stmt;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createForStatement(\r\n initializer: Statement | null,\r\n condition: Expression | null,\r\n incrementor: Expression | null,\r\n statement: Statement,\r\n range: Range\r\n ): ForStatement {\r\n var stmt = new ForStatement();\r\n stmt.range = range;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.condition = condition; if (condition) condition.parent = stmt;\r\n stmt.incrementor = incrementor; if (incrementor) incrementor.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FunctionDeclaration {\r\n var stmt = new FunctionDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createMethodDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): MethodDeclaration {\r\n var stmt = new MethodDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): NamespaceDeclaration {\r\n var stmt = new NamespaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createReturnStatement(\r\n value: Expression | null,\r\n range: Range\r\n ): ReturnStatement {\r\n var stmt = new ReturnStatement();\r\n stmt.range = range;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createSwitchStatement(\r\n condition: Expression,\r\n cases: SwitchCase[],\r\n range: Range\r\n ): SwitchStatement {\r\n var stmt = new SwitchStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.cases = cases; setParent(cases, stmt);\r\n return stmt;\r\n }\r\n\r\n static createSwitchCase(\r\n label: Expression | null,\r\n statements: Statement[],\r\n range: Range\r\n ): SwitchCase {\r\n var elem = new SwitchCase();\r\n elem.range = range;\r\n elem.label = label; if (label) label.parent = elem;\r\n elem.statements = statements; setParent(statements, elem);\r\n return elem;\r\n }\r\n\r\n static createThrowStatement(\r\n value: Expression,\r\n range: Range\r\n ): ThrowStatement {\r\n var stmt = new ThrowStatement();\r\n stmt.range = range;\r\n stmt.value = value; value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createTryStatement(\r\n statements: Statement[],\r\n catchVariable: IdentifierExpression | null,\r\n catchStatements: Statement[] | null,\r\n finallyStatements: Statement[] | null,\r\n range: Range\r\n ): TryStatement {\r\n var stmt = new TryStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n stmt.catchVariable = catchVariable;\r\n if (catchVariable) catchVariable.parent = stmt;\r\n stmt.catchStatements = catchStatements;\r\n if (catchStatements) setParent(catchStatements, stmt);\r\n stmt.finallyStatements = finallyStatements;\r\n if (finallyStatements) setParent(finallyStatements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createTypeDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n alias: CommonTypeNode,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): TypeDeclaration {\r\n var stmt = new TypeDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.type = alias; alias.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableStatement(\r\n declarations: VariableDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableStatement {\r\n var stmt = new VariableStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.declarations = declarations; setParent(declarations, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableDeclaration {\r\n var elem = new VariableDeclaration();\r\n elem.range = range;\r\n elem.flags = flags;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.decorators = decorators; // inherited\r\n return elem;\r\n }\r\n\r\n static createVoidStatement(\r\n expression: Expression,\r\n range: Range\r\n ): VoidStatement {\r\n var stmt = new VoidStatement();\r\n stmt.range = range;\r\n stmt.expression = expression;\r\n return stmt;\r\n }\r\n\r\n static createWhileStatement(\r\n condition: Expression,\r\n statement: Statement,\r\n range: Range\r\n ): WhileStatement {\r\n var stmt = new WhileStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n}\r\n\r\n// types\r\n\r\nexport abstract class CommonTypeNode extends Node {\r\n // kind varies\r\n\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type annotation. */\r\nexport class TypeNode extends CommonTypeNode {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: CommonTypeNode[] | null;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameterNode extends Node {\r\n kind = NodeKind.TYPEPARAMETER;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Extended type reference, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n}\r\n\r\n/** Represents the kind of a parameter. */\r\nexport enum ParameterKind {\r\n /** No specific flags. */\r\n DEFAULT,\r\n /** Is an optional parameter. */\r\n OPTIONAL,\r\n /** Is a rest parameter. */\r\n REST\r\n}\r\n\r\n/** Represents a function parameter. */\r\nexport class ParameterNode extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: CommonTypeNode;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n /** Implicit field declaration, if applicable. */\r\n implicitFieldDeclaration: FieldDeclaration | null = null;\r\n}\r\n\r\n/** Represents a function signature. */\r\nexport class SignatureNode extends CommonTypeNode {\r\n kind = NodeKind.SIGNATURE;\r\n\r\n /** Accepted parameters. */\r\n parameters: ParameterNode[];\r\n /** Return type. */\r\n returnType: CommonTypeNode;\r\n /** Explicitly provided this type, if any. */\r\n explicitThisType: TypeNode | null; // can't be a function\r\n}\r\n\r\n// special\r\n\r\n/** Built-in decorator kinds. */\r\nexport enum DecoratorKind {\r\n CUSTOM,\r\n GLOBAL,\r\n OPERATOR,\r\n OPERATOR_BINARY,\r\n OPERATOR_PREFIX,\r\n OPERATOR_POSTFIX,\r\n UNMANAGED,\r\n SEALED,\r\n INLINE,\r\n EXTERNAL\r\n}\r\n\r\n/** Returns the kind of the specified decorator. Defaults to {@link DecoratorKind.CUSTOM}. */\r\nexport function decoratorNameToKind(name: Expression): DecoratorKind {\r\n // @global, @inline, @operator, @sealed, @unmanaged\r\n if (name.kind == NodeKind.IDENTIFIER) {\r\n let nameStr = (name).text;\r\n assert(nameStr.length);\r\n switch (nameStr.charCodeAt(0)) {\r\n case CharCode.e: {\r\n if (nameStr == \"external\") return DecoratorKind.EXTERNAL;\r\n break;\r\n }\r\n case CharCode.g: {\r\n if (nameStr == \"global\") return DecoratorKind.GLOBAL;\r\n break;\r\n }\r\n case CharCode.i: {\r\n if (nameStr == \"inline\") return DecoratorKind.INLINE;\r\n break;\r\n }\r\n case CharCode.o: {\r\n if (nameStr == \"operator\") return DecoratorKind.OPERATOR;\r\n break;\r\n }\r\n case CharCode.s: {\r\n if (nameStr == \"sealed\") return DecoratorKind.SEALED;\r\n break;\r\n }\r\n case CharCode.u: {\r\n if (nameStr == \"unmanaged\") return DecoratorKind.UNMANAGED;\r\n break;\r\n }\r\n }\r\n } else if (\r\n name.kind == NodeKind.PROPERTYACCESS &&\r\n (name).expression.kind == NodeKind.IDENTIFIER\r\n ) {\r\n let nameStr = ((name).expression).text;\r\n assert(nameStr.length);\r\n let propStr = (name).property.text;\r\n assert(propStr.length);\r\n // @operator.binary, @operator.prefix, @operator.postfix\r\n if (nameStr == \"operator\") {\r\n switch (propStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (propStr == \"binary\") return DecoratorKind.OPERATOR_BINARY;\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (propStr) {\r\n case \"prefix\": return DecoratorKind.OPERATOR_PREFIX;\r\n case \"postfix\": return DecoratorKind.OPERATOR_POSTFIX;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return DecoratorKind.CUSTOM;\r\n}\r\n\r\n/** Represents a decorator. */\r\nexport class DecoratorNode extends Node {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n}\r\n\r\n/** Comment kinds. */\r\nexport enum CommentKind {\r\n /** Line comment. */\r\n LINE,\r\n /** Triple-slash comment. */\r\n TRIPLE,\r\n /** Block comment. */\r\n BLOCK\r\n}\r\n\r\n/** Represents a comment. */\r\nexport class CommentNode extends Node {\r\n kind = NodeKind.COMMENT;\r\n\r\n /** Comment kind. */\r\n commentKind: CommentKind;\r\n /** Comment text. */\r\n text: string;\r\n}\r\n\r\n// expressions\r\n\r\n/** Base class of all expression nodes. */\r\nexport abstract class Expression extends Node { }\r\n\r\n/** Represents an identifier expression. */\r\nexport class IdentifierExpression extends Expression {\r\n kind = NodeKind.IDENTIFIER;\r\n\r\n /** Textual name. */\r\n text: string;\r\n}\r\n\r\n/** Indicates the kind of a literal. */\r\nexport enum LiteralKind {\r\n FLOAT,\r\n INTEGER,\r\n STRING,\r\n REGEXP,\r\n ARRAY,\r\n OBJECT\r\n}\r\n\r\n/** Base class of all literal expressions. */\r\nexport abstract class LiteralExpression extends Expression {\r\n kind = NodeKind.LITERAL;\r\n\r\n /** Specific literal kind. */\r\n literalKind: LiteralKind;\r\n}\r\n\r\n/** Represents an `[]` literal expression. */\r\nexport class ArrayLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.ARRAY;\r\n\r\n /** Nested element expressions. */\r\n elementExpressions: (Expression | null)[];\r\n}\r\n\r\n/** Indicates the kind of an assertion. */\r\nexport enum AssertionKind {\r\n PREFIX,\r\n AS\r\n}\r\n\r\n/** Represents an assertion expression. */\r\nexport class AssertionExpression extends Expression {\r\n kind = NodeKind.ASSERTION;\r\n\r\n /** Specific kind of this assertion. */\r\n assertionKind: AssertionKind;\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Target type. */\r\n toType: CommonTypeNode;\r\n}\r\n\r\n/** Represents a binary expression. */\r\nexport class BinaryExpression extends Expression {\r\n kind = NodeKind.BINARY;\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Left-hand side expression */\r\n left: Expression;\r\n /** Right-hand side expression. */\r\n right: Expression;\r\n}\r\n\r\n/** Represents a call expression. */\r\nexport class CallExpression extends Expression {\r\n kind = NodeKind.CALL;\r\n\r\n /** Called expression. Usually an identifier or property access expression. */\r\n expression: Expression;\r\n /** Provided type arguments. */\r\n typeArguments: CommonTypeNode[] | null;\r\n /** Provided arguments. */\r\n arguments: Expression[];\r\n}\r\n\r\n/** Represents a class expression using the 'class' keyword. */\r\nexport class ClassExpression extends Expression {\r\n kind = NodeKind.CLASS;\r\n\r\n /** Inline class declaration. */\r\n declaration: ClassDeclaration;\r\n}\r\n\r\n/** Represents a comma expression composed of multiple expressions. */\r\nexport class CommaExpression extends Expression {\r\n kind = NodeKind.COMMA;\r\n\r\n /** Sequential expressions. */\r\n expressions: Expression[];\r\n}\r\n\r\n/** Represents a `constructor` expression. */\r\nexport class ConstructorExpression extends IdentifierExpression {\r\n kind = NodeKind.CONSTRUCTOR;\r\n text = \"constructor\";\r\n}\r\n\r\n/** Represents an element access expression, e.g., array access. */\r\nexport class ElementAccessExpression extends Expression {\r\n kind = NodeKind.ELEMENTACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Element of the expression being accessed. */\r\n elementExpression: Expression;\r\n}\r\n\r\n/** Represents a float literal expression. */\r\nexport class FloatLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.FLOAT;\r\n\r\n /** Float value. */\r\n value: f64;\r\n}\r\n\r\n/** Represents a function expression using the 'function' keyword. */\r\nexport class FunctionExpression extends Expression {\r\n kind = NodeKind.FUNCTION;\r\n\r\n /** Inline function declaration. */\r\n declaration: FunctionDeclaration;\r\n}\r\n\r\n/** Represents an `instanceof` expression. */\r\nexport class InstanceOfExpression extends Expression {\r\n kind = NodeKind.INSTANCEOF;\r\n\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Type to test for. */\r\n isType: CommonTypeNode;\r\n}\r\n\r\n/** Represents an integer literal expression. */\r\nexport class IntegerLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.INTEGER;\r\n\r\n /** Integer value. */\r\n value: I64;\r\n}\r\n\r\n/** Represents a `new` expression. Like a call but with its own kind. */\r\nexport class NewExpression extends CallExpression {\r\n kind = NodeKind.NEW;\r\n}\r\n\r\n/** Represents a `null` expression. */\r\nexport class NullExpression extends IdentifierExpression {\r\n kind = NodeKind.NULL;\r\n text = \"null\";\r\n}\r\n\r\n/** Represents an object literal expression. */\r\nexport class ObjectLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.OBJECT;\r\n\r\n /** Field names. */\r\n names: IdentifierExpression[];\r\n /** Field values. */\r\n values: Expression[];\r\n}\r\n\r\n/** Represents a parenthesized expression. */\r\nexport class ParenthesizedExpression extends Expression {\r\n kind = NodeKind.PARENTHESIZED;\r\n\r\n /** Expression in parenthesis. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a property access expression. */\r\nexport class PropertyAccessExpression extends Expression {\r\n kind = NodeKind.PROPERTYACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Property of the expression being accessed. */\r\n property: IdentifierExpression;\r\n}\r\n\r\n/** Represents a regular expression literal expression. */\r\nexport class RegexpLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.REGEXP;\r\n\r\n /** Regular expression pattern. */\r\n pattern: string;\r\n /** Regular expression flags. */\r\n patternFlags: string;\r\n}\r\n\r\n/** Represents a ternary expression, i.e., short if notation. */\r\nexport class TernaryExpression extends Expression {\r\n kind = NodeKind.TERNARY;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Expression executed when condition is `true`. */\r\n ifThen: Expression;\r\n /** Expression executed when condition is `false`. */\r\n ifElse: Expression;\r\n}\r\n\r\n/** Represents a string literal expression. */\r\nexport class StringLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.STRING;\r\n\r\n /** String value without quotes. */\r\n value: string;\r\n}\r\n\r\n/** Represents a `super` expression. */\r\nexport class SuperExpression extends IdentifierExpression {\r\n kind = NodeKind.SUPER;\r\n text = \"super\";\r\n}\r\n\r\n/** Represents a `this` expression. */\r\nexport class ThisExpression extends IdentifierExpression {\r\n kind = NodeKind.THIS;\r\n text = \"this\";\r\n}\r\n\r\n/** Represents a `true` expression. */\r\nexport class TrueExpression extends IdentifierExpression {\r\n kind = NodeKind.TRUE;\r\n text = \"true\";\r\n}\r\n\r\n/** Represents a `false` expression. */\r\nexport class FalseExpression extends IdentifierExpression {\r\n kind = NodeKind.FALSE;\r\n text = \"false\";\r\n}\r\n\r\n/** Base class of all unary expressions. */\r\nexport abstract class UnaryExpression extends Expression {\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Operand expression. */\r\n operand: Expression;\r\n}\r\n\r\n/** Represents a unary postfix expression, e.g. a postfix increment. */\r\nexport class UnaryPostfixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPOSTFIX;\r\n}\r\n\r\n/** Represents a unary prefix expression, e.g. a negation. */\r\nexport class UnaryPrefixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPREFIX;\r\n}\r\n\r\n// statements\r\n\r\nexport function isLastStatement(statement: Statement): bool {\r\n var parent = assert(statement.parent);\r\n if (parent.kind == NodeKind.BLOCK) {\r\n let statements = (parent).statements;\r\n if (statements[statements.length - 1] === statement) {\r\n switch (assert(parent.parent).kind) {\r\n case NodeKind.FUNCTIONDECLARATION:\r\n case NodeKind.METHODDECLARATION: return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all statement nodes. */\r\nexport abstract class Statement extends Node { }\r\n\r\n/** Indicates the specific kind of a source. */\r\nexport enum SourceKind {\r\n /** Default source. Usually imported from an entry file. */\r\n DEFAULT,\r\n /** Entry file. */\r\n ENTRY,\r\n /** Library file. */\r\n LIBRARY\r\n}\r\n\r\n/** A top-level source node. */\r\nexport class Source extends Node {\r\n kind = NodeKind.SOURCE;\r\n parent = null;\r\n\r\n /** Source kind. */\r\n sourceKind: SourceKind;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Path used internally. */\r\n internalPath: string;\r\n /** Simple path (last part without extension). */\r\n simplePath: string;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Full source text. */\r\n text: string;\r\n /** Tokenizer reference. */\r\n tokenizer: Tokenizer | null = null;\r\n /** Source map index. */\r\n debugInfoIndex: i32 = -1;\r\n /** Re-exported sources. */\r\n exportPaths: Set | null = null;\r\n\r\n /** Constructs a new source node. */\r\n constructor(normalizedPath: string, text: string, kind: SourceKind) {\r\n super();\r\n this.sourceKind = kind;\r\n this.normalizedPath = normalizedPath;\r\n var internalPath = mangleInternalPath(this.normalizedPath);\r\n this.internalPath = internalPath;\r\n var pos = internalPath.lastIndexOf(PATH_DELIMITER);\r\n this.simplePath = pos >= 0 ? internalPath.substring(pos + 1) : internalPath;\r\n this.statements = new Array();\r\n this.range = new Range(this, 0, text.length);\r\n this.text = text;\r\n }\r\n\r\n /** Tests if this source is an entry file. */\r\n get isEntry(): bool { return this.sourceKind == SourceKind.ENTRY; }\r\n /** Tests if this source is a stdlib file. */\r\n get isLibrary(): bool { return this.sourceKind == SourceKind.LIBRARY; }\r\n}\r\n\r\n/** Base class of all declaration statements. */\r\nexport abstract class DeclarationStatement extends Statement {\r\n\r\n /** Simple name being declared. */\r\n name: IdentifierExpression;\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null = null;\r\n\r\n protected cachedProgramLevelInternalName: string | null = null;\r\n protected cachedFileLevelInternalName: string | null = null;\r\n\r\n /** Gets the mangled program-level internal name of this declaration. */\r\n get programLevelInternalName(): string {\r\n if (!this.cachedProgramLevelInternalName) {\r\n this.cachedProgramLevelInternalName = mangleInternalName(this, true);\r\n }\r\n return this.cachedProgramLevelInternalName;\r\n }\r\n\r\n /** Gets the mangled file-level internal name of this declaration. */\r\n get fileLevelInternalName(): string {\r\n if (!this.cachedFileLevelInternalName) {\r\n this.cachedFileLevelInternalName = mangleInternalName(this, false);\r\n }\r\n return this.cachedFileLevelInternalName;\r\n }\r\n\r\n /** Tests if this is a top-level declaration within its source file. */\r\n get isTopLevel(): bool {\r\n var parent = this.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent)) {\r\n return false;\r\n }\r\n return parent.kind == NodeKind.SOURCE;\r\n }\r\n\r\n /** Tests if this declaration is a top-level export within its source file. */\r\n get isTopLevelExport(): bool {\r\n var parent = this.parent;\r\n if (!parent || (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent))) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.NAMESPACEDECLARATION) {\r\n return this.is(CommonFlags.EXPORT) && (parent).isTopLevelExport;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return this.is(CommonFlags.STATIC) && (parent).isTopLevelExport;\r\n }\r\n return parent.kind == NodeKind.SOURCE && this.is(CommonFlags.EXPORT);\r\n }\r\n\r\n /** Tests if this declaration needs an explicit export. */\r\n needsExplicitExport(member: ExportMember): bool {\r\n // This is necessary because module-level exports are automatically created\r\n // for top level declarations of all sorts. This function essentially tests\r\n // that there isn't a otherwise duplicate top-level export already.\r\n return (\r\n member.name.text != member.externalName.text || // if aliased\r\n this.range.source != member.range.source || // if a re-export\r\n !this.isTopLevelExport // if not top-level\r\n );\r\n }\r\n}\r\n\r\n/** Base class of all variable-like declaration statements. */\r\nexport abstract class VariableLikeDeclarationStatement extends DeclarationStatement {\r\n\r\n /** Variable type. */\r\n type: CommonTypeNode | null;\r\n /** Variable initializer. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a block statement. */\r\nexport class BlockStatement extends Statement {\r\n kind = NodeKind.BLOCK;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `break` statement. */\r\nexport class BreakStatement extends Statement {\r\n kind = NodeKind.BREAK;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `class` declaration. */\r\nexport class ClassDeclaration extends DeclarationStatement {\r\n kind = NodeKind.CLASSDECLARATION;\r\n\r\n /** Accepted type parameters. */\r\n typeParameters: TypeParameterNode[];\r\n /** Base class type being extended, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n /** Interface types being implemented, if any. */\r\n implementsTypes: TypeNode[] | null; // can't be functions\r\n /** Class member declarations. */\r\n members: DeclarationStatement[];\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents a `continue` statement. */\r\nexport class ContinueStatement extends Statement {\r\n kind = NodeKind.CONTINUE;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `do` statement. */\r\nexport class DoStatement extends Statement {\r\n kind = NodeKind.DO;\r\n\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n /** Condition when to repeat. */\r\n condition: Expression;\r\n}\r\n\r\n/** Represents an empty statement, i.e., a semicolon terminating nothing. */\r\nexport class EmptyStatement extends Statement {\r\n kind = NodeKind.EMPTY;\r\n}\r\n\r\n/** Represents an `enum` declaration. */\r\nexport class EnumDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMDECLARATION;\r\n\r\n /** Enum value declarations. */\r\n values: EnumValueDeclaration[];\r\n}\r\n\r\n/** Represents a value of an `enum` declaration. */\r\nexport class EnumValueDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMVALUEDECLARATION;\r\n // name is inherited\r\n\r\n /** Value expression. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents an `export import` statement of an interface. */\r\nexport class ExportImportStatement extends Node {\r\n kind = NodeKind.EXPORTIMPORT;\r\n\r\n /** Identifier being imported. */\r\n name: IdentifierExpression;\r\n /** Identifier being exported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents a member of an `export` statement. */\r\nexport class ExportMember extends Node {\r\n kind = NodeKind.EXPORTMEMBER;\r\n\r\n /** Identifier being exported. */\r\n name: IdentifierExpression;\r\n /** Identifier seen when imported again. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `export` statement. */\r\nexport class ExportStatement extends Statement {\r\n kind = NodeKind.EXPORT;\r\n\r\n /** Array of members if a set of named exports, or `null` if a filespace export. */\r\n members: ExportMember[] | null;\r\n /** Path being exported from, if applicable. */\r\n path: StringLiteralExpression | null;\r\n /** Normalized path, if `path` is set. */\r\n normalizedPath: string | null;\r\n /** Mangled internal path being referenced, if `path` is set. */\r\n internalPath: string | null;\r\n}\r\n\r\n/** Represents an expression that is used as a statement. */\r\nexport class ExpressionStatement extends Statement {\r\n kind = NodeKind.EXPRESSION;\r\n\r\n /** Expression being used as a statement.*/\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a field declaration within a `class`. */\r\nexport class FieldDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.FIELDDECLARATION;\r\n\r\n /** Parameter index within the constructor, if applicable. */\r\n parameterIndex: i32 = -1;\r\n}\r\n\r\n/** Represents a `for` statement. */\r\nexport class ForStatement extends Statement {\r\n kind = NodeKind.FOR;\r\n\r\n /**\r\n * Initializer statement, if present.\r\n * Either a {@link VariableStatement} or {@link ExpressionStatement}.\r\n */\r\n initializer: Statement | null;\r\n /** Condition expression, if present. */\r\n condition: Expression | null;\r\n /** Incrementor expression, if present. */\r\n incrementor: Expression | null;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Represents a `function` declaration. */\r\nexport class FunctionDeclaration extends DeclarationStatement {\r\n kind = NodeKind.FUNCTIONDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Function signature. */\r\n signature: SignatureNode;\r\n /** Body statement. Usually a block. */\r\n body: Statement | null;\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents an `if` statement. */\r\nexport class IfStatement extends Statement {\r\n kind = NodeKind.IF;\r\n\r\n /** Condition. */\r\n condition: Expression;\r\n /** Statement executed when condition is `true`. */\r\n ifTrue: Statement;\r\n /** Statement executed when condition is `false`. */\r\n ifFalse: Statement | null;\r\n}\r\n\r\n/** Represents an `import` declaration part of an {@link ImportStatement}. */\r\nexport class ImportDeclaration extends DeclarationStatement {\r\n kind = NodeKind.IMPORTDECLARATION;\r\n\r\n /** Identifier being imported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `import` statement. */\r\nexport class ImportStatement extends Statement {\r\n kind = NodeKind.IMPORT;\r\n\r\n /** Array of member declarations or `null` if an asterisk import. */\r\n declarations: ImportDeclaration[] | null;\r\n /** Name of the local namespace, if an asterisk import. */\r\n namespaceName: IdentifierExpression | null;\r\n /** Path being imported from. */\r\n path: StringLiteralExpression;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Mangled internal path being referenced. */\r\n internalPath: string;\r\n}\r\n\r\n/** Represents an `interfarce` declaration. */\r\nexport class InterfaceDeclaration extends ClassDeclaration {\r\n kind = NodeKind.INTERFACEDECLARATION;\r\n}\r\n\r\n/** Represents a method declaration within a `class`. */\r\nexport class MethodDeclaration extends FunctionDeclaration {\r\n kind = NodeKind.METHODDECLARATION;\r\n}\r\n\r\n/** Represents a `namespace` declaration. */\r\nexport class NamespaceDeclaration extends DeclarationStatement {\r\n kind = NodeKind.NAMESPACEDECLARATION;\r\n\r\n /** Array of namespace members. */\r\n members: Statement[];\r\n}\r\n\r\n/** Represents a `return` statement. */\r\nexport class ReturnStatement extends Statement {\r\n kind = NodeKind.RETURN;\r\n\r\n /** Value expression being returned, if present. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents a single `case` within a `switch` statement. */\r\nexport class SwitchCase extends Node {\r\n kind = NodeKind.SWITCHCASE;\r\n\r\n /** Label expression. `null` indicates the default case. */\r\n label: Expression | null;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `switch` statement. */\r\nexport class SwitchStatement extends Statement {\r\n kind = NodeKind.SWITCH;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Contained cases. */\r\n cases: SwitchCase[];\r\n}\r\n\r\n/** Represents a `throw` statement. */\r\nexport class ThrowStatement extends Statement {\r\n kind = NodeKind.THROW;\r\n\r\n /** Value expression being thrown. */\r\n value: Expression;\r\n}\r\n\r\n/** Represents a `try` statement. */\r\nexport class TryStatement extends Statement {\r\n kind = NodeKind.TRY;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Exception variable name, if a `catch` clause is present. */\r\n catchVariable: IdentifierExpression | null;\r\n /** Statements being executed on catch, if a `catch` clause is present. */\r\n catchStatements: Statement[] | null;\r\n /** Statements being executed afterwards, if a `finally` clause is present. */\r\n finallyStatements: Statement[] | null;\r\n}\r\n\r\n/** Represents a `type` declaration. */\r\nexport class TypeDeclaration extends DeclarationStatement {\r\n kind = NodeKind.TYPEDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Type being aliased. */\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents a variable declaration part of a {@link VariableStatement}. */\r\nexport class VariableDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.VARIABLEDECLARATION;\r\n}\r\n\r\n/** Represents a variable statement wrapping {@link VariableDeclaration}s. */\r\nexport class VariableStatement extends Statement {\r\n kind = NodeKind.VARIABLE;\r\n\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null;\r\n /** Array of member declarations. */\r\n declarations: VariableDeclaration[];\r\n}\r\n\r\n/** Represents a void statement dropping an expression's value. */\r\nexport class VoidStatement extends Statement {\r\n kind = NodeKind.VOID;\r\n\r\n /** Expression being dropped. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a `while` statement. */\r\nexport class WhileStatement extends Statement {\r\n kind = NodeKind.WHILE;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Finds the first decorator matching the specified kind. */\r\nexport function findDecorator(kind: DecoratorKind, decorators: DecoratorNode[] | null): DecoratorNode | null {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n if (decorator.decoratorKind == kind) return decorator;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Mangles a declaration's name to an internal name. */\r\nexport function mangleInternalName(declaration: DeclarationStatement, asGlobal: bool = false): string {\r\n var name = declaration.name.text;\r\n var parent = declaration.parent;\r\n if (!parent) return name;\r\n if (\r\n declaration.kind == NodeKind.VARIABLEDECLARATION &&\r\n parent.kind == NodeKind.VARIABLE\r\n ) { // skip over\r\n if (!(parent = parent.parent)) return name;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) + (\r\n declaration.is(CommonFlags.STATIC)\r\n ? STATIC_DELIMITER\r\n : INSTANCE_DELIMITER\r\n ) + name;\r\n }\r\n if (\r\n parent.kind == NodeKind.NAMESPACEDECLARATION ||\r\n parent.kind == NodeKind.ENUMDECLARATION\r\n ) {\r\n return mangleInternalName(parent, asGlobal) +\r\n STATIC_DELIMITER + name;\r\n }\r\n return asGlobal\r\n ? name\r\n : declaration.range.source.internalPath + PATH_DELIMITER + name;\r\n}\r\n\r\n/** Mangles an external to an internal path. */\r\nexport function mangleInternalPath(path: string): string {\r\n if (path.endsWith(\".ts\")) path = path.substring(0, path.length - 3);\r\n return path;\r\n}\r\n\r\n// Helpers\r\n\r\n/** Sets the parent node on an array of nodes. */\r\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\n/** Sets the parent node on an array of nullable nodes. */\r\nfunction setParentIfNotNull(nodes: (Node | null)[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n let node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\r\n}\r\n","/**\r\n * Various compiler utilities.\r\n * @module util\r\n * @preferred\r\n *//***/\r\n\r\nexport * from \"./charcode\";\r\nexport * from \"./path\";\r\nexport * from \"./text\";\r\nexport * from \"./binary\";\r\n","/**\r\n * A thin wrapper around Binaryen's C-API.\r\n * @module module\r\n *//***/\r\n\r\nimport {\r\n Target\r\n} from \"./compiler\";\r\n\r\nexport type ModuleRef = usize;\r\nexport type FunctionTypeRef = usize;\r\nexport type FunctionRef = usize;\r\nexport type ExpressionRef = usize;\r\nexport type GlobalRef = usize;\r\nexport type ImportRef = usize;\r\nexport type ExportRef = usize;\r\nexport type Index = u32;\r\n\r\nexport enum NativeType {\r\n None = _BinaryenTypeNone(),\r\n I32 = _BinaryenTypeInt32(),\r\n I64 = _BinaryenTypeInt64(),\r\n F32 = _BinaryenTypeFloat32(),\r\n F64 = _BinaryenTypeFloat64(),\r\n Unreachable = _BinaryenTypeUnreachable(),\r\n Auto = _BinaryenTypeAuto()\r\n}\r\n\r\nexport enum ExpressionId {\r\n Invalid = _BinaryenInvalidId(),\r\n Block = _BinaryenBlockId(),\r\n If = _BinaryenIfId(),\r\n Loop = _BinaryenLoopId(),\r\n Break = _BinaryenBreakId(),\r\n Switch = _BinaryenSwitchId(),\r\n Call = _BinaryenCallId(),\r\n CallImport = _BinaryenCallImportId(),\r\n CallIndirect = _BinaryenCallIndirectId(),\r\n GetLocal = _BinaryenGetLocalId(),\r\n SetLocal = _BinaryenSetLocalId(),\r\n GetGlobal = _BinaryenGetGlobalId(),\r\n SetGlobal = _BinaryenSetGlobalId(),\r\n Load = _BinaryenLoadId(),\r\n Store = _BinaryenStoreId(),\r\n Const = _BinaryenConstId(),\r\n Unary = _BinaryenUnaryId(),\r\n Binary = _BinaryenBinaryId(),\r\n Select = _BinaryenSelectId(),\r\n Drop = _BinaryenDropId(),\r\n Return = _BinaryenReturnId(),\r\n Host = _BinaryenHostId(),\r\n Nop = _BinaryenNopId(),\r\n Unreachable = _BinaryenUnreachableId(),\r\n AtomicCmpxchg = _BinaryenAtomicCmpxchgId(),\r\n AtomicRMW = _BinaryenAtomicRMWId(),\r\n AtomicWait = _BinaryenAtomicWaitId(),\r\n AtomicWake = _BinaryenAtomicWakeId()\r\n}\r\n\r\nexport enum UnaryOp {\r\n ClzI32 = _BinaryenClzInt32(),\r\n CtzI32 = _BinaryenCtzInt32(),\r\n PopcntI32 = _BinaryenPopcntInt32(),\r\n NegF32 = _BinaryenNegFloat32(),\r\n AbsF32 = _BinaryenAbsFloat32(),\r\n CeilF32 = _BinaryenCeilFloat32(),\r\n FloorF32 = _BinaryenFloorFloat32(),\r\n TruncF32 = _BinaryenTruncFloat32(),\r\n NearestF32 = _BinaryenNearestFloat32(),\r\n SqrtF32 = _BinaryenSqrtFloat32(),\r\n EqzI32 = _BinaryenEqZInt32(),\r\n ClzI64 = _BinaryenClzInt64(),\r\n CtzI64 = _BinaryenCtzInt64(),\r\n PopcntI64 = _BinaryenPopcntInt64(),\r\n NegF64 = _BinaryenNegFloat64(),\r\n AbsF64 = _BinaryenAbsFloat64(),\r\n CeilF64 = _BinaryenCeilFloat64(),\r\n FloorF64 = _BinaryenFloorFloat64(),\r\n TruncF64 = _BinaryenTruncFloat64(),\r\n NearestF64 = _BinaryenNearestFloat64(),\r\n SqrtF64 = _BinaryenSqrtFloat64(),\r\n EqzI64 = _BinaryenEqZInt64(),\r\n ExtendI32 = _BinaryenExtendSInt32(),\r\n ExtendU32 = _BinaryenExtendUInt32(),\r\n WrapI64 = _BinaryenWrapInt64(),\r\n TruncF32ToI32 = _BinaryenTruncSFloat32ToInt32(),\r\n TruncF32ToI64 = _BinaryenTruncSFloat32ToInt64(),\r\n TruncF32ToU32 = _BinaryenTruncUFloat32ToInt32(),\r\n TruncF32ToU64 = _BinaryenTruncUFloat32ToInt64(),\r\n TruncF64ToI32 = _BinaryenTruncSFloat64ToInt32(),\r\n TruncF64ToI64 = _BinaryenTruncSFloat64ToInt64(),\r\n TruncF64ToU32 = _BinaryenTruncUFloat64ToInt32(),\r\n TruncF64ToU64 = _BinaryenTruncUFloat64ToInt64(),\r\n ReinterpretF32 = _BinaryenReinterpretFloat32(),\r\n ReinterpretF64 = _BinaryenReinterpretFloat64(),\r\n ConvertI32ToF32 = _BinaryenConvertSInt32ToFloat32(),\r\n ConvertI32ToF64 = _BinaryenConvertSInt32ToFloat64(),\r\n ConvertU32ToF32 = _BinaryenConvertUInt32ToFloat32(),\r\n ConvertU32ToF64 = _BinaryenConvertUInt32ToFloat64(),\r\n ConvertI64ToF32 = _BinaryenConvertSInt64ToFloat32(),\r\n ConvertI64ToF64 = _BinaryenConvertSInt64ToFloat64(),\r\n ConvertU64ToF32 = _BinaryenConvertUInt64ToFloat32(),\r\n ConvertU64ToF64 = _BinaryenConvertUInt64ToFloat64(),\r\n PromoteF32 = _BinaryenPromoteFloat32(),\r\n DemoteF64 = _BinaryenDemoteFloat64(),\r\n ReinterpretI32 = _BinaryenReinterpretInt32(),\r\n ReinterpretI64 = _BinaryenReinterpretInt64(),\r\n\r\n // see: https://github.com/WebAssembly/sign-extension-ops\r\n ExtendI8ToI32 = _BinaryenExtendS8Int32(),\r\n ExtendI16ToI32 = _BinaryenExtendS16Int32(),\r\n ExtendI8ToI64 = _BinaryenExtendS8Int64(),\r\n ExtendI16ToI64 = _BinaryenExtendS16Int64(),\r\n ExtendI32ToI64 = _BinaryenExtendS32Int64()\r\n\r\n // see: https://github.com/WebAssembly/nontrapping-float-to-int-conversions\r\n // TruncF32ToI32Sat\r\n // TruncF32ToU32Sat\r\n // TruncF64ToI32Sat\r\n // TruncF64ToU32Sat\r\n // TruncF32ToI64Sat\r\n // TruncF32ToU64Sat\r\n // TruncF64ToI64Sat\r\n // TruncF64ToU64Sat\r\n}\r\n\r\nexport enum BinaryOp {\r\n AddI32 = _BinaryenAddInt32(),\r\n SubI32 = _BinaryenSubInt32(),\r\n MulI32 = _BinaryenMulInt32(),\r\n DivI32 = _BinaryenDivSInt32(),\r\n DivU32 = _BinaryenDivUInt32(),\r\n RemI32 = _BinaryenRemSInt32(),\r\n RemU32 = _BinaryenRemUInt32(),\r\n AndI32 = _BinaryenAndInt32(),\r\n OrI32 = _BinaryenOrInt32(),\r\n XorI32 = _BinaryenXorInt32(),\r\n ShlI32 = _BinaryenShlInt32(),\r\n ShrU32 = _BinaryenShrUInt32(),\r\n ShrI32 = _BinaryenShrSInt32(),\r\n RotlI32 = _BinaryenRotLInt32(),\r\n RotrI32 = _BinaryenRotRInt32(),\r\n EqI32 = _BinaryenEqInt32(),\r\n NeI32 = _BinaryenNeInt32(),\r\n LtI32 = _BinaryenLtSInt32(),\r\n LtU32 = _BinaryenLtUInt32(),\r\n LeI32 = _BinaryenLeSInt32(),\r\n LeU32 = _BinaryenLeUInt32(),\r\n GtI32 = _BinaryenGtSInt32(),\r\n GtU32 = _BinaryenGtUInt32(),\r\n GeI32 = _BinaryenGeSInt32(),\r\n GeU32 = _BinaryenGeUInt32(),\r\n AddI64 = _BinaryenAddInt64(),\r\n SubI64 = _BinaryenSubInt64(),\r\n MulI64 = _BinaryenMulInt64(),\r\n DivI64 = _BinaryenDivSInt64(),\r\n DivU64 = _BinaryenDivUInt64(),\r\n RemI64 = _BinaryenRemSInt64(),\r\n RemU64 = _BinaryenRemUInt64(),\r\n AndI64 = _BinaryenAndInt64(),\r\n OrI64 = _BinaryenOrInt64(),\r\n XorI64 = _BinaryenXorInt64(),\r\n ShlI64 = _BinaryenShlInt64(),\r\n ShrU64 = _BinaryenShrUInt64(),\r\n ShrI64 = _BinaryenShrSInt64(),\r\n RotlI64 = _BinaryenRotLInt64(),\r\n RotrI64 = _BinaryenRotRInt64(),\r\n EqI64 = _BinaryenEqInt64(),\r\n NeI64 = _BinaryenNeInt64(),\r\n LtI64 = _BinaryenLtSInt64(),\r\n LtU64 = _BinaryenLtUInt64(),\r\n LeI64 = _BinaryenLeSInt64(),\r\n LeU64 = _BinaryenLeUInt64(),\r\n GtI64 = _BinaryenGtSInt64(),\r\n GtU64 = _BinaryenGtUInt64(),\r\n GeI64 = _BinaryenGeSInt64(),\r\n GeU64 = _BinaryenGeUInt64(),\r\n AddF32 = _BinaryenAddFloat32(),\r\n SubF32 = _BinaryenSubFloat32(),\r\n MulF32 = _BinaryenMulFloat32(),\r\n DivF32 = _BinaryenDivFloat32(),\r\n CopysignF32 = _BinaryenCopySignFloat32(),\r\n MinF32 = _BinaryenMinFloat32(),\r\n MaxF32 = _BinaryenMaxFloat32(),\r\n EqF32 = _BinaryenEqFloat32(),\r\n NeF32 = _BinaryenNeFloat32(),\r\n LtF32 = _BinaryenLtFloat32(),\r\n LeF32 = _BinaryenLeFloat32(),\r\n GtF32 = _BinaryenGtFloat32(),\r\n GeF32 = _BinaryenGeFloat32(),\r\n AddF64 = _BinaryenAddFloat64(),\r\n SubF64 = _BinaryenSubFloat64(),\r\n MulF64 = _BinaryenMulFloat64(),\r\n DivF64 = _BinaryenDivFloat64(),\r\n CopysignF64 = _BinaryenCopySignFloat64(),\r\n MinF64 = _BinaryenMinFloat64(),\r\n MaxF64 = _BinaryenMaxFloat64(),\r\n EqF64 = _BinaryenEqFloat64(),\r\n NeF64 = _BinaryenNeFloat64(),\r\n LtF64 = _BinaryenLtFloat64(),\r\n LeF64 = _BinaryenLeFloat64(),\r\n GtF64 = _BinaryenGtFloat64(),\r\n GeF64 = _BinaryenGeFloat64()\r\n}\r\n\r\nexport enum HostOp {\r\n PageSize = _BinaryenPageSize(),\r\n CurrentMemory = _BinaryenCurrentMemory(),\r\n GrowMemory = _BinaryenGrowMemory(),\r\n HasFeature = _BinaryenHasFeature(),\r\n\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n // MoveMemory\r\n // SetMemory\r\n}\r\n\r\nexport enum AtomicRMWOp {\r\n Add = _BinaryenAtomicRMWAdd(),\r\n Sub = _BinaryenAtomicRMWSub(),\r\n And = _BinaryenAtomicRMWAnd(),\r\n Or = _BinaryenAtomicRMWOr(),\r\n Xor = _BinaryenAtomicRMWXor(),\r\n Xchg = _BinaryenAtomicRMWXchg()\r\n}\r\n\r\nexport class MemorySegment {\r\n\r\n buffer: Uint8Array;\r\n offset: I64;\r\n\r\n static create(buffer: Uint8Array, offset: I64): MemorySegment {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n }\r\n}\r\n\r\nexport class Module {\r\n\r\n ref: ModuleRef;\r\n\r\n private cachedByValue: usize;\r\n\r\n /** Maximum number of pages when targeting WASM32. */\r\n static readonly MAX_MEMORY_WASM32: Index = 0xffff;\r\n\r\n /** Maximum number of pages when targeting WASM64. */\r\n static readonly MAX_MEMORY_WASM64: Index = 0xffff; // TODO\r\n\r\n static create(): Module {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.cachedByValue = allocate_memory(16);\r\n return module;\r\n }\r\n\r\n static createFrom(buffer: Uint8Array): Module {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.cachedByValue = allocate_memory(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n free_memory(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeFunctionType(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunctionType(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocPtrArray(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, numNames, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) free_memory(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallImport(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCallImport(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocPtrArray(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[] | null,\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes ? varTypes.length : 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n private cachedTemporaryName: usize = 0;\r\n private hasTemporaryFunction: bool = false;\r\n\r\n addTemporaryFunction(result: NativeType, paramTypes: NativeType[] | null, body: ExpressionRef): FunctionRef {\r\n this.hasTemporaryFunction = assert(!this.hasTemporaryFunction);\r\n var tempName = this.cachedTemporaryName;\r\n if (!tempName) this.cachedTemporaryName = tempName = allocString(\"\"); // works because strings are interned\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n let typeRef = _BinaryenAddFunctionType(this.ref, tempName, result, cArr, paramTypes ? paramTypes.length : 0);\r\n return _BinaryenAddFunction(this.ref, tempName, typeRef, 0, 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeTemporaryFunction(): void {\r\n this.hasTemporaryFunction = !assert(this.hasTemporaryFunction);\r\n var tempName = assert(this.cachedTemporaryName);\r\n _BinaryenRemoveFunction(this.ref, tempName);\r\n _BinaryenRemoveFunctionType(this.ref, tempName);\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeImport(internalName: string): void {\r\n var cStr = allocString(internalName);\r\n try {\r\n _BinaryenRemoveImport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n free_memory(cArr3);\r\n free_memory(cArr2);\r\n free_memory(cArr1);\r\n for (let i = k - 1; i >= 0; --i) free_memory(segs[i]);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(funcs: FunctionRef[]): void {\r\n var cArr = allocPtrArray(funcs);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, funcs.length);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n free_memory(cArr);\r\n for (let i = numNames; i >= 0; --i) {\r\n free_memory(names[i]);\r\n }\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0;\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeFunction(func: FunctionRef): void {\r\n var names = this.cachedPrecomputeNames;\r\n if (!names) {\r\n let name = allocString(\"precompute\");\r\n this.cachedPrecomputeName = name;\r\n this.cachedPrecomputeNames = names = allocI32Array([ name ]);\r\n }\r\n _BinaryenFunctionRunPasses(func, this.ref, names, 1);\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): BinaryModule {\r\n var out = this.cachedByValue;\r\n var cStr = allocString(sourceMapUrl);\r\n var binaryPtr: usize = 0;\r\n var sourceMapPtr: usize = 0;\r\n try {\r\n _BinaryenModuleAllocateAndWrite(out, this.ref, cStr);\r\n binaryPtr = readInt(out);\r\n let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let ret = new BinaryModule();\r\n ret.output = readBuffer(binaryPtr, binaryBytes);\r\n ret.sourceMap = readString(sourceMapPtr);\r\n return ret;\r\n } finally {\r\n if (cStr) free_memory(cStr);\r\n if (binaryPtr) free_memory(binaryPtr);\r\n if (sourceMapPtr) free_memory(sourceMapPtr);\r\n }\r\n }\r\n\r\n toText(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n toAsmjs(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n dispose(): void {\r\n assert(this.ref);\r\n free_memory(this.cachedByValue);\r\n free_memory(this.cachedTemporaryName);\r\n free_memory(this.cachedPrecomputeName);\r\n free_memory(this.cachedPrecomputeNames);\r\n _BinaryenModuleDispose(this.ref);\r\n this.ref = 0;\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(\r\n expr: ExpressionRef,\r\n noSideEffects: bool = false,\r\n maxDepth: i32 = i32.MAX_VALUE\r\n ): ExpressionRef { // currently supports side effect free expressions only\r\n if (maxDepth < 0) return 0;\r\n maxDepth -= 1;\r\n\r\n var nested1: ExpressionRef,\r\n nested2: ExpressionRef;\r\n\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n }\r\n case ExpressionId.GetLocal: {\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n }\r\n case ExpressionId.GetGlobal: {\r\n let globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n }\r\n case ExpressionId.Load: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return (\r\n _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n );\r\n }\r\n case ExpressionId.Unary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n }\r\n case ExpressionId.Binary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\n// expressions\r\n\r\nexport function getExpressionId(expr: ExpressionRef): ExpressionId {\r\n return _BinaryenExpressionGetId(expr);\r\n}\r\n\r\nexport function getExpressionType(expr: ExpressionRef): NativeType {\r\n return _BinaryenExpressionGetType(expr);\r\n}\r\n\r\nexport function getConstValueI32(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI32(expr);\r\n}\r\n\r\nexport function getConstValueI64Low(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64Low(expr);\r\n}\r\n\r\nexport function getConstValueI64High(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64High(expr);\r\n}\r\n\r\nexport function getConstValueF32(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF32(expr);\r\n}\r\n\r\nexport function getConstValueF64(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF64(expr);\r\n}\r\n\r\nexport function getGetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenGetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenSetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSetLocalGetValue(expr);\r\n}\r\n\r\nexport function isTeeLocal(expr: ExpressionRef): bool {\r\n return _BinaryenSetLocalIsTee(expr);\r\n}\r\n\r\nexport function getBinaryOp(expr: ExpressionRef): BinaryOp {\r\n return _BinaryenBinaryGetOp(expr);\r\n}\r\n\r\nexport function getBinaryLeft(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetLeft(expr);\r\n}\r\n\r\nexport function getBinaryRight(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetRight(expr);\r\n}\r\n\r\nexport function getUnaryOp(expr: ExpressionRef): UnaryOp {\r\n return _BinaryenUnaryGetOp(expr);\r\n}\r\n\r\nexport function getUnaryValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenUnaryGetValue(expr);\r\n}\r\n\r\nexport function getLoadBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetBytes(expr);\r\n}\r\n\r\nexport function getLoadOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetOffset(expr);\r\n}\r\n\r\nexport function getLoadPtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoadGetPtr(expr);\r\n}\r\n\r\nexport function isLoadSigned(expr: ExpressionRef): bool {\r\n return _BinaryenLoadIsSigned(expr);\r\n}\r\n\r\nexport function getStoreBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetBytes(expr);\r\n}\r\n\r\nexport function getStoreOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetOffset(expr);\r\n}\r\n\r\nexport function getStorePtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetPtr(expr);\r\n}\r\n\r\nexport function getStoreValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetValue(expr);\r\n}\r\n\r\nexport function getBlockName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBlockGetName(expr));\r\n}\r\n\r\nexport function getBlockChildCount(expr: ExpressionRef): Index {\r\n return _BinaryenBlockGetNumChildren(expr);\r\n}\r\n\r\nexport function getBlockChild(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenBlockGetChild(expr, index);\r\n}\r\n\r\nexport function getIfCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetCondition(expr);\r\n}\r\n\r\nexport function getIfTrue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfTrue(expr);\r\n}\r\n\r\nexport function getIfFalse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfFalse(expr);\r\n}\r\n\r\nexport function getLoopName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenLoopGetName(expr));\r\n}\r\n\r\nexport function getLoopBody(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoopGetBody(expr);\r\n}\r\n\r\nexport function getBreakName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBreakGetName(expr));\r\n}\r\n\r\nexport function getBreakCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBreakGetCondition(expr);\r\n}\r\n\r\nexport function getSelectThen(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfTrue(expr);\r\n}\r\n\r\nexport function getSelectElse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfFalse(expr);\r\n}\r\n\r\nexport function getSelectCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetCondition(expr);\r\n}\r\n\r\nexport function getDropValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenDropGetValue(expr);\r\n}\r\n\r\nexport function getReturnValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenReturnGetValue(expr);\r\n}\r\n\r\nexport function getCallTarget(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenCallGetTarget(expr));\r\n}\r\n\r\nexport function getHostOp(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenHostGetOp(expr);\r\n}\r\n\r\nexport function getHostOperandCount(expr: ExpressionRef): Index {\r\n return _BinaryenHostGetNumOperands(expr);\r\n}\r\n\r\nexport function getHostOperand(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenHostGetOperand(expr, index);\r\n}\r\n\r\nexport function getHostName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenHostGetNameOperand(expr));\r\n}\r\n\r\n// functions\r\n\r\nexport function getFunctionBody(func: FunctionRef): ExpressionRef {\r\n return _BinaryenFunctionGetBody(func);\r\n}\r\n\r\nexport function getFunctionName(func: FunctionRef): string | null {\r\n return readString(_BinaryenFunctionGetName(func));\r\n}\r\n\r\nexport function getFunctionParamCount(func: FunctionRef): Index {\r\n return _BinaryenFunctionGetNumParams(func);\r\n}\r\n\r\nexport function getFunctionParamType(func: FunctionRef, index: Index): NativeType {\r\n return _BinaryenFunctionGetParam(func, index);\r\n}\r\n\r\nexport function getFunctionResultType(func: FunctionRef): NativeType {\r\n return _BinaryenFunctionGetResult(func);\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n }\r\n\r\n private constructor() {}\r\n\r\n addBlock(code: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlock(this.ref, code);\r\n }\r\n\r\n addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void {\r\n _RelooperAddBranch(from, to, condition, code);\r\n }\r\n\r\n addBlockWithSwitch(code: ExpressionRef, condition: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n }\r\n\r\n addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n }\r\n}\r\n\r\n// export function hasSideEffects(expr: ExpressionRef): bool {\r\n// switch (_BinaryenExpressionGetId(expr = getPtr(expr))) {\r\n// case ExpressionId.GetLocal:\r\n// case ExpressionId.GetGlobal:\r\n// case ExpressionId.Const:\r\n// case ExpressionId.Nop:\r\n// case ExpressionId.Unreachable: {\r\n// return false;\r\n// }\r\n// case ExpressionId.Block: {\r\n// for (let i = 0, k = _BinaryenBlockGetNumChildren(expr); i < k; ++i) {\r\n// if (hasSideEffects(_BinaryenBlockGetChild(expr, i))) return true;\r\n// }\r\n// return false;\r\n// }\r\n// case ExpressionId.If: {\r\n// return hasSideEffects(_BinaryenIfGetCondition(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfFalse(expr));\r\n// }\r\n// case ExpressionId.Unary: {\r\n// return hasSideEffects(_BinaryenUnaryGetValue(expr));\r\n// }\r\n// case ExpressionId.Binary: {\r\n// return hasSideEffects(_BinaryenBinaryGetLeft(expr))\r\n// || hasSideEffects(_BinaryenBinaryGetRight(expr));\r\n// }\r\n// case ExpressionId.Drop: {\r\n// return hasSideEffects(_BinaryenDropGetValue(expr));\r\n// }\r\n// case ExpressionId.Select: {\r\n// return hasSideEffects(_BinaryenSelectGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenSelectGetIfFalse(expr))\r\n// || hasSideEffects(_BinaryenSelectGetCondition(expr));\r\n// }\r\n// }\r\n// return true;\r\n// }\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var numValues = u8s.length;\r\n var ptr = allocate_memory(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = allocate_memory(i32s.length << 2);\r\n var idx = ptr;\r\n for (let i = 0, k = i32s.length; i < k; ++i) {\r\n let val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocPtrArray(ptrs: usize[] | null): usize {\r\n return allocI32Array(ptrs); // TODO: WASM64 one day\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = allocate_memory(stringLengthUTF8(str) + 1);\r\n // the following is based on Emscripten's stringToUTF8Array\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\nfunction readInt(ptr: usize): i32 {\r\n return (\r\n load(ptr ) |\r\n (load(ptr + 1) << 8) |\r\n (load(ptr + 2) << 16) |\r\n (load(ptr + 3) << 24)\r\n );\r\n}\r\n\r\nfunction readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (let i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n arr.push(cp);\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\nexport class BinaryModule {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n","/**\r\n * AssemblyScript's intermediate representation describing a program's elements.\r\n * @module program\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX,\r\n GETTER_PREFIX,\r\n SETTER_PREFIX,\r\n FILESPACE_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Options,\r\n Feature\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n Signature\r\n} from \"./types\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n CommonTypeNode,\r\n TypeParameterNode,\r\n DecoratorNode,\r\n DecoratorKind,\r\n\r\n Expression,\r\n IdentifierExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n StringLiteralExpression,\r\n\r\n ClassDeclaration,\r\n DeclarationStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportMember,\r\n ExportStatement,\r\n FieldDeclaration,\r\n FunctionDeclaration,\r\n ImportDeclaration,\r\n ImportStatement,\r\n InterfaceDeclaration,\r\n MethodDeclaration,\r\n NamespaceDeclaration,\r\n TypeDeclaration,\r\n VariableDeclaration,\r\n VariableLikeDeclarationStatement,\r\n VariableStatement,\r\n\r\n decoratorNameToKind\r\n} from \"./ast\";\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionRef,\r\n ExpressionId,\r\n BinaryOp,\r\n UnaryOp,\r\n\r\n getExpressionId,\r\n getGetLocalIndex,\r\n isTeeLocal,\r\n getSetLocalValue,\r\n getBinaryOp,\r\n getConstValueI32,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getUnaryOp,\r\n getExpressionType,\r\n getLoadBytes,\r\n isLoadSigned,\r\n getIfTrue,\r\n getIfFalse,\r\n getSelectThen,\r\n getSelectElse,\r\n getCallTarget,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getConstValueI64Low\r\n} from \"./module\";\r\n\r\nimport {\r\n CharCode\r\n} from \"./util\";\r\n\r\nimport {\r\n Resolver\r\n} from \"./resolver\";\r\n\r\n/** Represents a yet unresolved import. */\r\nclass QueuedImport {\r\n localName: string;\r\n externalName: string;\r\n externalNameAlt: string;\r\n declaration: ImportDeclaration | null; // not set if a filespace\r\n}\r\n\r\n/** Represents a yet unresolved export. */\r\nclass QueuedExport {\r\n externalName: string;\r\n isReExport: bool;\r\n member: ExportMember;\r\n}\r\n\r\n/** Represents a type alias. */\r\nclass TypeAlias {\r\n typeParameters: TypeParameterNode[] | null;\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents the kind of an operator overload. */\r\nexport enum OperatorKind {\r\n INVALID,\r\n\r\n // indexed access\r\n INDEXED_GET, // a[]\r\n INDEXED_SET, // a[]=b\r\n UNCHECKED_INDEXED_GET, // unchecked(a[])\r\n UNCHECKED_INDEXED_SET, // unchecked(a[]=b)\r\n\r\n // binary\r\n ADD, // a + b\r\n SUB, // a - b\r\n MUL, // a * b\r\n DIV, // a / b\r\n REM, // a % b\r\n POW, // a ** b\r\n BITWISE_AND, // a & b\r\n BITWISE_OR, // a | b\r\n BITWISE_XOR, // a ^ b\r\n BITWISE_SHL, // a << b\r\n BITWISE_SHR, // a >> b\r\n BITWISE_SHR_U, // a >>> b\r\n EQ, // a == b\r\n NE, // a != b\r\n GT, // a > b\r\n GE, // a >= b\r\n LT, // a < b\r\n LE, // a <= b\r\n\r\n // unary prefix\r\n PLUS, // +a\r\n MINUS, // -a\r\n NOT, // !a\r\n BITWISE_NOT, // ~a\r\n PREFIX_INC, // ++a\r\n PREFIX_DEC, // --a\r\n\r\n // unary postfix\r\n POSTFIX_INC, // a++\r\n POSTFIX_DEC // a--\r\n\r\n // not overridable:\r\n // IDENTITY // a === b\r\n // LOGICAL_AND // a && b\r\n // LOGICAL_OR // a || b\r\n}\r\n\r\n/** Returns the operator kind represented by the specified decorator and string argument. */\r\nfunction operatorKindFromDecorator(decoratorKind: DecoratorKind, arg: string): OperatorKind {\r\n assert(arg.length);\r\n switch (decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.OPENBRACKET: {\r\n if (arg == \"[]\") return OperatorKind.INDEXED_GET;\r\n if (arg == \"[]=\") return OperatorKind.INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.OPENBRACE: {\r\n if (arg == \"{}\") return OperatorKind.UNCHECKED_INDEXED_GET;\r\n if (arg == \"{}=\") return OperatorKind.UNCHECKED_INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.ADD;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.SUB;\r\n break;\r\n }\r\n case CharCode.ASTERISK: {\r\n if (arg == \"*\") return OperatorKind.MUL;\r\n if (arg == \"**\") return OperatorKind.POW;\r\n break;\r\n }\r\n case CharCode.SLASH: {\r\n if (arg == \"/\") return OperatorKind.DIV;\r\n break;\r\n }\r\n case CharCode.PERCENT: {\r\n if (arg == \"%\") return OperatorKind.REM;\r\n break;\r\n }\r\n case CharCode.AMPERSAND: {\r\n if (arg == \"&\") return OperatorKind.BITWISE_AND;\r\n break;\r\n }\r\n case CharCode.BAR: {\r\n if (arg == \"|\") return OperatorKind.BITWISE_OR;\r\n break;\r\n }\r\n case CharCode.CARET: {\r\n if (arg == \"^\") return OperatorKind.BITWISE_XOR;\r\n break;\r\n }\r\n case CharCode.EQUALS: {\r\n if (arg == \"==\") return OperatorKind.EQ;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!=\") return OperatorKind.NE;\r\n break;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n if (arg == \">\") return OperatorKind.GT;\r\n if (arg == \">=\") return OperatorKind.GE;\r\n if (arg == \">>\") return OperatorKind.BITWISE_SHR;\r\n if (arg == \">>>\") return OperatorKind.BITWISE_SHR_U;\r\n break;\r\n }\r\n case CharCode.LESSTHAN: {\r\n if (arg == \"<\") return OperatorKind.LT;\r\n if (arg == \"<=\") return OperatorKind.LE;\r\n if (arg == \"<<\") return OperatorKind.BITWISE_SHL;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_PREFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.PLUS;\r\n if (arg == \"++\") return OperatorKind.PREFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.MINUS;\r\n if (arg == \"--\") return OperatorKind.PREFIX_DEC;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!\") return OperatorKind.NOT;\r\n break;\r\n }\r\n case CharCode.TILDE: {\r\n if (arg == \"~\") return OperatorKind.BITWISE_NOT;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"++\") return OperatorKind.POSTFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"--\") return OperatorKind.POSTFIX_DEC;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n return OperatorKind.INVALID;\r\n}\r\n\r\nconst noTypesYet = new Map();\r\n\r\n/** Represents an AssemblyScript program. */\r\nexport class Program extends DiagnosticEmitter {\r\n\r\n /** Array of source files. */\r\n sources: Source[];\r\n /** Resolver instance. */\r\n resolver: Resolver;\r\n /** Diagnostic offset used where successively obtaining the next diagnostic. */\r\n diagnosticsOffset: i32 = 0;\r\n /** Compiler options. */\r\n options: Options;\r\n\r\n /** Elements by internal name. */\r\n elementsLookup: Map = new Map();\r\n /** Class and function instances by internal name. */\r\n instancesLookup: Map = new Map();\r\n /** Types by internal name. */\r\n typesLookup: Map = noTypesYet;\r\n /** Declared type aliases. */\r\n typeAliases: Map = new Map();\r\n /** File-level exports by exported name. */\r\n fileLevelExports: Map = new Map();\r\n /** Module-level exports by exported name. */\r\n moduleLevelExports: Map = new Map();\r\n\r\n /** Array prototype reference. */\r\n arrayPrototype: ClassPrototype | null = null;\r\n /** String instance reference. */\r\n stringInstance: Class | null = null;\r\n /** Start function reference. */\r\n startFunction: FunctionPrototype;\r\n /** Main function reference, if present. */\r\n mainFunction: FunctionPrototype | null = null;\r\n\r\n /** Currently processing filespace. */\r\n currentFilespace: Filespace;\r\n\r\n /** Constructs a new program, optionally inheriting parser diagnostics. */\r\n constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.resolver = new Resolver(this);\r\n this.sources = [];\r\n }\r\n\r\n /** Gets a source by its exact path. */\r\n getSource(normalizedPath: string): Source | null {\r\n var sources = this.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n let source = sources[i];\r\n if (source.normalizedPath == normalizedPath) return source;\r\n }\r\n return null;\r\n }\r\n\r\n /** Looks up the source for the specified possibly ambiguous path. */\r\n lookupSourceByPath(normalizedPathWithoutExtension: string): Source | null {\r\n var tmp: string;\r\n return (\r\n this.getSource(normalizedPathWithoutExtension + \".ts\") ||\r\n this.getSource(normalizedPathWithoutExtension + \"/index.ts\") ||\r\n this.getSource((tmp = LIBRARY_PREFIX + normalizedPathWithoutExtension) + \".ts\") ||\r\n this.getSource( tmp + \"/index.ts\")\r\n );\r\n }\r\n\r\n /** Initializes the program and its elements prior to compilation. */\r\n initialize(options: Options): void {\r\n this.options = options;\r\n\r\n // add built-in types\r\n this.typesLookup = new Map([\r\n [\"i8\", Type.i8],\r\n [\"i16\", Type.i16],\r\n [\"i32\", Type.i32],\r\n [\"i64\", Type.i64],\r\n [\"isize\", options.isizeType],\r\n [\"u8\", Type.u8],\r\n [\"u16\", Type.u16],\r\n [\"u32\", Type.u32],\r\n [\"u64\", Type.u64],\r\n [\"usize\", options.usizeType],\r\n [\"bool\", Type.bool],\r\n [\"f32\", Type.f32],\r\n [\"f64\", Type.f64],\r\n [\"void\", Type.void],\r\n [\"number\", Type.f64],\r\n [\"boolean\", Type.bool]\r\n ]);\r\n\r\n // add compiler hints\r\n this.setConstantInteger(\"ASC_TARGET\", Type.i32,\r\n i64_new(options.isWasm64 ? 2 : 1));\r\n this.setConstantInteger(\"ASC_NO_TREESHAKING\", Type.bool,\r\n i64_new(options.noTreeShaking ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_NO_ASSERT\", Type.bool,\r\n i64_new(options.noAssert ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_MEMORY_BASE\", Type.i32,\r\n i64_new(options.memoryBase, 0));\r\n this.setConstantInteger(\"ASC_OPTIMIZE_LEVEL\", Type.i32,\r\n i64_new(options.optimizeLevelHint, 0));\r\n this.setConstantInteger(\"ASC_SHRINK_LEVEL\", Type.i32,\r\n i64_new(options.shrinkLevelHint, 0));\r\n this.setConstantInteger(\"ASC_FEATURE_MUTABLE_GLOBAL\", Type.bool,\r\n i64_new(options.hasFeature(Feature.MUTABLE_GLOBAL) ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_FEATURE_SIGN_EXTENSION\", Type.bool,\r\n i64_new(options.hasFeature(Feature.SIGN_EXTENSION) ? 1 : 0, 0));\r\n\r\n // remember deferred elements\r\n var queuedImports = new Array();\r\n var queuedExports = new Map();\r\n var queuedExtends = new Array();\r\n var queuedImplements = new Array();\r\n\r\n // build initial lookup maps of internal names to declarations\r\n for (let i = 0, k = this.sources.length; i < k; ++i) {\r\n let source = this.sources[i];\r\n\r\n // create one filespace per source\r\n let filespace = new Filespace(this, source);\r\n this.elementsLookup.set(filespace.internalName, filespace);\r\n this.currentFilespace = filespace;\r\n\r\n // process this source's statements\r\n let statements = source.statements;\r\n for (let j = 0, l = statements.length; j < l; ++j) {\r\n let statement = statements[j];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(statement, queuedExtends, queuedImplements);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(statement);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n this.initializeExports(statement, queuedExports);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(statement);\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.initializeImports(statement, queuedExports, queuedImports);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(statement);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(statement, queuedExtends, queuedImplements);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n this.initializeTypeAlias(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(statement);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // queued imports should be resolvable now through traversing exports and queued exports\r\n for (let i = 0; i < queuedImports.length;) {\r\n let queuedImport = queuedImports[i];\r\n let declaration = queuedImport.declaration;\r\n if (declaration) { // named\r\n let element = this.tryLocateImport(queuedImport.externalName, queuedExports);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.tryLocateImport(queuedImport.externalNameAlt, queuedExports)) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Module_0_has_no_exported_member_1,\r\n declaration.range,\r\n (declaration.parent).path.value,\r\n declaration.externalName.text\r\n );\r\n ++i;\r\n }\r\n }\r\n } else { // filespace\r\n let element = this.elementsLookup.get(queuedImport.externalName);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.elementsLookup.get(queuedImport.externalNameAlt)) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n assert(false); // already reported by the parser not finding the file\r\n ++i;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // queued exports should be resolvable now that imports are finalized\r\n for (let [exportName, queuedExport] of queuedExports) {\r\n let currentExport: QueuedExport | null = queuedExport; // nullable below\r\n let element: Element | null;\r\n do {\r\n if (currentExport.isReExport) {\r\n if (element = this.fileLevelExports.get(currentExport.externalName)) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n currentExport.member.externalName\r\n );\r\n break;\r\n }\r\n currentExport = queuedExports.get(currentExport.externalName);\r\n if (!currentExport) {\r\n this.error(\r\n DiagnosticCode.Module_0_has_no_exported_member_1,\r\n queuedExport.member.externalName.range,\r\n ((queuedExport.member.parent).path).value,\r\n queuedExport.member.externalName.text\r\n );\r\n }\r\n } else {\r\n if (\r\n // normal export\r\n (element = this.elementsLookup.get(currentExport.externalName)) ||\r\n // library re-export\r\n (element = this.elementsLookup.get(currentExport.member.name.text))\r\n ) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n currentExport.member.externalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n queuedExport.member.range, queuedExport.member.name.text\r\n );\r\n }\r\n break;\r\n }\r\n } while (currentExport);\r\n }\r\n\r\n // resolve base prototypes of derived classes\r\n var resolver = this.resolver;\r\n for (let i = 0, k = queuedExtends.length; i < k; ++i) {\r\n let derivedPrototype = queuedExtends[i];\r\n let derivedDeclaration = derivedPrototype.declaration;\r\n let derivedType = assert(derivedDeclaration.extendsType);\r\n let baseElement = resolver.resolveIdentifier(derivedType.name, null); // reports\r\n if (!baseElement) continue;\r\n if (baseElement.kind == ElementKind.CLASS_PROTOTYPE) {\r\n let basePrototype = baseElement;\r\n derivedPrototype.basePrototype = basePrototype;\r\n } else {\r\n this.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n derivedType.range\r\n );\r\n }\r\n }\r\n\r\n // set up global aliases\r\n var globalAliases = options.globalAliases;\r\n if (globalAliases) {\r\n for (let [alias, name] of globalAliases) {\r\n if (!name.length) continue; // explicitly disabled\r\n let element = this.elementsLookup.get(name);\r\n if (element) this.elementsLookup.set(alias, element);\r\n else throw new Error(\"element not found: \" + name);\r\n }\r\n }\r\n\r\n // register 'Array'\r\n var arrayPrototype = this.elementsLookup.get(\"Array\");\r\n if (arrayPrototype) {\r\n assert(arrayPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayPrototype = arrayPrototype;\r\n }\r\n\r\n // register 'String'\r\n var stringPrototype = this.elementsLookup.get(\"String\");\r\n if (stringPrototype) {\r\n assert(stringPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n let stringInstance = resolver.resolveClass(stringPrototype, null);\r\n if (stringInstance) {\r\n if (this.typesLookup.has(\"string\")) {\r\n let declaration = (stringPrototype).declaration;\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n } else {\r\n this.stringInstance = stringInstance;\r\n this.typesLookup.set(\"string\", stringInstance.type);\r\n }\r\n }\r\n }\r\n\r\n // register 'start'\r\n {\r\n let element = assert(this.elementsLookup.get(\"start\"));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.startFunction = element;\r\n }\r\n\r\n // register 'main' if present\r\n if (this.moduleLevelExports.has(\"main\")) {\r\n let element = this.moduleLevelExports.get(\"main\");\r\n if (\r\n element.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n !(element).isAny(CommonFlags.GENERIC | CommonFlags.AMBIENT)\r\n ) {\r\n (element).set(CommonFlags.MAIN);\r\n this.mainFunction = element;\r\n }\r\n }\r\n }\r\n\r\n /** Sets a constant integer value. */\r\n setConstantInteger(globalName: string, type: Type, value: I64): void {\r\n assert(type.is(TypeFlags.INTEGER));\r\n this.elementsLookup.set(globalName,\r\n new Global(this, globalName, globalName, type, null, DecoratorFlags.NONE)\r\n .withConstantIntegerValue(value)\r\n );\r\n }\r\n\r\n /** Sets a constant float value. */\r\n setConstantFloat(globalName: string, type: Type, value: f64): void {\r\n assert(type.is(TypeFlags.FLOAT));\r\n this.elementsLookup.set(globalName,\r\n new Global(this, globalName, globalName, type, null, DecoratorFlags.NONE)\r\n .withConstantFloatValue(value)\r\n );\r\n }\r\n\r\n /** Tries to locate an import by traversing exports and queued exports. */\r\n private tryLocateImport(\r\n externalName: string,\r\n queuedNamedExports: Map\r\n ): Element | null {\r\n var element: Element | null;\r\n var fileLevelExports = this.fileLevelExports;\r\n do {\r\n if (element = fileLevelExports.get(externalName)) return element;\r\n let queuedExport = queuedNamedExports.get(externalName);\r\n if (!queuedExport) break;\r\n if (queuedExport.isReExport) {\r\n externalName = queuedExport.externalName;\r\n continue;\r\n }\r\n return this.elementsLookup.get(queuedExport.externalName);\r\n } while (true);\r\n return null;\r\n }\r\n\r\n /** Checks that only supported decorators are present. */\r\n private checkDecorators(\r\n decorators: DecoratorNode[],\r\n acceptedFlags: DecoratorFlags\r\n ): DecoratorFlags {\r\n var presentFlags = DecoratorFlags.NONE;\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n let kind = decoratorNameToKind(decorator.name);\r\n let flag = decoratorKindToFlag(kind);\r\n if (flag) {\r\n if (!(acceptedFlags & flag)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else if (presentFlags & flag) {\r\n this.error(\r\n DiagnosticCode.Duplicate_decorator,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else {\r\n presentFlags |= flag;\r\n }\r\n }\r\n }\r\n return presentFlags;\r\n }\r\n\r\n /** Checks and sets up global options of an element. */\r\n private checkGlobal(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var parentNode = declaration.parent;\r\n // alias the element globally if it is ...\r\n if (\r\n // explicitly annotated with @global - or -\r\n (element.hasDecorator(DecoratorFlags.GLOBAL)) ||\r\n // part of the special builtins library file - or -\r\n (declaration.range.source.is(CommonFlags.BUILTIN)) ||\r\n // exported from a top-level library file\r\n (\r\n declaration.range.source.isLibrary &&\r\n element.is(CommonFlags.EXPORT) &&\r\n (\r\n assert(parentNode).kind == NodeKind.SOURCE ||\r\n (\r\n parentNode).kind == NodeKind.VARIABLE &&\r\n assert((parentNode).parent).kind == NodeKind.SOURCE\r\n )\r\n )\r\n ) {\r\n let globalName = declaration.programLevelInternalName;\r\n if (this.elementsLookup.has(globalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, element.internalName\r\n );\r\n } else {\r\n this.elementsLookup.set(globalName, element);\r\n // builtins can use the global name directly instead of being just an alias\r\n if (element.is(CommonFlags.BUILTIN)) element.internalName = globalName;\r\n }\r\n }\r\n }\r\n\r\n /** Initializes a class declaration. */\r\n private initializeClass(\r\n declaration: ClassDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new ClassPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.SEALED |\r\n DecoratorFlags.UNMANAGED\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n var implementsTypes = declaration.implementsTypes;\r\n if (implementsTypes) {\r\n let numImplementsTypes = implementsTypes.length;\r\n if (prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (numImplementsTypes) {\r\n this.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_implement_interfaces,\r\n Range.join(\r\n declaration.name.range,\r\n implementsTypes[numImplementsTypes - 1].range\r\n )\r\n );\r\n }\r\n\r\n // remember classes that implement interfaces\r\n } else if (numImplementsTypes) {\r\n for (let i = 0; i < numImplementsTypes; ++i) {\r\n this.warning( // TODO\r\n DiagnosticCode.Operation_not_supported,\r\n implementsTypes[i].range\r\n );\r\n }\r\n queuedImplements.push(prototype);\r\n }\r\n }\r\n\r\n // remember classes that extend another one\r\n if (declaration.extendsType) queuedExtends.push(prototype);\r\n\r\n // add as namespace member if applicable\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // otherwise add to file-level exports if exported\r\n } else if (prototype.is(CommonFlags.EXPORT)) {\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (prototype.is(CommonFlags.EXPORT) && declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, prototype);\r\n }\r\n }\r\n\r\n // initialize members\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false); // should have been reported while parsing\r\n return;\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n /** Initializes a field of a class or interface. */\r\n private initializeField(\r\n declaration: FieldDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var decorators = declaration.decorators;\r\n var isInterface = classPrototype.kind == ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n // static fields become global variables\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n if (isInterface) {\r\n // should have been reported while parsing\r\n assert(false);\r\n }\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n let staticField = new Global(\r\n this,\r\n name,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators, DecoratorFlags.NONE)\r\n : DecoratorFlags.NONE\r\n );\r\n staticField.parent = classPrototype;\r\n classPrototype.members.set(name, staticField);\r\n this.elementsLookup.set(internalName, staticField);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n staticField.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance fields are remembered until resolved\r\n } else {\r\n if (isInterface) {\r\n // should have been reported while parsing\r\n assert(!declaration.isAny(CommonFlags.ABSTRACT | CommonFlags.GET | CommonFlags.SET));\r\n }\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instanceField = new FieldPrototype(\r\n classPrototype,\r\n name,\r\n internalName,\r\n declaration\r\n );\r\n if (decorators) this.checkDecorators(decorators, DecoratorFlags.NONE);\r\n classPrototype.instanceMembers.set(name, instanceField);\r\n }\r\n }\r\n\r\n /** Initializes a method of a class or interface. */\r\n private initializeMethod(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var prototype: FunctionPrototype | null = null;\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.checkDecorators(decorators,\r\n DecoratorFlags.OPERATOR_BINARY |\r\n DecoratorFlags.OPERATOR_PREFIX |\r\n DecoratorFlags.OPERATOR_POSTFIX |\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n // static methods become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n assert(declaration.name.kind != NodeKind.CONSTRUCTOR);\r\n\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0, declaration.name.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n classPrototype.members.set(simpleName, prototype);\r\n this.elementsLookup.set(internalName, prototype);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance methods are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n // if (classPrototype.isUnmanaged && instancePrototype.isAbstract) {\r\n // this.error( Unmanaged classes cannot declare abstract methods. );\r\n // }\r\n if (declaration.name.kind == NodeKind.CONSTRUCTOR) {\r\n if (classPrototype.constructorPrototype) {\r\n this.error(\r\n DiagnosticCode.Multiple_constructor_implementations_are_not_allowed,\r\n declaration.name.range\r\n );\r\n } else {\r\n prototype.set(CommonFlags.CONSTRUCTOR);\r\n classPrototype.constructorPrototype = prototype;\r\n }\r\n } else {\r\n classPrototype.instanceMembers.set(simpleName, prototype);\r\n }\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n this.checkOperatorOverloads(declaration.decorators, prototype, classPrototype);\r\n }\r\n\r\n private checkOperatorOverloads(\r\n decorators: DecoratorNode[] | null,\r\n prototype: FunctionPrototype,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n switch (decorator.decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY:\r\n case DecoratorKind.OPERATOR_PREFIX:\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n let numArgs = decorator.arguments && decorator.arguments.length || 0;\r\n if (numArgs == 1) {\r\n let firstArg = (decorator.arguments)[0];\r\n if (\r\n firstArg.kind == NodeKind.LITERAL &&\r\n (firstArg).literalKind == LiteralKind.STRING\r\n ) {\r\n let kind = operatorKindFromDecorator(\r\n decorator.decoratorKind,\r\n (firstArg).value\r\n );\r\n if (kind == OperatorKind.INVALID) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n firstArg.range\r\n );\r\n } else {\r\n let overloads = classPrototype.overloadPrototypes;\r\n if (overloads.has(kind)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_function_implementation,\r\n firstArg.range\r\n );\r\n } else {\r\n prototype.operatorKind = kind;\r\n overloads.set(kind, prototype);\r\n }\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n firstArg.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"1\", numArgs.toString(0)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeAccessor(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalPropertyName = declaration.fileLevelInternalName;\r\n var propertyElement = this.elementsLookup.get(internalPropertyName);\r\n var isGetter = declaration.is(CommonFlags.GET);\r\n var isNew = false;\r\n if (propertyElement) {\r\n if (\r\n propertyElement.kind != ElementKind.PROPERTY ||\r\n (isGetter\r\n ? (propertyElement).getterPrototype\r\n : (propertyElement).setterPrototype\r\n ) != null\r\n ) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n propertyElement = new Property(\r\n this,\r\n simpleName,\r\n internalPropertyName,\r\n classPrototype\r\n );\r\n isNew = true;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.checkDecorators(decorators,\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n var baseName = (isGetter ? GETTER_PREFIX : SETTER_PREFIX) + simpleName;\r\n\r\n // static accessors become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n let staticName = classPrototype.internalName + STATIC_DELIMITER + baseName;\r\n if (this.elementsLookup.has(staticName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n let staticPrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n staticName,\r\n declaration,\r\n null,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = staticPrototype;\r\n } else {\r\n (propertyElement).setterPrototype = staticPrototype;\r\n }\r\n if (isNew) {\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n classPrototype.members.set(simpleName, propertyElement); // check above\r\n } else {\r\n assert(classPrototype.members && classPrototype.members.has(simpleName));\r\n }\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance accessors are remembered until resolved\r\n } else {\r\n let instanceName = classPrototype.internalName + INSTANCE_DELIMITER + baseName;\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(baseName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instancePrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n instanceName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = instancePrototype;\r\n } else {\r\n (propertyElement).setterPrototype = instancePrototype;\r\n }\r\n classPrototype.instanceMembers.set(baseName, propertyElement);\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n instancePrototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n }\r\n\r\n private initializeEnum(\r\n declaration: EnumDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var element = new Enum(this, simpleName, internalName, declaration);\r\n element.parent = namespace;\r\n this.elementsLookup.set(internalName, element);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, element);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && element.is(CommonFlags.EXPORT)) {\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (element.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, element);\r\n this.currentFilespace.members.set(simpleName, element);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, element);\r\n }\r\n }\r\n\r\n var values = declaration.values;\r\n for (let i = 0, k = values.length; i < k; ++i) {\r\n this.initializeEnumValue(values[i], element);\r\n }\r\n\r\n this.checkGlobal(element, declaration);\r\n }\r\n\r\n private initializeEnumValue(\r\n declaration: EnumValueDeclaration,\r\n enm: Enum\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n if (enm.members) {\r\n if (enm.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n enm.members = new Map();\r\n }\r\n var value = new EnumValue(enm, this, name, internalName, declaration);\r\n enm.members.set(name, value);\r\n if (enm.is(CommonFlags.MODULE_EXPORT)) {\r\n value.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n private initializeExports(\r\n statement: ExportStatement,\r\n queuedExports: Map\r\n ): void {\r\n var members = statement.members;\r\n if (members) { // named\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n this.initializeExport(members[i], statement.internalPath, queuedExports);\r\n }\r\n } else { // TODO: filespace\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n }\r\n }\r\n\r\n private setExportAndCheckLibrary(\r\n internalName: string,\r\n element: Element,\r\n identifier: IdentifierExpression\r\n ): void {\r\n // add to file-level exports\r\n this.fileLevelExports.set(internalName, element);\r\n\r\n // add to filespace\r\n var internalPath = identifier.range.source.internalPath;\r\n var prefix = FILESPACE_PREFIX + internalPath;\r\n var filespace = this.elementsLookup.get(prefix);\r\n if (!filespace) filespace = assert(this.elementsLookup.get(prefix + PATH_DELIMITER + \"index\"));\r\n assert(filespace.kind == ElementKind.FILESPACE);\r\n var simpleName = identifier.text;\r\n (filespace).members.set(simpleName, element);\r\n\r\n // add global alias if from a library file\r\n if (identifier.range.source.isLibrary) {\r\n if (this.elementsLookup.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n identifier.range, simpleName\r\n );\r\n } else {\r\n element.internalName = simpleName;\r\n this.elementsLookup.set(simpleName, element);\r\n }\r\n }\r\n }\r\n\r\n private initializeExport(\r\n member: ExportMember,\r\n internalPath: string | null,\r\n queuedExports: Map\r\n ): void {\r\n var externalName = member.range.source.internalPath + PATH_DELIMITER + member.externalName.text;\r\n if (this.fileLevelExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n var referencedName: string;\r\n var referencedElement: Element | null;\r\n var queuedExport: QueuedExport | null;\r\n\r\n // export local element\r\n if (internalPath == null) {\r\n referencedName = member.range.source.internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the element exists\r\n if (referencedElement = this.elementsLookup.get(referencedName)) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = false;\r\n queuedExport.externalName = referencedName; // -> here: local name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n\r\n // export external element\r\n } else {\r\n referencedName = internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the export exists\r\n referencedElement = this.elementsLookup.get(referencedName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // walk already known queued exports\r\n let seen = new Set();\r\n while (queuedExport = queuedExports.get(referencedName)) {\r\n if (queuedExport.isReExport) {\r\n referencedElement = this.fileLevelExports.get(queuedExport.externalName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n referencedName = queuedExport.externalName;\r\n if (seen.has(queuedExport)) break;\r\n seen.add(queuedExport);\r\n } else {\r\n referencedElement = this.elementsLookup.get(queuedExport.externalName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = true;\r\n queuedExport.externalName = referencedName; // -> here: external name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n }\r\n }\r\n\r\n private initializeFunction(\r\n declaration: FunctionDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var decorators = declaration.decorators;\r\n var prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n null,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE |\r\n DecoratorFlags.EXTERNAL\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.parent = namespace;\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, prototype);\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n private initializeImports(\r\n statement: ImportStatement,\r\n queuedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var declarations = statement.declarations;\r\n if (declarations) {\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n this.initializeImport(\r\n declarations[i],\r\n statement.internalPath,\r\n queuedExports, queuedImports\r\n );\r\n }\r\n } else if (statement.namespaceName) { // import * as simpleName from \"file\"\r\n let simpleName = statement.namespaceName.text;\r\n let internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n simpleName\r\n );\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n statement.namespaceName.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n\r\n // resolve right away if the exact filespace exists\r\n let filespace = this.elementsLookup.get(statement.internalPath);\r\n if (filespace) {\r\n this.elementsLookup.set(internalName, filespace);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n let queuedImport = new QueuedImport();\r\n queuedImport.localName = internalName;\r\n let externalName = FILESPACE_PREFIX + statement.internalPath;\r\n queuedImport.externalName = externalName;\r\n queuedImport.externalNameAlt = externalName + PATH_DELIMITER + \"index\";\r\n queuedImport.declaration = null; // filespace\r\n queuedImports.push(queuedImport);\r\n }\r\n }\r\n\r\n private initializeImport(\r\n declaration: ImportDeclaration,\r\n internalPath: string,\r\n queuedNamedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var localName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(localName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, localName\r\n );\r\n return;\r\n }\r\n\r\n var externalName = internalPath + PATH_DELIMITER + declaration.externalName.text;\r\n\r\n // resolve right away if the exact export exists\r\n var element: Element | null;\r\n if (element = this.fileLevelExports.get(externalName)) {\r\n this.elementsLookup.set(localName, element);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n const indexPart = PATH_DELIMITER + \"index\";\r\n var queuedImport = new QueuedImport();\r\n queuedImport.localName = localName;\r\n if (internalPath.endsWith(indexPart)) {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath.substring(0, internalPath.length - indexPart.length + 1) +\r\n declaration.externalName.text\r\n );\r\n } else {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath +\r\n indexPart +\r\n PATH_DELIMITER +\r\n declaration.externalName.text\r\n );\r\n }\r\n queuedImport.declaration = declaration; // named\r\n queuedImports.push(queuedImport);\r\n }\r\n\r\n private initializeInterface(declaration: InterfaceDeclaration, namespace: Element | null = null): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new InterfacePrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators, DecoratorFlags.GLOBAL)\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(prototype.internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(prototype.internalName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, prototype);\r\n }\r\n }\r\n\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"interface member expected\");\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n private initializeNamespace(\r\n declaration: NamespaceDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n parentNamespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n var simpleName = declaration.name.text;\r\n var namespace = this.elementsLookup.get(internalName);\r\n if (!namespace) {\r\n namespace = new Namespace(this, simpleName, internalName, declaration);\r\n namespace.parent = parentNamespace;\r\n this.elementsLookup.set(internalName, namespace);\r\n this.checkGlobal(namespace, declaration);\r\n }\r\n\r\n if (parentNamespace) {\r\n if (parentNamespace.members) {\r\n if (parentNamespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n parentNamespace.members = new Map();\r\n }\r\n parentNamespace.members.set(simpleName, namespace);\r\n if (parentNamespace.is(CommonFlags.MODULE_EXPORT) && namespace.is(CommonFlags.EXPORT)) {\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (namespace.is(CommonFlags.EXPORT)) { // no parent namespace\r\n let existingExport = this.fileLevelExports.get(internalName);\r\n if (existingExport) {\r\n if (!existingExport.is(CommonFlags.EXPORT)) {\r\n this.error(\r\n DiagnosticCode.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local,\r\n declaration.name.range, namespace.internalName\r\n ); // recoverable\r\n }\r\n namespace = existingExport; // join\r\n } else {\r\n this.fileLevelExports.set(internalName, namespace);\r\n }\r\n this.currentFilespace.members.set(simpleName, namespace);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n if (this.moduleLevelExports.get(simpleName) !== namespace) { // not merged\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n this.moduleLevelExports.set(simpleName, namespace);\r\n }\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n var members = declaration.members;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n switch (members[i].kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(members[i], queuedExtends, queuedImplements, namespace);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(members[i], queuedExtends, queuedImplements, namespace);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // this.initializeTypeAlias(members[i], namespace);\r\n // TODO: what about namespaced types?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n members[i].range\r\n );\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(members[i], namespace);\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"namespace member expected\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeTypeAlias(declaration: TypeDeclaration, namespace: Element | null = null): void {\r\n // type aliases are program globals\r\n // TODO: what about namespaced types?\r\n var name = declaration.name.text;\r\n if (this.typesLookup.has(name) || this.typeAliases.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return;\r\n }\r\n var alias = new TypeAlias();\r\n alias.typeParameters = declaration.typeParameters;\r\n alias.type = declaration.type;\r\n this.typeAliases.set(name, alias);\r\n }\r\n\r\n private initializeVariables(statement: VariableStatement, namespace: Element | null = null): void {\r\n var declarations = statement.declarations;\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n let declaration = declarations[i];\r\n let decorators = declaration.decorators;\r\n let internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n let simpleName = declaration.name.text;\r\n let global = new Global(\r\n this,\r\n simpleName,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.EXTERNAL\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n global.parent = namespace;\r\n this.elementsLookup.set(internalName, global);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, global);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && global.is(CommonFlags.EXPORT)) {\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (global.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n } else {\r\n this.fileLevelExports.set(internalName, global);\r\n }\r\n this.currentFilespace.members.set(simpleName, global);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n continue;\r\n }\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, global);\r\n }\r\n }\r\n this.checkGlobal(global, declaration);\r\n }\r\n }\r\n}\r\n\r\n/** Indicates the specific kind of an {@link Element}. */\r\nexport enum ElementKind {\r\n /** A {@link Global}. */\r\n GLOBAL,\r\n /** A {@link Local}. */\r\n LOCAL,\r\n /** An {@link Enum}. */\r\n ENUM,\r\n /** An {@link EnumValue}. */\r\n ENUMVALUE,\r\n /** A {@link FunctionPrototype}. */\r\n FUNCTION_PROTOTYPE,\r\n /** A {@link Function}. */\r\n FUNCTION,\r\n /** A {@link FunctionTarget}. */\r\n FUNCTION_TARGET,\r\n /** A {@link ClassPrototype}. */\r\n CLASS_PROTOTYPE,\r\n /** A {@link Class}. */\r\n CLASS,\r\n /** An {@link InterfacePrototype}. */\r\n INTERFACE_PROTOTYPE,\r\n /** An {@link Interface}. */\r\n INTERFACE,\r\n /** A {@link FieldPrototype}. */\r\n FIELD_PROTOTYPE,\r\n /** A {@link Field}. */\r\n FIELD,\r\n /** A {@link Property}. */\r\n PROPERTY,\r\n /** A {@link Namespace}. */\r\n NAMESPACE,\r\n /** A {@link Filespace}. */\r\n FILESPACE,\r\n}\r\n\r\nexport enum DecoratorFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n /** Is a program global. */\r\n GLOBAL = 1 << 0,\r\n /** Is a binary operator overload. */\r\n OPERATOR_BINARY = 1 << 1,\r\n /** Is a unary prefix operator overload. */\r\n OPERATOR_PREFIX = 1 << 2,\r\n /** Is a unary postfix operator overload. */\r\n OPERATOR_POSTFIX = 1 << 3,\r\n /** Is an unmanaged class. */\r\n UNMANAGED = 1 << 4,\r\n /** Is a sealed class. */\r\n SEALED = 1 << 5,\r\n /** Is always inlined. */\r\n INLINE = 1 << 6,\r\n /** Is using a different external name. */\r\n EXTERNAL = 1 << 7\r\n}\r\n\r\nexport function decoratorKindToFlag(kind: DecoratorKind): DecoratorFlags {\r\n switch (kind) {\r\n case DecoratorKind.GLOBAL: return DecoratorFlags.GLOBAL;\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY: return DecoratorFlags.OPERATOR_BINARY;\r\n case DecoratorKind.OPERATOR_PREFIX: return DecoratorFlags.OPERATOR_PREFIX;\r\n case DecoratorKind.OPERATOR_POSTFIX: return DecoratorFlags.OPERATOR_POSTFIX;\r\n case DecoratorKind.UNMANAGED: return DecoratorFlags.UNMANAGED;\r\n case DecoratorKind.SEALED: return DecoratorFlags.SEALED;\r\n case DecoratorKind.INLINE: return DecoratorFlags.INLINE;\r\n case DecoratorKind.EXTERNAL: return DecoratorFlags.EXTERNAL;\r\n default: return DecoratorFlags.NONE;\r\n }\r\n}\r\n\r\n/** Base class of all program elements. */\r\nexport abstract class Element {\r\n\r\n /** Specific element kind. */\r\n kind: ElementKind;\r\n /** Containing {@link Program}. */\r\n program: Program;\r\n /** Simple name. */\r\n simpleName: string;\r\n /** Internal name referring to this element. */\r\n internalName: string;\r\n /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n /** Decorator flags indicating annotated traits. */\r\n decoratorFlags: DecoratorFlags = DecoratorFlags.NONE;\r\n /** Namespaced member elements. */\r\n members: Map | null = null;\r\n /** Parent element, if applicable. */\r\n parent: Element | null = null;\r\n\r\n /** Constructs a new element, linking it to its containing {@link Program}. */\r\n protected constructor(program: Program, simpleName: string, internalName: string) {\r\n this.program = program;\r\n this.simpleName = simpleName;\r\n this.internalName = internalName;\r\n }\r\n\r\n /** Tests if this element has a specific flag or flags. */\r\n is(flag: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this element has any of the specified flags. */\r\n isAny(flags: CommonFlags): bool { return (this.flags & flags) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n /** Tests if this element has a specific decorator flag or flags. */\r\n hasDecorator(flag: DecoratorFlags): bool { return (this.decoratorFlags & flag) == flag; }\r\n}\r\n\r\n/** A filespace representing the implicit top-level namespace of a source. */\r\nexport class Filespace extends Element {\r\n\r\n kind = ElementKind.FILESPACE;\r\n\r\n /** File members (externally visible only). */\r\n members: Map; // more specific\r\n\r\n /** Constructs a new filespace. */\r\n constructor(\r\n program: Program,\r\n source: Source\r\n ) {\r\n super(program, source.internalPath, FILESPACE_PREFIX + source.internalPath);\r\n this.members = new Map();\r\n }\r\n}\r\n\r\n/** A namespace that differs from a filespace in being user-declared with a name. */\r\nexport class Namespace extends Element {\r\n\r\n // All elements have namespace semantics. This is an explicitly declared one.\r\n kind = ElementKind.NAMESPACE;\r\n\r\n /** Declaration reference. */\r\n declaration: NamespaceDeclaration; // more specific\r\n\r\n /** Constructs a new namespace. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: NamespaceDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** An enum. */\r\nexport class Enum extends Element {\r\n\r\n kind = ElementKind.ENUM;\r\n\r\n /** Declaration reference. */\r\n declaration: EnumDeclaration;\r\n\r\n /** Constructs a new enum. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: EnumDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** An enum value. */\r\nexport class EnumValue extends Element {\r\n\r\n kind = ElementKind.ENUMVALUE;\r\n\r\n /** Declaration reference. */\r\n declaration: EnumValueDeclaration;\r\n /** Constant value, if applicable. */\r\n constantValue: i32 = 0;\r\n\r\n constructor(\r\n enm: Enum,\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: EnumValueDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = enm;\r\n this.declaration = declaration;\r\n }\r\n}\r\n\r\nexport const enum ConstantValueKind {\r\n NONE,\r\n INTEGER,\r\n FLOAT\r\n}\r\n\r\nexport class VariableLikeElement extends Element {\r\n\r\n // kind varies\r\n\r\n /** Declaration reference. */\r\n declaration: VariableLikeDeclarationStatement | null;\r\n /** Variable type. Is {@link Type.void} for type-inferred {@link Global}s before compilation. */\r\n type: Type;\r\n /** Constant value kind. */\r\n constantValueKind: ConstantValueKind = ConstantValueKind.NONE;\r\n /** Constant integer value, if applicable. */\r\n constantIntegerValue: I64;\r\n /** Constant float value, if applicable. */\r\n constantFloatValue: f64;\r\n\r\n protected constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.type = type;\r\n this.declaration = declaration;\r\n }\r\n\r\n withConstantIntegerValue(value: I64): this {\r\n this.constantValueKind = ConstantValueKind.INTEGER;\r\n this.constantIntegerValue = value;\r\n this.set(CommonFlags.CONST | CommonFlags.INLINED);\r\n return this;\r\n }\r\n\r\n withConstantFloatValue(value: f64): this {\r\n this.constantValueKind = ConstantValueKind.FLOAT;\r\n this.constantFloatValue = value;\r\n this.set(CommonFlags.CONST | CommonFlags.INLINED);\r\n return this;\r\n }\r\n}\r\n\r\n/** A global variable. */\r\nexport class Global extends VariableLikeElement {\r\n\r\n kind = ElementKind.GLOBAL;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, type, declaration);\r\n this.flags = declaration ? declaration.flags : CommonFlags.NONE;\r\n this.decoratorFlags = decoratorFlags;\r\n this.type = type; // resolved later if `void`\r\n }\r\n}\r\n\r\n/** A function parameter. */\r\nexport class Parameter {\r\n\r\n // not an Element on its own\r\n\r\n /** Parameter name. */\r\n name: string;\r\n /** Parameter type. */\r\n type: Type;\r\n /** Parameter initializer. */\r\n initializer: Expression | null;\r\n\r\n /** Constructs a new function parameter. */\r\n constructor(name: string, type: Type, initializer: Expression | null = null) {\r\n this.name = name;\r\n this.type = type;\r\n this.initializer = initializer;\r\n }\r\n}\r\n\r\n/** A function local. */\r\nexport class Local extends VariableLikeElement {\r\n\r\n kind = ElementKind.LOCAL;\r\n\r\n /** Local index. */\r\n index: i32;\r\n /** Respective scoped global, if any. */\r\n scopedGlobal: Global | null = null;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n index: i32,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null = null\r\n ) {\r\n super(program, simpleName, simpleName, type, declaration);\r\n this.index = index;\r\n }\r\n}\r\n\r\n/** A yet unresolved function prototype. */\r\nexport class FunctionPrototype extends Element {\r\n\r\n kind = ElementKind.FUNCTION_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FunctionDeclaration;\r\n /** If an instance method, the class prototype reference. */\r\n classPrototype: ClassPrototype | null;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Class type arguments, if a partially resolved method of a generic class. Not set otherwise. */\r\n classTypeArguments: Type[] | null = null;\r\n /** Operator kind, if an overload. */\r\n operatorKind: OperatorKind = OperatorKind.INVALID;\r\n\r\n /** Constructs a new function prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FunctionDeclaration,\r\n classPrototype: ClassPrototype | null = null,\r\n decoratorFlags: DecoratorFlags = DecoratorFlags.NONE\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.classPrototype = classPrototype;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n toString(): string { return this.simpleName; }\r\n}\r\n\r\n/** A resolved function. */\r\nexport class Function extends Element {\r\n\r\n kind = ElementKind.FUNCTION;\r\n\r\n /** Prototype reference. */\r\n prototype: FunctionPrototype;\r\n /** Function signature. */\r\n signature: Signature;\r\n /** Map of locals by name. */\r\n localsByName: Map = new Map();\r\n /** Array of locals by index. */\r\n localsByIndex: Local[] = [];\r\n /** List of additional non-parameter locals. */\r\n additionalLocals: Type[] = [];\r\n /** Current break context label. */\r\n breakContext: string | null = null;\r\n /** Contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Current control flow. */\r\n flow: Flow;\r\n /** Remembered debug locations. */\r\n debugLocations: Range[] = [];\r\n /** Function reference, if compiled. */\r\n ref: FunctionRef = 0;\r\n /** Function table index, if any. */\r\n functionTableIndex: i32 = -1;\r\n /** Trampoline function for calling with omitted arguments. */\r\n trampoline: Function | null = null;\r\n /** The outer scope, if a function expression. */\r\n outerScope: Flow | null = null;\r\n\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\r\n nextInlineId: i32 = 0;\r\n\r\n /** Constructs a new concrete function. */\r\n constructor(\r\n prototype: FunctionPrototype,\r\n internalName: string,\r\n signature: Signature,\r\n parent: Element | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.signature = signature;\r\n this.parent = parent;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.contextualTypeArguments = contextualTypeArguments;\r\n if (!(prototype.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN) || prototype.is(CommonFlags.DECLARE))) {\r\n let localIndex = 0;\r\n if (parent && parent.kind == ElementKind.CLASS) {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let local = new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n );\r\n this.localsByName.set(\"this\", local);\r\n this.localsByIndex[local.index] = local;\r\n let inheritedTypeArguments = (parent).contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments.has(inheritedName)) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n }\r\n } else {\r\n assert(!this.is(CommonFlags.INSTANCE)); // internal error\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n let parameterType = parameterTypes[i];\r\n let parameterName = signature.getParameterName(i);\r\n let local = new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n // FIXME: declaration?\r\n );\r\n this.localsByName.set(parameterName, local);\r\n this.localsByIndex[local.index] = local;\r\n }\r\n }\r\n this.flow = Flow.create(this);\r\n }\r\n\r\n /** Adds a local of the specified type, with an optional name. */\r\n addLocal(type: Type, name: string | null = null, declaration: VariableDeclaration | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = this.signature.parameterTypes.length + this.additionalLocals.length;\r\n if (this.is(CommonFlags.INSTANCE)) ++localIndex;\r\n var local = new Local(\r\n this.prototype.program,\r\n name\r\n ? name\r\n : \"var$\" + localIndex.toString(10),\r\n localIndex,\r\n type,\r\n declaration\r\n );\r\n if (name) {\r\n if (this.localsByName.has(name)) throw new Error(\"duplicate local name\");\r\n this.localsByName.set(name, local);\r\n }\r\n this.localsByIndex[local.index] = local;\r\n this.additionalLocals.push(type);\r\n return local;\r\n }\r\n\r\n private tempI32s: Local[] | null = null;\r\n private tempI64s: Local[] | null = null;\r\n private tempF32s: Local[] | null = null;\r\n private tempF64s: Local[] | null = null;\r\n\r\n /** Gets a free temporary local of the specified type. */\r\n getTempLocal(type: Type, wrapped: bool = false): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s;\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps && temps.length) {\r\n local = temps.pop();\r\n local.type = type;\r\n local.flags = CommonFlags.NONE;\r\n } else {\r\n local = this.addLocal(type);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n if (local.is(CommonFlags.INLINED)) return;\r\n assert(local.index >= 0);\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n assert(local.index >= 0);\r\n temps.push(local);\r\n }\r\n\r\n /** Gets and immediately frees a temporary local of the specified type. */\r\n getAndFreeTempLocal(type: Type, wrapped: bool): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps.length) {\r\n local = temps[temps.length - 1];\r\n local.type = type;\r\n } else {\r\n local = this.addLocal(type);\r\n temps.push(local);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Enters a(nother) break context. */\r\n enterBreakContext(): string {\r\n var id = this.nextBreakId++;\r\n if (!this.breakStack) this.breakStack = [ id ];\r\n else this.breakStack.push(id);\r\n return this.breakContext = id.toString(10);\r\n }\r\n\r\n /** Leaves the current break context. */\r\n leaveBreakContext(): void {\r\n assert(this.breakStack != null);\r\n var length = (this.breakStack).length;\r\n assert(length > 0);\r\n (this.breakStack).pop();\r\n if (length > 1) {\r\n this.breakContext = (this.breakStack)[length - 2].toString(10);\r\n } else {\r\n this.breakContext = null;\r\n this.breakStack = null;\r\n }\r\n }\r\n\r\n /** Finalizes the function once compiled, releasing no longer needed resources. */\r\n finalize(module: Module, ref: FunctionRef): void {\r\n this.ref = ref;\r\n assert(!this.breakStack || !this.breakStack.length); // internal error\r\n this.breakStack = null;\r\n this.breakContext = null;\r\n this.tempI32s = this.tempI64s = this.tempF32s = this.tempF64s = null;\r\n if (this.program.options.sourceMap) {\r\n let debugLocations = this.debugLocations;\r\n for (let i = 0, k = debugLocations.length; i < k; ++i) {\r\n let debugLocation = debugLocations[i];\r\n module.setDebugLocation(\r\n ref,\r\n debugLocation.debugInfoRef,\r\n debugLocation.source.debugInfoIndex,\r\n debugLocation.line,\r\n debugLocation.column\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n}\r\n\r\n/** A resolved function target, that is a function called indirectly by an index and signature. */\r\nexport class FunctionTarget extends Element {\r\n\r\n kind = ElementKind.FUNCTION_TARGET;\r\n\r\n /** Underlying signature. */\r\n signature: Signature;\r\n /** Function type. */\r\n type: Type;\r\n\r\n /** Constructs a new function target. */\r\n constructor(program: Program, signature: Signature) {\r\n super(program, \"\", \"\");\r\n var simpleName = signature.toSignatureString();\r\n this.simpleName = simpleName;\r\n this.internalName = simpleName;\r\n this.signature = signature;\r\n this.type = Type.u32.asFunction(signature);\r\n }\r\n}\r\n\r\n/** A yet unresolved instance field prototype. */\r\nexport class FieldPrototype extends Element {\r\n\r\n kind = ElementKind.FIELD_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FieldDeclaration;\r\n /** Parent class prototype. */\r\n classPrototype: ClassPrototype;\r\n\r\n /** Constructs a new field prototype. */\r\n constructor(\r\n classPrototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FieldDeclaration\r\n ) {\r\n super(classPrototype.program, simpleName, internalName);\r\n this.classPrototype = classPrototype;\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** A resolved instance field. */\r\nexport class Field extends VariableLikeElement {\r\n\r\n kind = ElementKind.FIELD;\r\n\r\n /** Field prototype reference. */\r\n prototype: FieldPrototype;\r\n /** Field memory offset, if an instance field. */\r\n memoryOffset: i32 = -1;\r\n\r\n /** Constructs a new field. */\r\n constructor(\r\n prototype: FieldPrototype,\r\n internalName: string,\r\n type: Type,\r\n declaration: FieldDeclaration,\r\n parent: Class\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName, type, declaration);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.type = type;\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A property comprised of a getter and a setter function. */\r\nexport class Property extends Element {\r\n\r\n kind = ElementKind.PROPERTY;\r\n\r\n /** Parent class prototype. */\r\n parent: ClassPrototype;\r\n /** Getter prototype. */\r\n getterPrototype: FunctionPrototype | null = null;\r\n /** Setter prototype. */\r\n setterPrototype: FunctionPrototype | null = null;\r\n\r\n /** Constructs a new property prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n parent: ClassPrototype\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A yet unresolved class prototype. */\r\nexport class ClassPrototype extends Element {\r\n\r\n kind = ElementKind.CLASS_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: ClassDeclaration;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Instance member prototypes. */\r\n instanceMembers: Map | null = null;\r\n /** Base class prototype, if applicable. */\r\n basePrototype: ClassPrototype | null = null; // set in Program#initialize\r\n /** Constructor prototype. */\r\n constructorPrototype: FunctionPrototype | null = null;\r\n /** Operator overload prototypes. */\r\n overloadPrototypes: Map = new Map();\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A resolved class. */\r\nexport class Class extends Element {\r\n\r\n kind = ElementKind.CLASS;\r\n\r\n /** Prototype reference. */\r\n prototype: ClassPrototype;\r\n /** Resolved type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Resolved class type. */\r\n type: Type;\r\n /** Base class, if applicable. */\r\n base: Class | null;\r\n /** Contextual type arguments for fields and methods. */\r\n contextualTypeArguments: Map | null = null;\r\n /** Current member memory offset. */\r\n currentMemoryOffset: u32 = 0;\r\n /** Constructor instance. */\r\n constructorInstance: Function | null = null;\r\n /** Operator overloads. */\r\n overloads: Map | null = null;\r\n\r\n /** Constructs a new class. */\r\n constructor(\r\n prototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] | null = null,\r\n base: Class | null = null\r\n ) {\r\n super(prototype.program, simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.typeArguments = typeArguments;\r\n this.type = prototype.program.options.usizeType.asClass(this);\r\n this.base = base;\r\n\r\n // inherit static members and contextual type arguments from base class\r\n if (base) {\r\n let inheritedTypeArguments = base.contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [baseName, baseType] of inheritedTypeArguments) {\r\n this.contextualTypeArguments.set(baseName, baseType);\r\n }\r\n }\r\n }\r\n\r\n // apply instance-specific contextual type arguments\r\n var declaration = this.prototype.declaration;\r\n var i: i32, k: i32;\r\n if (declaration) { // irrelevant for built-ins\r\n let typeParameters = declaration.typeParameters;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n if (k) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (i = 0; i < k; ++i) {\r\n this.contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n }\r\n } else if (typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n }\r\n }\r\n\r\n /** Tests if a value of this class type is assignable to a target of the specified class type. */\r\n isAssignableTo(target: Class): bool {\r\n var current: Class | null = this;\r\n do if (current == target) return true;\r\n while (current = current.base);\r\n return false;\r\n }\r\n\r\n /** Looks up the operator overload of the specified kind. */\r\n lookupOverload(kind: OperatorKind, unchecked: bool = false): Function | null {\r\n if (unchecked) {\r\n switch (kind) {\r\n case OperatorKind.INDEXED_GET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_GET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n case OperatorKind.INDEXED_SET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_SET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n var instance: Class | null = this;\r\n do {\r\n let overloads = instance.overloads;\r\n if (overloads) {\r\n let overload = overloads.get(kind);\r\n if (overload) return overload;\r\n }\r\n } while (instance = instance.base);\r\n return null;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A yet unresolved interface. */\r\nexport class InterfacePrototype extends ClassPrototype {\r\n\r\n kind = ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: InterfaceDeclaration; // more specific\r\n\r\n /** Constructs a new interface prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: InterfaceDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, declaration, decoratorFlags);\r\n }\r\n}\r\n\r\n/** A resolved interface. */\r\nexport class Interface extends Class {\r\n\r\n kind = ElementKind.INTERFACE;\r\n\r\n /** Prototype reference. */\r\n prototype: InterfacePrototype; // more specific\r\n /** Base interface, if applcable. */\r\n base: Interface | null; // more specific\r\n\r\n /** Constructs a new interface. */\r\n constructor(\r\n prototype: InterfacePrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, simpleName, internalName, typeArguments, base);\r\n }\r\n}\r\n\r\n/** Control flow flags indicating specific conditions. */\r\nexport const enum FlowFlags {\r\n /** No specific conditions. */\r\n NONE = 0,\r\n\r\n // categorical\r\n\r\n /** This branch always returns. */\r\n RETURNS = 1 << 0,\r\n /** This branch always returns a wrapped value. */\r\n RETURNS_WRAPPED = 1 << 1,\r\n /** This branch always throws. */\r\n THROWS = 1 << 2,\r\n /** This branch always breaks. */\r\n BREAKS = 1 << 3,\r\n /** This branch always continues. */\r\n CONTINUES = 1 << 4,\r\n /** This branch always allocates. Constructors only. */\r\n ALLOCATES = 1 << 5,\r\n\r\n // conditional\r\n\r\n /** This branch conditionally returns in a child branch. */\r\n CONDITIONALLY_RETURNS = 1 << 6,\r\n /** This branch conditionally throws in a child branch. */\r\n CONDITIONALLY_THROWS = 1 << 7,\r\n /** This branch conditionally breaks in a child branch. */\r\n CONDITIONALLY_BREAKS = 1 << 8,\r\n /** This branch conditionally continues in a child branch. */\r\n CONDITIONALLY_CONTINUES = 1 << 9,\r\n /** This branch conditionally allocates in a child branch. Constructors only. */\r\n CONDITIONALLY_ALLOCATES = 1 << 10,\r\n\r\n // special\r\n\r\n /** This branch is part of inlining a function. */\r\n INLINE_CONTEXT = 1 << 11,\r\n /** This branch explicitly requests no bounds checking. */\r\n UNCHECKED_CONTEXT = 1 << 12,\r\n\r\n // masks\r\n\r\n /** Any terminating flag. */\r\n ANY_TERMINATING = FlowFlags.RETURNS\r\n | FlowFlags.THROWS\r\n | FlowFlags.BREAKS\r\n | FlowFlags.CONTINUES,\r\n\r\n /** Any categorical flag. */\r\n ANY_CATEGORICAL = FlowFlags.RETURNS\r\n | FlowFlags.RETURNS_WRAPPED\r\n | FlowFlags.THROWS\r\n | FlowFlags.BREAKS\r\n | FlowFlags.CONTINUES\r\n | FlowFlags.ALLOCATES,\r\n\r\n /** Any conditional flag. */\r\n ANY_CONDITIONAL = FlowFlags.CONDITIONALLY_RETURNS\r\n | FlowFlags.CONDITIONALLY_THROWS\r\n | FlowFlags.CONDITIONALLY_BREAKS\r\n | FlowFlags.CONDITIONALLY_CONTINUES\r\n | FlowFlags.CONDITIONALLY_ALLOCATES\r\n}\r\n\r\n/** A control flow evaluator. */\r\nexport class Flow {\r\n\r\n /** Parent flow. */\r\n parent: Flow | null;\r\n /** Flow flags indicating specific conditions. */\r\n flags: FlowFlags;\r\n /** Function this flow belongs to. */\r\n currentFunction: Function;\r\n /** The label we break to when encountering a continue statement. */\r\n continueLabel: string | null;\r\n /** The label we break to when encountering a break statement. */\r\n breakLabel: string | null;\r\n /** The label we break to when encountering a return statement, when inlining. */\r\n returnLabel: string | null;\r\n /** The current return type. */\r\n returnType: Type;\r\n /** The current contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Scoped local variables. */\r\n scopedLocals: Map | null = null;\r\n /** Local variable wrap states for the first 64 locals. */\r\n wrappedLocals: I64;\r\n /** Local variable wrap states for locals with index >= 64. */\r\n wrappedLocalsExt: I64[] | null;\r\n\r\n /** Creates the parent flow of the specified function. */\r\n static create(currentFunction: Function): Flow {\r\n var parentFlow = new Flow();\r\n parentFlow.parent = null;\r\n parentFlow.flags = FlowFlags.NONE;\r\n parentFlow.currentFunction = currentFunction;\r\n parentFlow.continueLabel = null;\r\n parentFlow.breakLabel = null;\r\n parentFlow.returnLabel = null;\r\n parentFlow.returnType = currentFunction.signature.returnType;\r\n parentFlow.contextualTypeArguments = currentFunction.contextualTypeArguments;\r\n parentFlow.wrappedLocals = i64_new(0);\r\n parentFlow.wrappedLocalsExt = null;\r\n return parentFlow;\r\n }\r\n\r\n private constructor() { }\r\n\r\n /** Tests if this flow has the specified flag or flags. */\r\n is(flag: FlowFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this flow has one of the specified flags. */\r\n isAny(flag: FlowFlags): bool { return (this.flags & flag) != 0; }\r\n /** Sets the specified flag or flags. */\r\n set(flag: FlowFlags): void { this.flags |= flag; }\r\n /** Unsets the specified flag or flags. */\r\n unset(flag: FlowFlags): void { this.flags &= ~flag; }\r\n\r\n /** Forks this flow to a child flow. */\r\n fork(): Flow {\r\n var branch = new Flow();\r\n branch.parent = this;\r\n branch.flags = this.flags;\r\n branch.currentFunction = this.currentFunction;\r\n branch.continueLabel = this.continueLabel;\r\n branch.breakLabel = this.breakLabel;\r\n branch.returnLabel = this.returnLabel;\r\n branch.returnType = this.returnType;\r\n branch.contextualTypeArguments = this.contextualTypeArguments;\r\n branch.wrappedLocals = this.wrappedLocals;\r\n branch.wrappedLocalsExt = this.wrappedLocalsExt ? this.wrappedLocalsExt.slice() : null;\r\n return branch;\r\n }\r\n\r\n /** Frees this flow's scoped variables. */\r\n free(): Flow {\r\n var parent = assert(this.parent);\r\n if (this.scopedLocals) { // free block-scoped locals\r\n for (let scopedLocal of this.scopedLocals.values()) {\r\n if (scopedLocal.is(CommonFlags.SCOPED)) { // otherwise an alias\r\n this.currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n }\r\n this.scopedLocals = null;\r\n }\r\n return parent;\r\n }\r\n\r\n /** Adds a new scoped local of the specified name. */\r\n addScopedLocal(type: Type, name: string, wrapped: bool, declaration?: VariableDeclaration): Local {\r\n var scopedLocal = this.currentFunction.getTempLocal(type, false);\r\n if (!this.scopedLocals) this.scopedLocals = new Map();\r\n else {\r\n let existingLocal = this.scopedLocals.get(name);\r\n if (existingLocal) {\r\n if (declaration) {\r\n this.currentFunction.program.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range\r\n );\r\n } else assert(false);\r\n return existingLocal;\r\n }\r\n }\r\n scopedLocal.set(CommonFlags.SCOPED);\r\n this.scopedLocals.set(name, scopedLocal);\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.setLocalWrapped(scopedLocal.index, wrapped);\r\n }\r\n return scopedLocal;\r\n }\r\n\r\n /** Adds a new scoped alias for the specified local. */\r\n addScopedLocalAlias(index: i32, type: Type, name: string): Local {\r\n if (!this.scopedLocals) this.scopedLocals = new Map();\r\n else {\r\n let existingLocal = this.scopedLocals.get(name);\r\n if (existingLocal) {\r\n let declaration = existingLocal.declaration;\r\n if (declaration) {\r\n this.currentFunction.program.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range\r\n );\r\n } else assert(false);\r\n return existingLocal;\r\n }\r\n }\r\n assert(index < this.currentFunction.localsByIndex.length);\r\n var scopedAlias = new Local( // not SCOPED as an indicator that it isn't automatically free'd\r\n this.currentFunction.program,\r\n name,\r\n index,\r\n type,\r\n null\r\n );\r\n this.scopedLocals.set(name, scopedAlias);\r\n return scopedAlias;\r\n }\r\n\r\n /** Gets the local of the specified name in the current scope. */\r\n getScopedLocal(name: string): Local | null {\r\n var local: Local | null;\r\n var current: Flow | null = this;\r\n do {\r\n if (current.scopedLocals && (local = current.scopedLocals.get(name))) {\r\n return local;\r\n }\r\n } while (current = current.parent);\r\n return this.currentFunction.localsByName.get(name);\r\n }\r\n\r\n /** Tests if the local with the specified index is considered wrapped. */\r\n isLocalWrapped(index: i32): bool {\r\n var map: I64;\r\n var ext: I64[] | null;\r\n if (index < 64) {\r\n if (index < 0) return true; // inlined constant\r\n map = this.wrappedLocals;\r\n } else if (ext = this.wrappedLocalsExt) {\r\n let i = ((index - 64) / 64) | 0;\r\n if (i >= ext.length) return false;\r\n map = ext[i];\r\n index -= (i + 1) * 64;\r\n } else {\r\n return false;\r\n }\r\n return i64_ne(\r\n i64_and(\r\n map,\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n ),\r\n i64_zero\r\n );\r\n }\r\n\r\n /** Sets if the local with the specified index is considered wrapped. */\r\n setLocalWrapped(index: i32, wrapped: bool): void {\r\n var map: I64;\r\n var off: i32 = -1;\r\n if (index < 64) {\r\n if (index < 0) return; // inlined constant\r\n map = this.wrappedLocals;\r\n } else {\r\n let ext = this.wrappedLocalsExt;\r\n off = ((index - 64) / 64) | 0;\r\n if (!ext) {\r\n this.wrappedLocalsExt = ext = new Array(off + 1);\r\n ext.length = 0;\r\n }\r\n while (ext.length <= off) ext.push(i64_new(0));\r\n map = ext[off];\r\n index -= (off + 1) * 64;\r\n }\r\n map = wrapped\r\n ? i64_or(\r\n map,\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n )\r\n : i64_and(\r\n map,\r\n i64_not(\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n )\r\n );\r\n if (off >= 0) (this.wrappedLocalsExt)[off] = map;\r\n else this.wrappedLocals = map;\r\n }\r\n\r\n /** Inherits flags and local wrap states from the specified flow (e.g. blocks). */\r\n inherit(other: Flow): void {\r\n this.flags |= other.flags & (FlowFlags.ANY_CATEGORICAL | FlowFlags.ANY_CONDITIONAL);\r\n this.wrappedLocals = other.wrappedLocals;\r\n this.wrappedLocalsExt = other.wrappedLocalsExt; // no need to slice because other flow is finished\r\n }\r\n\r\n /** Inherits categorical flags as conditional flags from the specified flow (e.g. then without else). */\r\n inheritConditional(other: Flow): void {\r\n if (other.is(FlowFlags.RETURNS)) {\r\n this.set(FlowFlags.CONDITIONALLY_RETURNS);\r\n }\r\n if (other.is(FlowFlags.THROWS)) {\r\n this.set(FlowFlags.CONDITIONALLY_THROWS);\r\n }\r\n if (other.is(FlowFlags.BREAKS) && other.breakLabel == this.breakLabel) {\r\n this.set(FlowFlags.CONDITIONALLY_BREAKS);\r\n }\r\n if (other.is(FlowFlags.CONTINUES) && other.continueLabel == this.continueLabel) {\r\n this.set(FlowFlags.CONDITIONALLY_CONTINUES);\r\n }\r\n if (other.is(FlowFlags.ALLOCATES)) {\r\n this.set(FlowFlags.CONDITIONALLY_ALLOCATES);\r\n }\r\n }\r\n\r\n /** Inherits mutual flags and local wrap states from the specified flows (e.g. then with else). */\r\n inheritMutual(left: Flow, right: Flow): void {\r\n // categorical flags set in both arms\r\n this.flags |= left.flags & right.flags & FlowFlags.ANY_CATEGORICAL;\r\n\r\n // conditional flags set in at least one arm\r\n this.flags |= left.flags & FlowFlags.ANY_CONDITIONAL;\r\n this.flags |= right.flags & FlowFlags.ANY_CONDITIONAL;\r\n\r\n // locals wrapped in both arms\r\n this.wrappedLocals = i64_and(left.wrappedLocals, right.wrappedLocals);\r\n var leftExt = left.wrappedLocalsExt;\r\n var rightExt = right.wrappedLocalsExt;\r\n if (leftExt != null && rightExt != null) {\r\n let thisExt = this.wrappedLocalsExt;\r\n let minLength = min(leftExt.length, rightExt.length);\r\n if (minLength) {\r\n if (!thisExt) thisExt = new Array(minLength);\r\n else while (thisExt.length < minLength) thisExt.push(i64_new(0));\r\n for (let i = 0; i < minLength; ++i) {\r\n thisExt[i] = i64_and(\r\n leftExt[i],\r\n rightExt[i]\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Tests if an expression can possibly overflow in the context of this flow. Assumes that the\r\n * expression might already have overflown and returns `false` only if the operation neglects\r\n * any possibly combination of garbage bits being present.\r\n */\r\n canOverflow(expr: ExpressionRef, type: Type): bool {\r\n // TODO: the following catches most common and a few uncommon cases, but there are additional\r\n // opportunities here, obviously.\r\n assert(type != Type.void);\r\n\r\n // types other than i8, u8, i16, u16 and bool do not overflow\r\n if (!type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) return false;\r\n\r\n var operand: ExpressionRef;\r\n switch (getExpressionId(expr)) {\r\n\r\n // overflows if the local isn't wrapped or the conversion does\r\n case ExpressionId.GetLocal: {\r\n let currentFunction = this.currentFunction;\r\n let local = currentFunction.localsByIndex[getGetLocalIndex(expr)];\r\n return !currentFunction.flow.isLocalWrapped(local.index)\r\n || canConversionOverflow(local.type, type);\r\n }\r\n\r\n // overflows if the value does\r\n case ExpressionId.SetLocal: {\r\n assert(isTeeLocal(expr));\r\n return this.canOverflow(getSetLocalValue(expr), type);\r\n }\r\n\r\n // never overflows because globals are wrapped on set\r\n case ExpressionId.GetGlobal: return false;\r\n\r\n case ExpressionId.Binary: {\r\n switch (getBinaryOp(expr)) {\r\n\r\n // comparisons do not overflow (result is 0 or 1)\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64:\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64:\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtU32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtU64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64:\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeU32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeU64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64:\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtU32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtU64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64:\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeU32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeU64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: return false;\r\n\r\n // result won't overflow if one side is 0 or if one side is 1 and the other wrapped\r\n case BinaryOp.MulI32: {\r\n return !(\r\n (\r\n getExpressionId(operand = getBinaryLeft(expr)) == ExpressionId.Const &&\r\n (\r\n getConstValueI32(operand) == 0 ||\r\n (\r\n getConstValueI32(operand) == 1 &&\r\n !this.canOverflow(getBinaryRight(expr), type)\r\n )\r\n )\r\n ) || (\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n (\r\n getConstValueI32(operand) == 0 ||\r\n (\r\n getConstValueI32(operand) == 1 &&\r\n !this.canOverflow(getBinaryLeft(expr), type)\r\n )\r\n )\r\n )\r\n );\r\n }\r\n\r\n // result won't overflow if one side is a constant less than this type's mask or one side\r\n // is wrapped\r\n case BinaryOp.AndI32: {\r\n // note that computeSmallIntegerMask returns the mask minus the MSB for signed types\r\n // because signed value garbage bits must be guaranteed to be equal to the MSB.\r\n return !(\r\n (\r\n (\r\n getExpressionId(operand = getBinaryLeft(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) <= type.computeSmallIntegerMask(Type.i32)\r\n ) || !this.canOverflow(operand, type)\r\n ) || (\r\n (\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) <= type.computeSmallIntegerMask(Type.i32)\r\n ) || !this.canOverflow(operand, type)\r\n )\r\n );\r\n }\r\n\r\n // overflows if the shift doesn't clear potential garbage bits\r\n case BinaryOp.ShlI32: {\r\n let shift = 32 - type.size;\r\n return getExpressionId(operand = getBinaryRight(expr)) != ExpressionId.Const\r\n || getConstValueI32(operand) < shift;\r\n }\r\n\r\n // overflows if the value does and the shift doesn't clear potential garbage bits\r\n case BinaryOp.ShrI32: {\r\n let shift = 32 - type.size;\r\n return this.canOverflow(getBinaryLeft(expr), type) && (\r\n getExpressionId(operand = getBinaryRight(expr)) != ExpressionId.Const ||\r\n getConstValueI32(operand) < shift\r\n );\r\n }\r\n\r\n // overflows if the shift does not clear potential garbage bits. if an unsigned value is\r\n // wrapped, it can't overflow.\r\n case BinaryOp.ShrU32: {\r\n let shift = 32 - type.size;\r\n return type.is(TypeFlags.SIGNED)\r\n ? !(\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) > shift // must clear MSB\r\n )\r\n : this.canOverflow(getBinaryLeft(expr), type) && !(\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) >= shift // can leave MSB\r\n );\r\n }\r\n\r\n // overflows if any side does\r\n case BinaryOp.DivU32:\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemU32: {\r\n return this.canOverflow(getBinaryLeft(expr), type)\r\n || this.canOverflow(getBinaryRight(expr), type);\r\n }\r\n }\r\n break;\r\n }\r\n\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n\r\n // comparisons do not overflow (result is 0 or 1)\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: return false;\r\n\r\n // overflow if the maximum result (32) cannot be represented in the target type\r\n case UnaryOp.ClzI32:\r\n case UnaryOp.CtzI32:\r\n case UnaryOp.PopcntI32: return type.size < 7;\r\n }\r\n break;\r\n }\r\n\r\n // overflows if the value cannot be represented in the target type\r\n case ExpressionId.Const: {\r\n let value: i32 = 0;\r\n switch (getExpressionType(expr)) {\r\n case NativeType.I32: { value = getConstValueI32(expr); break; }\r\n case NativeType.I64: { value = getConstValueI64Low(expr); break; } // discards upper bits\r\n case NativeType.F32: { value = i32(getConstValueF32(expr)); break; }\r\n case NativeType.F64: { value = i32(getConstValueF64(expr)); break; }\r\n default: assert(false);\r\n }\r\n switch (type.kind) {\r\n case TypeKind.I8: return value < i8.MIN_VALUE || value > i8.MAX_VALUE;\r\n case TypeKind.I16: return value < i16.MIN_VALUE || value > i16.MAX_VALUE;\r\n case TypeKind.U8: return value < 0 || value > u8.MAX_VALUE;\r\n case TypeKind.U16: return value < 0 || value > u16.MAX_VALUE;\r\n case TypeKind.BOOL: return (value & ~1) != 0;\r\n }\r\n break;\r\n }\r\n\r\n // overflows if the conversion does\r\n case ExpressionId.Load: {\r\n let fromType: Type;\r\n switch (getLoadBytes(expr)) {\r\n case 1: { fromType = isLoadSigned(expr) ? Type.i8 : Type.u8; break; }\r\n case 2: { fromType = isLoadSigned(expr) ? Type.i16 : Type.u16; break; }\r\n default: { fromType = isLoadSigned(expr) ? Type.i32 : Type.u32; break; }\r\n }\r\n return canConversionOverflow(fromType, type);\r\n }\r\n\r\n // overflows if the result does, which is either\r\n // - the last expression of the block, by contract, if the block doesn't have a label\r\n // - the last expression or the value of an inner br if the block has a label (TODO)\r\n case ExpressionId.Block: {\r\n if (!getBlockName(expr)) {\r\n let size = assert(getBlockChildCount(expr));\r\n let last = getBlockChild(expr, size - 1);\r\n return this.canOverflow(last, type);\r\n }\r\n // actually, brs with a value that'd be handled here is not emitted atm\r\n break;\r\n }\r\n\r\n // overflows if either side does\r\n case ExpressionId.If: {\r\n return this.canOverflow(getIfTrue(expr), type)\r\n || this.canOverflow(assert(getIfFalse(expr)), type);\r\n }\r\n\r\n // overflows if either side does\r\n case ExpressionId.Select: {\r\n return this.canOverflow(getSelectThen(expr), type)\r\n || this.canOverflow(getSelectElse(expr), type);\r\n }\r\n\r\n // overflows if the call does not return a wrapped value or the conversion does\r\n case ExpressionId.Call: {\r\n let program = this.currentFunction.program;\r\n let instance = assert(program.instancesLookup.get(assert(getCallTarget(expr))));\r\n assert(instance.kind == ElementKind.FUNCTION);\r\n let returnType = (instance).signature.returnType;\r\n return !(instance).flow.is(FlowFlags.RETURNS_WRAPPED)\r\n || canConversionOverflow(returnType, type);\r\n }\r\n\r\n // doesn't technically overflow\r\n case ExpressionId.Unreachable: return false;\r\n }\r\n return true;\r\n }\r\n\r\n /** Finalizes this flow. Must be the topmost parent flow of the function. */\r\n finalize(): void {\r\n assert(this.parent == null); // must be the topmost parent flow\r\n this.continueLabel = null;\r\n this.breakLabel = null;\r\n this.returnLabel = null;\r\n this.contextualTypeArguments = null;\r\n }\r\n}\r\n\r\n/** Tests if a conversion from one type to another can technically overflow. */\r\nfunction canConversionOverflow(fromType: Type, toType: Type): bool {\r\n var fromSize = fromType.byteSize;\r\n var toSize = toType.byteSize;\r\n return !fromType.is(TypeFlags.INTEGER) // non-i32 locals or returns\r\n || fromSize > toSize\r\n || fromType.is(TypeFlags.SIGNED) != toType.is(TypeFlags.SIGNED);\r\n}\r\n","/**\r\n * Mappings from AssemblyScript types to WebAssembly types.\r\n * @module types\r\n *//***/\r\n\r\nimport {\r\n Class,\r\n FunctionTarget\r\n} from \"./program\";\r\n\r\nimport {\r\n NativeType,\r\n ExpressionRef,\r\n Module\r\n} from \"./module\";\r\n\r\n/** Indicates the kind of a type. */\r\nexport const enum TypeKind {\r\n\r\n // signed integers\r\n\r\n /** An 8-bit signed integer. */\r\n I8,\r\n /** A 16-bit signed integer. */\r\n I16,\r\n /** A 32-bit signed integer. */\r\n I32,\r\n /** A 64-bit signed integer. */\r\n I64,\r\n /** A 32-bit/64-bit signed integer, depending on the target. */\r\n ISIZE,\r\n\r\n // unsigned integers\r\n\r\n /** An 8-bit unsigned integer. */\r\n U8,\r\n /** A 16-bit unsigned integer. */\r\n U16,\r\n /** A 32-bit unsigned integer. Also the base of function types. */\r\n U32,\r\n /** A 64-bit unsigned integer. */\r\n U64,\r\n /** A 32-bit/64-bit unsigned integer, depending on the target. Also the base of class types. */\r\n USIZE,\r\n /** A 1-bit unsigned integer. */\r\n BOOL, // sic\r\n\r\n // floats\r\n\r\n /** A 32-bit float. */\r\n F32,\r\n /** A 64-bit double. */\r\n F64,\r\n\r\n // other\r\n\r\n /** No return type. */\r\n VOID\r\n}\r\n\r\n/** Indicates capabilities of a type. */\r\nexport const enum TypeFlags {\r\n NONE = 0,\r\n /** Is a signed type that can represent negative values. */\r\n SIGNED = 1 << 0,\r\n /** Is an unsigned type that cannot represent negative values. */\r\n UNSIGNED = 1 << 1,\r\n /** Is an integer type. */\r\n INTEGER = 1 << 2,\r\n /** Is a floating point type. */\r\n FLOAT = 1 << 3,\r\n /** Is a pointer type. */\r\n POINTER = 1 << 4,\r\n /** Is smaller than 32-bits. */\r\n SHORT = 1 << 5,\r\n /** Is larger than 32-bits. */\r\n LONG = 1 << 6,\r\n /** Is a value type. */\r\n VALUE = 1 << 7,\r\n /** Is a reference type. */\r\n REFERENCE = 1 << 8,\r\n /** Is a nullable type. */\r\n NULLABLE = 1 << 9\r\n}\r\n\r\n/** Represents a resolved type. */\r\nexport class Type {\r\n\r\n /** Type kind. */\r\n kind: TypeKind;\r\n /** Type flags. */\r\n flags: TypeFlags;\r\n /** Size in bits. */\r\n size: u32;\r\n /** Size in bytes. */\r\n byteSize: i32;\r\n /** Underlying class reference, if a class type. */\r\n classReference: Class | null;\r\n /** Underlying signature reference, if a function type. */\r\n signatureReference: Signature | null;\r\n /** Respective non-nullable type, if nullable. */\r\n nonNullableType: Type;\r\n /** Cached nullable type, if non-nullable. */\r\n private cachedNullableType: Type | null = null;\r\n\r\n /** Constructs a new resolved type. */\r\n constructor(kind: TypeKind, flags: TypeFlags, size: u32) {\r\n this.kind = kind;\r\n this.flags = flags;\r\n this.size = size;\r\n this.byteSize = ceil(size / 8);\r\n this.classReference = null;\r\n this.signatureReference = null;\r\n this.nonNullableType = this;\r\n }\r\n\r\n /** Returns the closest int type representing this type. */\r\n get intType(): Type {\r\n switch (this.kind) {\r\n case TypeKind.I8: return Type.i8;\r\n case TypeKind.I16: return Type.i16;\r\n case TypeKind.F32:\r\n case TypeKind.I32: return Type.i32;\r\n case TypeKind.F64:\r\n case TypeKind.I64: return Type.i64;\r\n case TypeKind.ISIZE: return this.size == 64 ? Type.isize64 : Type.isize32;\r\n case TypeKind.U8: return Type.u8;\r\n case TypeKind.U16: return Type.u16;\r\n case TypeKind.U32: return Type.u32;\r\n case TypeKind.U64: return Type.u64;\r\n case TypeKind.USIZE: return this.size == 64 ? Type.usize64 : Type.usize32;\r\n case TypeKind.BOOL:\r\n default: return Type.i32;\r\n }\r\n }\r\n\r\n /** Computes the sign-extending shift in the target type. */\r\n computeSmallIntegerShift(targetType: Type): u32 {\r\n return targetType.size - this.size;\r\n }\r\n\r\n /** Computes the truncating mask in the target type. */\r\n computeSmallIntegerMask(targetType: Type): u32 {\r\n var size = this.is(TypeFlags.UNSIGNED) ? this.size : this.size - 1;\r\n return ~0 >>> (targetType.size - size);\r\n }\r\n\r\n /** Tests if this type has (all of) the specified flags. */\r\n is(flags: TypeFlags): bool { return (this.flags & flags) == flags; }\r\n /** Tests if this type has any of the specified flags. */\r\n isAny(flags: TypeFlags): bool { return (this.flags & flags) != 0; }\r\n\r\n /** Composes a class type from this type and a class. */\r\n asClass(classType: Class): Type {\r\n assert(this.kind == TypeKind.USIZE && !this.classReference);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.classReference = classType;\r\n return ret;\r\n }\r\n\r\n /** Composes a function type from this type and a function. */\r\n asFunction(signature: Signature): Type {\r\n assert(this.kind == TypeKind.U32 && !this.signatureReference);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.signatureReference = signature;\r\n return ret;\r\n }\r\n\r\n /** Composes the respective nullable type of this type. */\r\n asNullable(): Type {\r\n assert(this.is(TypeFlags.REFERENCE));\r\n if (!this.cachedNullableType) {\r\n assert(!this.is(TypeFlags.NULLABLE));\r\n this.cachedNullableType = new Type(this.kind, this.flags | TypeFlags.NULLABLE, this.size);\r\n this.cachedNullableType.nonNullableType = this;\r\n this.cachedNullableType.classReference = this.classReference; // either a class reference\r\n this.cachedNullableType.signatureReference = this.signatureReference; // or a function reference\r\n }\r\n return this.cachedNullableType;\r\n }\r\n\r\n /** Tests if a value of this type is assignable to a target of the specified type. */\r\n isAssignableTo(target: Type, signednessIsRelevant: bool = false): bool {\r\n var currentClass: Class | null;\r\n var targetClass: Class | null;\r\n var currentFunction: Signature | null;\r\n var targetFunction: Signature | null;\r\n if (this.is(TypeFlags.REFERENCE)) {\r\n if (target.is(TypeFlags.REFERENCE)) {\r\n if (!this.is(TypeFlags.NULLABLE) || target.is(TypeFlags.NULLABLE)) {\r\n if (currentClass = this.classReference) {\r\n if (targetClass = target.classReference) {\r\n return currentClass.isAssignableTo(targetClass);\r\n }\r\n } else if (currentFunction = this.signatureReference) {\r\n if (targetFunction = target.signatureReference) {\r\n return currentFunction.isAssignableTo(targetFunction);\r\n }\r\n }\r\n }\r\n }\r\n } else if (!target.is(TypeFlags.REFERENCE)) {\r\n if (this.is(TypeFlags.INTEGER)) {\r\n if (target.is(TypeFlags.INTEGER)) {\r\n if (!signednessIsRelevant || this.is(TypeFlags.SIGNED) == target.is(TypeFlags.SIGNED)) {\r\n return this.size <= target.size;\r\n }\r\n } else if (target.kind == TypeKind.F32) {\r\n return this.size <= 23; // mantissa bits\r\n } else if (target.kind == TypeKind.F64) {\r\n return this.size <= 52; // ^\r\n }\r\n } else if (this.is(TypeFlags.FLOAT)) {\r\n if (target.is(TypeFlags.FLOAT)) {\r\n return this.size <= target.size;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** Determines the common compatible type of two types, if any. */\r\n static commonCompatible(left: Type, right: Type, signednessIsImportant: bool): Type | null {\r\n if (right.isAssignableTo(left, signednessIsImportant)) return left;\r\n else if (left.isAssignableTo(right, signednessIsImportant)) return right;\r\n return null;\r\n }\r\n\r\n /** Converts this type to its TypeScript representation. */\r\n toString(kindOnly: bool = false): string {\r\n if (!kindOnly && this.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.classReference;\r\n if (classReference) {\r\n return this.is(TypeFlags.NULLABLE)\r\n ? classReference.toString() + \" | null\"\r\n : classReference.toString();\r\n }\r\n let signatureReference = this.signatureReference;\r\n if (signatureReference) {\r\n return this.is(TypeFlags.NULLABLE)\r\n ? \"(\" + signatureReference.toString(true) + \") | null\"\r\n : signatureReference.toString(true);\r\n }\r\n assert(false);\r\n }\r\n switch (this.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"i64\";\r\n case TypeKind.ISIZE: return \"isize\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE: return \"usize\";\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n default: assert(false);\r\n case TypeKind.VOID: return \"void\";\r\n }\r\n }\r\n\r\n // Binaryen specific\r\n\r\n /** Converts this type to its respective native type. */\r\n toNativeType(): NativeType {\r\n switch (this.kind) {\r\n default: return NativeType.I32;\r\n case TypeKind.I64:\r\n case TypeKind.U64: return NativeType.I64;\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? NativeType.I64 : NativeType.I32;\r\n case TypeKind.F32: return NativeType.F32;\r\n case TypeKind.F64: return NativeType.F64;\r\n case TypeKind.VOID: return NativeType.None;\r\n }\r\n }\r\n\r\n /** Converts this type to its native `0` value. */\r\n toNativeZero(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(0);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(0);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(0);\r\n case TypeKind.F32: return module.createF32(0);\r\n case TypeKind.F64: return module.createF64(0);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `1` value. */\r\n toNativeOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(1);\r\n case TypeKind.F32: return module.createF32(1);\r\n case TypeKind.F64: return module.createF64(1);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `-1` value. */\r\n toNativeNegOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(-1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(-1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(-1, -1);\r\n case TypeKind.F32: return module.createF32(-1);\r\n case TypeKind.F64: return module.createF64(-1);\r\n }\r\n }\r\n\r\n /** Converts this type to its signature string. */\r\n toSignatureString(): string {\r\n switch (this.kind) {\r\n default: return \"i\";\r\n case TypeKind.I64:\r\n case TypeKind.U64: return \"I\";\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? \"I\" : \"i\";\r\n case TypeKind.F32: return \"f\";\r\n case TypeKind.F64: return \"F\";\r\n case TypeKind.VOID: return \"v\";\r\n }\r\n }\r\n\r\n // Types\r\n\r\n /** An 8-bit signed integer. */\r\n static readonly i8: Type = new Type(TypeKind.I8,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit signed integer. */\r\n static readonly i16: Type = new Type(TypeKind.I16,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit signed integer. */\r\n static readonly i32: Type = new Type(TypeKind.I32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed integer. */\r\n static readonly i64: Type = new Type(TypeKind.I64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit signed size. WASM32 only. */\r\n static readonly isize32: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed size. WASM64 only. */\r\n static readonly isize64: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** An 8-bit unsigned integer. */\r\n static readonly u8: Type = new Type(TypeKind.U8,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit unsigned integer. */\r\n static readonly u16: Type = new Type(TypeKind.U16,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit unsigned integer. */\r\n static readonly u32: Type = new Type(TypeKind.U32,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned integer. */\r\n static readonly u64: Type = new Type(TypeKind.U64,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit unsigned size. WASM32 only. */\r\n static readonly usize32: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned size. WASM64 only. */\r\n static readonly usize64: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 1-bit unsigned integer. */\r\n static readonly bool: Type = new Type(TypeKind.BOOL,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 1\r\n );\r\n\r\n /** A 32-bit float. */\r\n static readonly f32: Type = new Type(TypeKind.F32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit float. */\r\n static readonly f64: Type = new Type(TypeKind.F64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** No return type. */\r\n static readonly void: Type = new Type(TypeKind.VOID, TypeFlags.NONE, 0);\r\n}\r\n\r\n/** Converts an array of types to an array of native types. */\r\nexport function typesToNativeTypes(types: Type[]): NativeType[] {\r\n var numTypes = types.length;\r\n var ret = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) ret[i] = types[i].toNativeType();\r\n return ret;\r\n}\r\n\r\n/** Converts an array of types to its combined string representation. */\r\nexport function typesToString(types: Type[]): string {\r\n var numTypes = types.length;\r\n if (!numTypes) return \"\";\r\n var sb = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) sb[i] = types[i].toString();\r\n return sb.join(\",\");\r\n}\r\n\r\n/** Represents a fully resolved function signature. */\r\nexport class Signature {\r\n\r\n /** Parameter types, if any, excluding `this`. */\r\n parameterTypes: Type[];\r\n /** Parameter names, if known, excluding `this`. */\r\n parameterNames: string[] | null;\r\n /** Number of required parameters excluding `this`. Other parameters are considered optional. */\r\n requiredParameters: i32;\r\n /** Return type. */\r\n returnType: Type;\r\n /** This type, if an instance signature. */\r\n thisType: Type | null;\r\n /** Whether the last parameter is a rest parameter. */\r\n hasRest: bool;\r\n /** Cached {@link FunctionTarget}. */\r\n cachedFunctionTarget: FunctionTarget | null = null;\r\n /** Respective function type. */\r\n type: Type;\r\n\r\n /** Constructs a new signature. */\r\n constructor(\r\n parameterTypes: Type[] | null = null,\r\n returnType: Type | null = null,\r\n thisType: Type | null = null\r\n ) {\r\n this.parameterTypes = parameterTypes ? parameterTypes : [];\r\n this.parameterNames = null;\r\n this.requiredParameters = 0;\r\n this.returnType = returnType ? returnType : Type.void;\r\n this.thisType = thisType;\r\n this.hasRest = false;\r\n this.type = Type.u32.asFunction(this);\r\n }\r\n\r\n /** Gets the known or, alternatively, generic parameter name at the specified index. */\r\n getParameterName(index: i32): string {\r\n var parameterNames = this.parameterNames;\r\n return parameterNames && parameterNames.length > index\r\n ? parameterNames[index]\r\n : getDefaultParameterName(index);\r\n }\r\n\r\n /** Tests if a value of this function type is assignable to a target of the specified function type. */\r\n isAssignableTo(target: Signature): bool {\r\n // TODO: maybe cache results?\r\n\r\n // check `this` type\r\n var thisThisType = this.thisType;\r\n var targetThisType = target.thisType;\r\n if (thisThisType) {\r\n if (!(targetThisType && thisThisType.isAssignableTo(targetThisType))) return false;\r\n } else if (targetThisType) {\r\n return false;\r\n }\r\n\r\n // check rest parameter\r\n if (this.hasRest != target.hasRest) return false; // TODO\r\n\r\n // check parameter types\r\n var thisParameterTypes = this.parameterTypes;\r\n var targetParameterTypes = target.parameterTypes;\r\n var numParameters = thisParameterTypes.length;\r\n if (numParameters != targetParameterTypes.length) return false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let thisParameterType = thisParameterTypes[i];\r\n let targetParameterType = targetParameterTypes[i];\r\n if (!thisParameterType.isAssignableTo(targetParameterType)) return false;\r\n }\r\n\r\n // check return type\r\n var thisReturnType = this.returnType;\r\n var targetReturnType = target.returnType;\r\n return thisReturnType == targetReturnType || thisReturnType.isAssignableTo(targetReturnType);\r\n }\r\n\r\n /** Converts a signature to a function type string. */\r\n static makeSignatureString(parameterTypes: Type[] | null, returnType: Type, thisType: Type | null = null): string {\r\n var sb = [];\r\n if (thisType) sb.push(thisType.toSignatureString());\r\n if (parameterTypes) {\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) sb.push(parameterTypes[i].toSignatureString());\r\n }\r\n sb.push(returnType.toSignatureString());\r\n return sb.join(\"\");\r\n }\r\n\r\n /** Converts this signature to a function type string. */\r\n toSignatureString(): string {\r\n return Signature.makeSignatureString(this.parameterTypes, this.returnType, this.thisType);\r\n }\r\n\r\n /** Converts this signature to a string. */\r\n toString(includeThis: bool = false): string {\r\n var sb = new Array();\r\n sb.push(\"(\");\r\n var index = 0;\r\n var thisType = this.thisType;\r\n if (thisType) {\r\n if (includeThis) {\r\n sb.push(\"this: \");\r\n sb.push(thisType.toString());\r\n index = 1;\r\n }\r\n }\r\n var parameters = this.parameterTypes;\r\n var numParameters = parameters.length;\r\n if (numParameters) {\r\n let names = this.parameterNames;\r\n let numNames = names ? names.length : 0;\r\n let optionalStart = this.requiredParameters;\r\n let restIndex = this.hasRest ? numParameters - 1 : -1;\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n if (index) sb.push(\", \");\r\n if (i == restIndex) sb.push(\"...\");\r\n if (i < numNames) sb.push((names)[i]);\r\n else sb.push(getDefaultParameterName(i));\r\n if (i >= optionalStart && i != restIndex) sb.push(\"?: \");\r\n else sb.push(\": \");\r\n sb.push(parameters[i].toString());\r\n }\r\n }\r\n sb.push(\") => \");\r\n sb.push(this.returnType.toString());\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n// Cached default parameter names used where names are unknown.\r\nvar cachedDefaultParameterNames: string[] | null = null;\r\n\r\n/** Gets the cached default parameter name for the specified index. */\r\nexport function getDefaultParameterName(index: i32): string {\r\n if (!cachedDefaultParameterNames) cachedDefaultParameterNames = [];\r\n for (let i = cachedDefaultParameterNames.length; i <= index; ++i) {\r\n cachedDefaultParameterNames.push(\"arg$\" + i.toString(10));\r\n }\r\n return cachedDefaultParameterNames[index - 1];\r\n}\r\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\r\n * A TypeScript tokenizer modified for AssemblyScript.\r\n *\r\n * Skips over trivia and provides a general mark/reset mechanism for the parser to utilize on\r\n * ambiguous tokens.\r\n *\r\n * @module tokenizer\r\n *//***/\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Source,\r\n CommentKind\r\n} from \"./ast\";\r\n\r\nimport {\r\n CharCode,\r\n isLineBreak,\r\n isWhiteSpace,\r\n isIdentifierStart,\r\n isIdentifierPart,\r\n isDecimalDigit,\r\n isOctalDigit,\r\n isKeywordCharacter\r\n} from \"./util\";\r\n\r\n/** Named token types. */\r\nexport enum Token {\r\n\r\n // keywords\r\n // discarded: ANY, BOOLEAN, NEVER, NUMBER, STRING, SYMBOL, UNDEFINED, LESSTHAN_SLASH\r\n\r\n ABSTRACT,\r\n AS,\r\n ASYNC,\r\n AWAIT, // ES2017\r\n BREAK, // ES2017\r\n CASE, // ES2017\r\n CATCH, // ES2017\r\n CLASS, // ES2017\r\n CONST, // ES2017\r\n CONTINUE, // ES2017\r\n CONSTRUCTOR,\r\n DEBUGGER, // ES2017\r\n DECLARE,\r\n DEFAULT, // ES2017\r\n DELETE, // ES2017\r\n DO, // ES2017\r\n ELSE, // ES2017\r\n ENUM, // ES2017 future\r\n EXPORT, // ES2017\r\n EXTENDS, // ES2017\r\n FALSE, // ES\r\n FINALLY, // ES2017\r\n FOR, // ES2017\r\n FROM, // AS possible identifier\r\n FUNCTION, // ES2017\r\n GET,\r\n IF, // ES2017\r\n IMPLEMENTS, // ES2017 non-lexical\r\n IMPORT, // ES2017\r\n IN, // ES2017\r\n INSTANCEOF, // ES2017\r\n INTERFACE, // ES2017 non-lexical\r\n IS,\r\n KEYOF,\r\n LET, // ES2017 non-lexical\r\n MODULE, // AS possible identifier\r\n NAMESPACE, // AS possible identifier\r\n NEW, // ES2017\r\n NULL, // ES\r\n OF,\r\n PACKAGE, // ES2017 non-lexical\r\n PRIVATE, // ES2017 non-lexical\r\n PROTECTED, // ES2017 non-lexical\r\n PUBLIC, // ES2017 non-lexical\r\n READONLY,\r\n RETURN, // ES2017\r\n SET,\r\n STATIC, // ES2017 non-lexical\r\n SUPER, // ES2017\r\n SWITCH, // ES2017\r\n THIS, // ES2017\r\n THROW, // ES2017\r\n TRUE, // ES\r\n TRY, // ES2017\r\n TYPE, // AS possible identifier\r\n TYPEOF, // ES2017\r\n VAR, // ES2017\r\n VOID, // ES2017\r\n WHILE, // ES2017\r\n WITH, // ES2017\r\n YIELD, // ES2017\r\n\r\n // punctuation\r\n\r\n OPENBRACE,\r\n CLOSEBRACE,\r\n OPENPAREN,\r\n CLOSEPAREN,\r\n OPENBRACKET,\r\n CLOSEBRACKET,\r\n DOT,\r\n DOT_DOT_DOT,\r\n SEMICOLON,\r\n COMMA,\r\n LESSTHAN,\r\n GREATERTHAN,\r\n LESSTHAN_EQUALS,\r\n GREATERTHAN_EQUALS,\r\n EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS,\r\n EQUALS_EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS_EQUALS,\r\n EQUALS_GREATERTHAN,\r\n PLUS,\r\n MINUS,\r\n ASTERISK_ASTERISK,\r\n ASTERISK,\r\n SLASH,\r\n PERCENT,\r\n PLUS_PLUS,\r\n MINUS_MINUS,\r\n LESSTHAN_LESSTHAN,\r\n GREATERTHAN_GREATERTHAN,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN,\r\n AMPERSAND,\r\n BAR,\r\n CARET,\r\n EXCLAMATION,\r\n TILDE,\r\n AMPERSAND_AMPERSAND,\r\n BAR_BAR,\r\n QUESTION,\r\n COLON,\r\n EQUALS,\r\n PLUS_EQUALS,\r\n MINUS_EQUALS,\r\n ASTERISK_EQUALS,\r\n ASTERISK_ASTERISK_EQUALS,\r\n SLASH_EQUALS,\r\n PERCENT_EQUALS,\r\n LESSTHAN_LESSTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS,\r\n AMPERSAND_EQUALS,\r\n BAR_EQUALS,\r\n CARET_EQUALS,\r\n AT,\r\n\r\n // literals\r\n\r\n IDENTIFIER,\r\n STRINGLITERAL,\r\n INTEGERLITERAL,\r\n FLOATLITERAL,\r\n\r\n // meta\r\n\r\n INVALID,\r\n ENDOFFILE\r\n}\r\n\r\nexport enum IdentifierHandling {\r\n DEFAULT,\r\n PREFER,\r\n ALWAYS\r\n}\r\n\r\nexport function tokenFromKeyword(text: string): Token {\r\n assert(text.length);\r\n switch (text.charCodeAt(0)) {\r\n case CharCode.a: {\r\n switch (text) {\r\n case \"abstract\": return Token.ABSTRACT;\r\n case \"as\": return Token.AS;\r\n case \"async\": return Token.ASYNC;\r\n case \"await\": return Token.AWAIT;\r\n }\r\n break;\r\n }\r\n case CharCode.b: {\r\n switch (text) {\r\n case \"break\": return Token.BREAK;\r\n }\r\n break;\r\n }\r\n case CharCode.c: {\r\n switch (text) {\r\n case \"case\": return Token.CASE;\r\n case \"catch\": return Token.CATCH;\r\n case \"class\": return Token.CLASS;\r\n case \"continue\": return Token.CONTINUE;\r\n case \"const\": return Token.CONST;\r\n case \"constructor\": return Token.CONSTRUCTOR;\r\n }\r\n break;\r\n }\r\n case CharCode.d: {\r\n switch (text) {\r\n case \"debugger\": return Token.DEBUGGER;\r\n case \"declare\": return Token.DECLARE;\r\n case \"default\": return Token.DEFAULT;\r\n case \"delete\": return Token.DELETE;\r\n case \"do\": return Token.DO;\r\n }\r\n break;\r\n }\r\n case CharCode.e: {\r\n switch (text) {\r\n case \"else\": return Token.ELSE;\r\n case \"enum\": return Token.ENUM;\r\n case \"export\": return Token.EXPORT;\r\n case \"extends\": return Token.EXTENDS;\r\n }\r\n break;\r\n }\r\n case CharCode.f: {\r\n switch (text) {\r\n case \"false\": return Token.FALSE;\r\n case \"finally\": return Token.FINALLY;\r\n case \"for\": return Token.FOR;\r\n case \"from\": return Token.FROM;\r\n case \"function\": return Token.FUNCTION;\r\n }\r\n break;\r\n }\r\n case CharCode.g: {\r\n switch (text) {\r\n case \"get\": return Token.GET;\r\n }\r\n break;\r\n }\r\n case CharCode.i: {\r\n switch (text) {\r\n case \"if\": return Token.IF;\r\n case \"implements\": return Token.IMPLEMENTS;\r\n case \"import\": return Token.IMPORT;\r\n case \"in\": return Token.IN;\r\n case \"instanceof\": return Token.INSTANCEOF;\r\n case \"interface\": return Token.INTERFACE;\r\n case \"is\": return Token.IS;\r\n }\r\n break;\r\n }\r\n case CharCode.k: {\r\n switch (text) {\r\n case \"keyof\": return Token.KEYOF;\r\n }\r\n break;\r\n }\r\n case CharCode.l: {\r\n switch (text) {\r\n case \"let\": return Token.LET;\r\n }\r\n break;\r\n }\r\n case CharCode.m: {\r\n switch (text) {\r\n case \"module\": return Token.MODULE;\r\n }\r\n break;\r\n }\r\n case CharCode.n: {\r\n switch (text) {\r\n case \"namespace\": return Token.NAMESPACE;\r\n case \"new\": return Token.NEW;\r\n case \"null\": return Token.NULL;\r\n }\r\n break;\r\n }\r\n case CharCode.o: {\r\n switch (text) {\r\n case \"of\": return Token.OF;\r\n }\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (text) {\r\n case \"package\": return Token.PACKAGE;\r\n case \"private\": return Token.PRIVATE;\r\n case \"protected\": return Token.PROTECTED;\r\n case \"public\": return Token.PUBLIC;\r\n }\r\n break;\r\n }\r\n case CharCode.r: {\r\n switch (text) {\r\n case \"readonly\": return Token.READONLY;\r\n case \"return\": return Token.RETURN;\r\n }\r\n break;\r\n }\r\n case CharCode.s: {\r\n switch (text) {\r\n case \"set\": return Token.SET;\r\n case \"static\": return Token.STATIC;\r\n case \"super\": return Token.SUPER;\r\n case \"switch\": return Token.SWITCH;\r\n }\r\n break;\r\n }\r\n case CharCode.t: {\r\n switch (text) {\r\n case \"this\": return Token.THIS;\r\n case \"throw\": return Token.THROW;\r\n case \"true\": return Token.TRUE;\r\n case \"try\": return Token.TRY;\r\n case \"type\": return Token.TYPE;\r\n case \"typeof\": return Token.TYPEOF;\r\n }\r\n break;\r\n }\r\n case CharCode.v: {\r\n switch (text) {\r\n case \"var\": return Token.VAR;\r\n case \"void\": return Token.VOID;\r\n }\r\n break;\r\n }\r\n case CharCode.w: {\r\n switch (text) {\r\n case \"while\": return Token.WHILE;\r\n case \"with\": return Token.WITH;\r\n }\r\n break;\r\n }\r\n case CharCode.y: {\r\n switch (text) {\r\n case \"yield\": return Token.YIELD;\r\n }\r\n break;\r\n }\r\n }\r\n return Token.INVALID;\r\n}\r\n\r\nexport function tokenIsAlsoIdentifier(token: Token): bool {\r\n switch (token) {\r\n case Token.ABSTRACT:\r\n case Token.AS:\r\n case Token.CONSTRUCTOR:\r\n case Token.DECLARE:\r\n case Token.DELETE:\r\n case Token.FROM:\r\n case Token.FOR:\r\n case Token.GET:\r\n case Token.IS:\r\n case Token.KEYOF:\r\n case Token.MODULE:\r\n case Token.NAMESPACE:\r\n case Token.READONLY:\r\n case Token.SET:\r\n case Token.TYPE: return true;\r\n default: return false;\r\n }\r\n}\r\n\r\nexport function operatorTokenToString(token: Token): string {\r\n switch (token) {\r\n case Token.DELETE: return \"delete\";\r\n case Token.IN: return \"in\";\r\n case Token.INSTANCEOF: return \"instanceof\";\r\n case Token.NEW: return \"new\";\r\n case Token.TYPEOF: return \"typeof\";\r\n case Token.VOID: return \"void\";\r\n case Token.YIELD: return \"yield\";\r\n case Token.DOT_DOT_DOT: return \"...\";\r\n case Token.COMMA: return \",\";\r\n case Token.LESSTHAN: return \"<\";\r\n case Token.GREATERTHAN: return \">\";\r\n case Token.LESSTHAN_EQUALS: return \"<=\";\r\n case Token.GREATERTHAN_EQUALS: return \">=\";\r\n case Token.EQUALS_EQUALS: return \"==\";\r\n case Token.EXCLAMATION_EQUALS: return \"!=\";\r\n case Token.EQUALS_EQUALS_EQUALS: return \"===\";\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return \"!==\";\r\n case Token.PLUS: return \"+\";\r\n case Token.MINUS: return \"-\";\r\n case Token.ASTERISK_ASTERISK: return \"**\";\r\n case Token.ASTERISK: return \"*\";\r\n case Token.SLASH: return \"/\";\r\n case Token.PERCENT: return \"%\";\r\n case Token.PLUS_PLUS: return \"++\";\r\n case Token.MINUS_MINUS: return \"--\";\r\n case Token.LESSTHAN_LESSTHAN: return \"<<\";\r\n case Token.GREATERTHAN_GREATERTHAN: return \">>\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return \">>>\";\r\n case Token.AMPERSAND: return \"&\";\r\n case Token.BAR: return \"|\";\r\n case Token.CARET: return \"^\";\r\n case Token.EXCLAMATION: return \"!\";\r\n case Token.TILDE: return \"~\";\r\n case Token.AMPERSAND_AMPERSAND: return \"&&\";\r\n case Token.BAR_BAR: return \"||\";\r\n case Token.EQUALS: return \"=\";\r\n case Token.PLUS_EQUALS: return \"+=\";\r\n case Token.MINUS_EQUALS: return \"-=\";\r\n case Token.ASTERISK_EQUALS: return \"*=\";\r\n case Token.ASTERISK_ASTERISK_EQUALS: return \"**=\";\r\n case Token.SLASH_EQUALS: return \"/=\";\r\n case Token.PERCENT_EQUALS: return \"%=\";\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: return \"<<=\";\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: return \">>=\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: return \">>>=\";\r\n case Token.AMPERSAND_EQUALS: return \"&=\";\r\n case Token.BAR_EQUALS: return \"|=\";\r\n case Token.CARET_EQUALS: return \"^=\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\nexport class Range {\r\n\r\n source: Source;\r\n start: i32;\r\n end: i32;\r\n\r\n // TODO: set these while tokenizing\r\n // line: i32;\r\n // column: i32;\r\n\r\n constructor(source: Source, start: i32, end: i32) {\r\n this.source = source;\r\n this.start = start;\r\n this.end = end;\r\n }\r\n\r\n static join(a: Range, b: Range): Range {\r\n if (a.source != b.source) throw new Error(\"source mismatch\");\r\n return new Range(a.source,\r\n a.start < b.start ? a.start : b.start,\r\n a.end > b.end ? a.end : b.end\r\n );\r\n }\r\n\r\n get atStart(): Range {\r\n return new Range(this.source, this.start, this.start);\r\n }\r\n get atEnd(): Range {\r\n return new Range(this.source, this.end, this.end);\r\n }\r\n\r\n get line(): i32 {\r\n var text = this.source.text;\r\n var line = 1;\r\n for (let pos = this.start; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) line++;\r\n }\r\n return line;\r\n }\r\n\r\n get column(): i32 {\r\n var text = this.source.text;\r\n var column = 0;\r\n for (let pos = this.start - 1; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) break;\r\n ++column;\r\n }\r\n return column;\r\n }\r\n\r\n toString(): string {\r\n return this.source.text.substring(this.start, this.end);\r\n }\r\n\r\n debugInfoRef: usize = 0;\r\n}\r\n\r\ndeclare function parseFloat(str: string): f64;\r\n\r\n/** Handler for intercepting comments while tokenizing. */\r\nexport type CommentHandler = (kind: CommentKind, text: string, range: Range) => void;\r\n\r\n/** Tokenizes a source to individual {@link Token}s. */\r\nexport class Tokenizer extends DiagnosticEmitter {\r\n\r\n source: Source;\r\n end: i32 = 0;\r\n\r\n pos: i32 = 0;\r\n token: Token = -1;\r\n tokenPos: i32 = 0;\r\n\r\n nextToken: Token = -1;\r\n nextTokenPos: i32 = 0;\r\n nextTokenOnNewLine: bool = false;\r\n\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new tokenizer. */\r\n constructor(source: Source, diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.source = source;\r\n this.pos = 0;\r\n this.end = source.text.length;\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n\r\n var text = source.text;\r\n\r\n // skip bom\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.BYTEORDERMARK\r\n ) {\r\n ++this.pos;\r\n }\r\n\r\n // skip shebang\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.HASH &&\r\n text.charCodeAt(this.pos + 1) == CharCode.EXCLAMATION\r\n ) {\r\n this.pos += 2;\r\n while (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) != CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // 'next' now starts at lf or eof\r\n }\r\n }\r\n\r\n next(identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): Token {\r\n this.nextToken = -1;\r\n return this.token = this.unsafeNext(identifierHandling);\r\n }\r\n\r\n private unsafeNext(\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxTokenLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n this.tokenPos = this.pos;\r\n let c = text.charCodeAt(this.pos);\r\n switch (c) {\r\n case CharCode.CARRIAGERETURN: {\r\n if (!(\r\n ++this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n )) break;\r\n // otherwise fall-through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.SPACE: {\r\n ++this.pos;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EXCLAMATION_EQUALS_EQUALS;\r\n }\r\n return Token.EXCLAMATION_EQUALS;\r\n }\r\n return Token.EXCLAMATION;\r\n }\r\n case CharCode.DOUBLEQUOTE:\r\n case CharCode.SINGLEQUOTE:\r\n case CharCode.BACKTICK: { // TODO\r\n return Token.STRINGLITERAL; // expects a call to readString\r\n }\r\n case CharCode.PERCENT: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.PERCENT_EQUALS;\r\n }\r\n return Token.PERCENT;\r\n }\r\n case CharCode.AMPERSAND: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.AMPERSAND) {\r\n ++this.pos;\r\n return Token.AMPERSAND_AMPERSAND;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.AMPERSAND_EQUALS;\r\n }\r\n }\r\n return Token.AMPERSAND;\r\n }\r\n case CharCode.OPENPAREN: {\r\n ++this.pos;\r\n return Token.OPENPAREN;\r\n }\r\n case CharCode.CLOSEPAREN: {\r\n ++this.pos;\r\n return Token.CLOSEPAREN;\r\n }\r\n case CharCode.ASTERISK: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.ASTERISK_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.ASTERISK_ASTERISK_EQUALS;\r\n }\r\n return Token.ASTERISK_ASTERISK;\r\n }\r\n }\r\n return Token.ASTERISK;\r\n }\r\n case CharCode.PLUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.PLUS) {\r\n ++this.pos;\r\n return Token.PLUS_PLUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.PLUS_EQUALS;\r\n }\r\n }\r\n return Token.PLUS;\r\n }\r\n case CharCode.COMMA: {\r\n ++this.pos;\r\n return Token.COMMA;\r\n }\r\n case CharCode.MINUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.MINUS) {\r\n ++this.pos;\r\n return Token.MINUS_MINUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.MINUS_EQUALS;\r\n }\r\n }\r\n return Token.MINUS;\r\n }\r\n case CharCode.DOT: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (isDecimalDigit(text.charCodeAt(this.pos))) {\r\n --this.pos;\r\n return Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n if (\r\n maxTokenLength > 2 && this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.DOT &&\r\n text.charCodeAt(this.pos + 1) == CharCode.DOT\r\n ) {\r\n this.pos += 2;\r\n return Token.DOT_DOT_DOT;\r\n }\r\n }\r\n return Token.DOT;\r\n }\r\n case CharCode.SLASH: {\r\n let commentStartPos = this.pos;\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.SLASH) { // single-line\r\n let commentKind = CommentKind.LINE;\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n ++this.pos;\r\n commentKind = CommentKind.TRIPLE;\r\n }\r\n while (++this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LINEFEED) {\r\n ++this.pos;\r\n break;\r\n }\r\n }\r\n if (this.onComment) {\r\n this.onComment(\r\n commentKind,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) { // multi-line\r\n let closed = false;\r\n while (++this.pos < this.end) {\r\n c = text.charCodeAt(this.pos);\r\n if (\r\n c == CharCode.ASTERISK &&\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n this.pos += 2;\r\n closed = true;\r\n break;\r\n }\r\n }\r\n if (!closed) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n this.range(this.pos), \"*/\"\r\n );\r\n } else if (this.onComment) {\r\n this.onComment(\r\n CommentKind.BLOCK,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.SLASH_EQUALS;\r\n }\r\n }\r\n return Token.SLASH;\r\n }\r\n case CharCode._0:\r\n case CharCode._1:\r\n case CharCode._2:\r\n case CharCode._3:\r\n case CharCode._4:\r\n case CharCode._5:\r\n case CharCode._6:\r\n case CharCode._7:\r\n case CharCode._8:\r\n case CharCode._9: {\r\n return this.testInteger()\r\n ? Token.INTEGERLITERAL // expects a call to readInteger\r\n : Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n case CharCode.COLON: {\r\n ++this.pos;\r\n return Token.COLON;\r\n }\r\n case CharCode.SEMICOLON: {\r\n ++this.pos;\r\n return Token.SEMICOLON;\r\n }\r\n case CharCode.LESSTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LESSTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.LESSTHAN_LESSTHAN_EQUALS;\r\n }\r\n return Token.LESSTHAN_LESSTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.LESSTHAN_EQUALS;\r\n }\r\n }\r\n return Token.LESSTHAN;\r\n }\r\n case CharCode.EQUALS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EQUALS_EQUALS_EQUALS;\r\n }\r\n return Token.EQUALS_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n return Token.EQUALS_GREATERTHAN;\r\n }\r\n }\r\n return Token.EQUALS;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (maxTokenLength > 2 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 3 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN;\r\n }\r\n case CharCode.QUESTION: {\r\n ++this.pos;\r\n return Token.QUESTION;\r\n }\r\n case CharCode.OPENBRACKET: {\r\n ++this.pos;\r\n return Token.OPENBRACKET;\r\n }\r\n case CharCode.CLOSEBRACKET: {\r\n ++this.pos;\r\n return Token.CLOSEBRACKET;\r\n }\r\n case CharCode.CARET: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.CARET_EQUALS;\r\n }\r\n return Token.CARET;\r\n }\r\n case CharCode.OPENBRACE: {\r\n ++this.pos;\r\n return Token.OPENBRACE;\r\n }\r\n case CharCode.BAR: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.BAR) {\r\n ++this.pos;\r\n return Token.BAR_BAR;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.BAR_EQUALS;\r\n }\r\n }\r\n return Token.BAR;\r\n }\r\n case CharCode.CLOSEBRACE: {\r\n ++this.pos;\r\n return Token.CLOSEBRACE;\r\n }\r\n case CharCode.TILDE: {\r\n ++this.pos;\r\n return Token.TILDE;\r\n }\r\n case CharCode.AT: {\r\n ++this.pos;\r\n return Token.AT;\r\n }\r\n default: {\r\n if (isIdentifierStart(c)) {\r\n if (isKeywordCharacter(c)) {\r\n let posBefore = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(c = text.charCodeAt(this.pos))\r\n ) {\r\n if (!isKeywordCharacter(c)) {\r\n this.pos = posBefore;\r\n return Token.IDENTIFIER;\r\n }\r\n }\r\n let keywordText = text.substring(posBefore, this.pos);\r\n let keywordToken = tokenFromKeyword(keywordText);\r\n if (\r\n keywordToken != Token.INVALID &&\r\n identifierHandling !== IdentifierHandling.ALWAYS &&\r\n !(\r\n identifierHandling === IdentifierHandling.PREFER &&\r\n tokenIsAlsoIdentifier(keywordToken)\r\n )\r\n ) {\r\n return keywordToken;\r\n }\r\n this.pos = posBefore;\r\n }\r\n return Token.IDENTIFIER; // expects a call to readIdentifier\r\n } else if (isWhiteSpace(c)) {\r\n ++this.pos;\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Invalid_character,\r\n this.range(this.pos, this.pos + 1)\r\n );\r\n ++this.pos;\r\n return Token.INVALID;\r\n }\r\n }\r\n }\r\n return Token.ENDOFFILE;\r\n }\r\n\r\n peek(\r\n checkOnNewLine: bool = false,\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxCompoundLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n if (this.nextToken < 0) {\r\n let posBefore = this.pos;\r\n let tokenBefore = this.token;\r\n let tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n this.nextTokenPos = this.tokenPos;\r\n if (checkOnNewLine) {\r\n this.nextTokenOnNewLine = false;\r\n for (let pos = posBefore, end = this.nextTokenPos; pos < end; ++pos) {\r\n if (isLineBreak(text.charCodeAt(pos))) {\r\n this.nextTokenOnNewLine = true;\r\n break;\r\n }\r\n }\r\n }\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n }\r\n return this.nextToken;\r\n }\r\n\r\n skipIdentifier(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.PREFER);\r\n }\r\n\r\n skipIdentifierName(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.ALWAYS);\r\n }\r\n\r\n skip(token: Token, identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): bool {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n var maxCompoundLength = i32.MAX_VALUE;\r\n switch (token) {\r\n case Token.GREATERTHAN: { // where parsing type arguments\r\n maxCompoundLength = 1;\r\n break;\r\n }\r\n }\r\n this.token = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n if (this.token == token) {\r\n this.nextToken = -1;\r\n return true;\r\n } else {\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n return false;\r\n }\r\n }\r\n\r\n mark(): State {\r\n var state: State;\r\n if (reusableState) {\r\n state = reusableState;\r\n reusableState = null;\r\n } else {\r\n state = new State();\r\n }\r\n state.pos = this.pos;\r\n state.token = this.token;\r\n state.tokenPos = this.tokenPos;\r\n return state;\r\n }\r\n\r\n discard(state: State): void {\r\n reusableState = state;\r\n }\r\n\r\n reset(state: State): void {\r\n this.pos = state.pos;\r\n this.token = state.token;\r\n this.tokenPos = state.tokenPos;\r\n this.nextToken = -1;\r\n }\r\n\r\n range(start: i32 = -1, end: i32 = -1): Range {\r\n if (start < 0) {\r\n start = this.tokenPos;\r\n end = this.pos;\r\n } else if (end < 0) {\r\n end = start;\r\n }\r\n return new Range(this.source, start, end);\r\n }\r\n\r\n readIdentifier(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(text.charCodeAt(this.pos))\r\n );\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readString(): string {\r\n var text = this.source.text;\r\n var quote = text.charCodeAt(this.pos++);\r\n var start = this.pos;\r\n var result = \"\";\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.end)\r\n );\r\n break;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == quote) {\r\n result += text.substring(start, this.pos++);\r\n break;\r\n }\r\n if (c == CharCode.BACKSLASH) {\r\n result += text.substring(start, this.pos);\r\n result += this.readEscapeSequence();\r\n start = this.pos;\r\n continue;\r\n }\r\n if (isLineBreak(c)) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n return result;\r\n }\r\n\r\n readEscapeSequence(): string {\r\n if (++this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.end)\r\n );\r\n return \"\";\r\n }\r\n\r\n var text = this.source.text;\r\n var c = text.charCodeAt(this.pos++);\r\n switch (c) {\r\n case CharCode._0: return \"\\0\";\r\n case CharCode.b: return \"\\b\";\r\n case CharCode.t: return \"\\t\";\r\n case CharCode.n: return \"\\n\";\r\n case CharCode.v: return \"\\v\";\r\n case CharCode.f: return \"\\f\";\r\n case CharCode.r: return \"\\r\";\r\n case CharCode.SINGLEQUOTE: return \"'\";\r\n case CharCode.DOUBLEQUOTE: return \"\\\"\";\r\n case CharCode.u: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.OPENBRACE\r\n ) {\r\n ++this.pos;\r\n return this.readExtendedUnicodeEscape(); // \\u{DDDDDDDD}\r\n }\r\n return this.readUnicodeEscape(); // \\uDDDD\r\n }\r\n case CharCode.CARRIAGERETURN: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // fall through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: return \"\";\r\n default: return String.fromCharCode(c);\r\n }\r\n }\r\n\r\n readRegexpPattern(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var escaped = false;\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.end)\r\n );\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.BACKSLASH) {\r\n ++this.pos;\r\n escaped = true;\r\n continue;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.SLASH && !escaped) break;\r\n if (isLineBreak(c)) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n escaped = false;\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readRegexpFlags(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var flags = 0;\r\n while (this.pos < this.end) {\r\n let c: i32 = text.charCodeAt(this.pos);\r\n if (!isIdentifierPart(c)) break;\r\n ++this.pos;\r\n\r\n // make sure each supported flag is unique\r\n switch (c) {\r\n case CharCode.g: {\r\n flags |= flags & 1 ? -1 : 1;\r\n break;\r\n }\r\n case CharCode.i: {\r\n flags |= flags & 2 ? -1 : 2;\r\n break;\r\n }\r\n case CharCode.m: {\r\n flags |= flags & 4 ? -1 : 4;\r\n break;\r\n }\r\n default: {\r\n flags = -1;\r\n break;\r\n }\r\n }\r\n }\r\n if (flags == -1) {\r\n this.error(\r\n DiagnosticCode.Invalid_regular_expression_flags,\r\n this.range(start, this.pos)\r\n );\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n testInteger(): bool {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 1 < this.end) {\r\n switch (text.charCodeAt(this.pos + 2)) {\r\n case CharCode.X:\r\n case CharCode.x:\r\n case CharCode.B:\r\n case CharCode.b:\r\n case CharCode.O:\r\n case CharCode.o: return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode.DOT || c == CharCode.E || c == CharCode.e) {\r\n return false;\r\n }\r\n if ((c < CharCode._0 || c > CharCode._9) && c != CharCode._) break;\r\n // does not validate separator placement (this is done in readXYInteger)\r\n pos++;\r\n }\r\n return true;\r\n }\r\n\r\n readInteger(): I64 {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n switch (text.charCodeAt(this.pos + 1)) {\r\n case CharCode.X:\r\n case CharCode.x: {\r\n this.pos += 2;\r\n return this.readHexInteger();\r\n }\r\n case CharCode.B:\r\n case CharCode.b: {\r\n this.pos += 2;\r\n return this.readBinaryInteger();\r\n }\r\n case CharCode.O:\r\n case CharCode.o: {\r\n this.pos += 2;\r\n return this.readOctalInteger();\r\n }\r\n }\r\n if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n let start = this.pos;\r\n ++this.pos;\r\n let value = this.readOctalInteger();\r\n this.error(\r\n DiagnosticCode.Octal_literals_are_not_allowed_in_strict_mode,\r\n this.range(start, this.pos)\r\n );\r\n return value;\r\n }\r\n }\r\n return this.readDecimalInteger();\r\n }\r\n\r\n readHexInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_16 = i64_new(16, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 16 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n // value = value * 16 + 10 + c - CharCode.A;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.A, 0)\r\n );\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n // value = value * 16 + 10 + c - CharCode.a;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.a, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readDecimalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_10 = i64_new(10, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 10 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_10),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readOctalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_8 = i64_new(8, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._7) {\r\n // value = value * 8 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_8),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Octal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readBinaryInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_2 = i64_new(2, 0);\r\n var i64_1 = i64_new(1, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode._0) {\r\n // value = value * 2;\r\n value = i64_mul(\r\n value,\r\n i64_2\r\n );\r\n } else if (c == CharCode._1) {\r\n // value = value * 2 + 1;\r\n value = i64_add(\r\n i64_mul(value, i64_2),\r\n i64_1\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Binary_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readFloat(): f64 {\r\n // var text = this.source.text;\r\n // if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n // switch (text.charCodeAt(this.pos + 1)) {\r\n // case CharCode.X:\r\n // case CharCode.x: {\r\n // this.pos += 2;\r\n // return this.readHexFloat();\r\n // }\r\n // }\r\n // }\r\n return this.readDecimalFloat();\r\n }\r\n\r\n readDecimalFloat(): f64 {\r\n // TODO: numeric separators (parseFloat can't handle these)\r\n var start = this.pos;\r\n var text = this.source.text;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n if (this.pos < this.end && text.charCodeAt(this.pos) == CharCode.DOT) {\r\n ++this.pos;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n if (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.E || c == CharCode.e) {\r\n if (\r\n ++this.pos < this.end && (\r\n text.charCodeAt(this.pos) == CharCode.MINUS ||\r\n text.charCodeAt(this.pos) == CharCode.PLUS\r\n ) &&\r\n isDecimalDigit(text.charCodeAt(this.pos + 1))\r\n ) {\r\n ++this.pos;\r\n }\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n }\r\n return parseFloat(text.substring(start, this.pos));\r\n }\r\n\r\n readHexFloat(): f64 {\r\n throw new Error(\"not implemented\"); // TBD\r\n }\r\n\r\n readUnicodeEscape(): string {\r\n var remain = 4;\r\n var value = 0;\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos++);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n value = value * 16 + c - CharCode._0;\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n value = value * 16 + 10 + c - CharCode.A;\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n value = value * 16 + 10 + c - CharCode.a;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(this.pos - 1, this.pos)\r\n );\r\n return \"\";\r\n }\r\n if (--remain == 0) break;\r\n }\r\n if (remain) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.pos)\r\n );\r\n return \"\";\r\n }\r\n return String.fromCharCode(value);\r\n }\r\n\r\n private readExtendedUnicodeEscape(): string {\r\n var start = this.pos;\r\n var value = this.readHexInteger();\r\n var value32 = i64_low(value);\r\n var invalid = false;\r\n\r\n assert(!i64_high(value));\r\n if (value32 > 0x10FFFF) {\r\n this.error(\r\n DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n var text = this.source.text;\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(start, this.end)\r\n );\r\n invalid = true;\r\n } else if (text.charCodeAt(this.pos) == CharCode.CLOSEBRACE) {\r\n ++this.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unterminated_Unicode_escape_sequence,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n if (invalid) return \"\";\r\n return value32 < 65536\r\n ? String.fromCharCode(value32)\r\n : String.fromCharCode(\r\n (((value32 - 65536) / 1024 | 0) + 0xD800) as i32,\r\n ( (value32 - 65536) % 1024 + 0xDC00) as i32\r\n );\r\n }\r\n\r\n finish(): void {\r\n }\r\n}\r\n\r\n/** Tokenizer state as returned by {@link Tokenizer#mark} and consumed by {@link Tokenizer#reset}. */\r\nexport class State {\r\n /** Current position. */\r\n pos: i32;\r\n /** Current token. */\r\n token: Token;\r\n /** Current token's position. */\r\n tokenPos: i32;\r\n}\r\n\r\n// Reusable state object to reduce allocations\r\nvar reusableState: State | null = null;\r\n","/**\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","/**\n * Generated from diagnosticsMessages.json. Do not edit.\n * @module diagnostics\n *//***/\n\n/* tslint:disable:max-line-length */\n\n/** Enum of available diagnostic codes. */\nexport enum DiagnosticCode {\n Operation_not_supported = 100,\n Operation_is_unsafe = 101,\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\n Type_0_cannot_be_changed_to_type_1 = 202,\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\n Basic_type_0_cannot_be_nullable = 204,\n Cannot_export_a_mutable_global = 205,\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\n Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa = 207,\n Unmanaged_classes_cannot_implement_interfaces = 208,\n Invalid_regular_expression_flags = 209,\n Implementation_0_must_match_the_signature_1 = 210,\n Class_0_is_sealed_and_cannot_be_extended = 211,\n Decorator_0_is_not_valid_here = 212,\n Duplicate_decorator = 213,\n An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf = 214,\n Optional_parameter_must_have_an_initializer = 215,\n Constructor_of_class_0_must_not_require_any_arguments = 216,\n Function_0_cannot_be_inlined_into_itself = 217,\n Unterminated_string_literal = 1002,\n Identifier_expected = 1003,\n _0_expected = 1005,\n A_file_cannot_have_a_reference_to_itself = 1006,\n Trailing_comma_not_allowed = 1009,\n Unexpected_token = 1012,\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\n Parameter_cannot_have_question_mark_and_initializer = 1015,\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\n Enum_member_must_have_initializer = 1061,\n Statements_are_not_allowed_in_ambient_contexts = 1036,\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\n _0_modifier_cannot_be_used_here = 1042,\n A_rest_parameter_cannot_be_optional = 1047,\n A_rest_parameter_cannot_have_an_initializer = 1048,\n A_set_accessor_must_have_exactly_one_parameter = 1049,\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\n A_get_accessor_cannot_have_parameters = 1054,\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\n An_accessor_cannot_have_type_parameters = 1094,\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\n Type_parameter_list_cannot_be_empty = 1098,\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\n Expression_expected = 1109,\n Type_expected = 1110,\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\n Duplicate_label_0 = 1114,\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\n Digit_expected = 1124,\n Hexadecimal_digit_expected = 1125,\n Unexpected_end_of_text = 1126,\n Invalid_character = 1127,\n _case_or_default_expected = 1130,\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\n Type_argument_expected = 1140,\n String_literal_expected = 1141,\n Line_break_not_permitted_here = 1142,\n Declaration_expected = 1146,\n _const_declarations_must_be_initialized = 1155,\n Unterminated_regular_expression_literal = 1161,\n Interface_declaration_cannot_have_implements_clause = 1176,\n Binary_digit_expected = 1177,\n Octal_digit_expected = 1178,\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\n Unterminated_Unicode_escape_sequence = 1199,\n Decorators_are_not_valid_here = 1206,\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\n Method_0_cannot_have_an_implementation_because_it_is_marked_abstract = 1245,\n A_class_may_only_extend_another_class = 1311,\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\n Duplicate_identifier_0 = 2300,\n Cannot_find_name_0 = 2304,\n Module_0_has_no_exported_member_1 = 2305,\n Generic_type_0_requires_1_type_argument_s = 2314,\n Type_0_is_not_generic = 2315,\n Type_0_is_not_assignable_to_type_1 = 2322,\n Index_signature_is_missing_in_type_0 = 2329,\n _this_cannot_be_referenced_in_current_location = 2332,\n _super_can_only_be_referenced_in_a_derived_class = 2335,\n Property_0_does_not_exist_on_type_1 = 2339,\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\n _get_and_set_accessor_must_have_the_same_type = 2380,\n Constructor_implementation_is_missing = 2390,\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\n Multiple_constructor_implementations_are_not_allowed = 2392,\n Duplicate_function_implementation = 2393,\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\n Type_0_has_no_property_1 = 2460,\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\n Index_signature_in_type_0_only_permits_reading = 2542,\n Expected_0_arguments_but_got_1 = 2554,\n Expected_at_least_0_arguments_but_got_1 = 2555,\n Expected_0_type_arguments_but_got_1 = 2558,\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\n Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration = 2673,\n Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration = 2674,\n Namespace_0_has_no_exported_member_1 = 2694,\n File_0_not_found = 6054,\n Numeric_separators_are_not_allowed_here = 6188,\n Multiple_consecutive_numeric_separators_are_not_permitted = 6189\n}\n\n/** Translates a diagnostic code to its respective string. */\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\n switch (code) {\n case 100: return \"Operation not supported.\";\n case 101: return \"Operation is unsafe.\";\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\n case 204: return \"Basic type '{0}' cannot be nullable.\";\n case 205: return \"Cannot export a mutable global.\";\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\n case 207: return \"Unmanaged classes cannot extend managed classes and vice-versa.\";\n case 208: return \"Unmanaged classes cannot implement interfaces.\";\n case 209: return \"Invalid regular expression flags.\";\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\n case 212: return \"Decorator '{0}' is not valid here.\";\n case 213: return \"Duplicate decorator.\";\n case 214: return \"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.\";\n case 215: return \"Optional parameter must have an initializer.\";\n case 216: return \"Constructor of class '{0}' must not require any arguments.\";\n case 217: return \"Function '{0}' cannot be inlined into itself.\";\n case 1002: return \"Unterminated string literal.\";\n case 1003: return \"Identifier expected.\";\n case 1005: return \"'{0}' expected.\";\n case 1006: return \"A file cannot have a reference to itself.\";\n case 1009: return \"Trailing comma not allowed.\";\n case 1012: return \"Unexpected token.\";\n case 1014: return \"A rest parameter must be last in a parameter list.\";\n case 1015: return \"Parameter cannot have question mark and initializer.\";\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\n case 1061: return \"Enum member must have initializer.\";\n case 1036: return \"Statements are not allowed in ambient contexts.\";\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\n case 1042: return \"'{0}' modifier cannot be used here.\";\n case 1047: return \"A rest parameter cannot be optional.\";\n case 1048: return \"A rest parameter cannot have an initializer.\";\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\n case 1054: return \"A 'get' accessor cannot have parameters.\";\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\n case 1094: return \"An accessor cannot have type parameters.\";\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\n case 1098: return \"Type parameter list cannot be empty.\";\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\n case 1108: return \"A 'return' statement can only be used within a function body.\";\n case 1109: return \"Expression expected.\";\n case 1110: return \"Type expected.\";\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\n case 1114: return \"Duplicate label '{0}'.\";\n case 1121: return \"Octal literals are not allowed in strict mode.\";\n case 1124: return \"Digit expected.\";\n case 1125: return \"Hexadecimal digit expected.\";\n case 1126: return \"Unexpected end of text.\";\n case 1127: return \"Invalid character.\";\n case 1130: return \"'case' or 'default' expected.\";\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\n case 1140: return \"Type argument expected.\";\n case 1141: return \"String literal expected.\";\n case 1142: return \"Line break not permitted here.\";\n case 1146: return \"Declaration expected.\";\n case 1155: return \"'const' declarations must be initialized.\";\n case 1161: return \"Unterminated regular expression literal.\";\n case 1176: return \"Interface declaration cannot have 'implements' clause.\";\n case 1177: return \"Binary digit expected.\";\n case 1178: return \"Octal digit expected.\";\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\n case 1199: return \"Unterminated Unicode escape sequence.\";\n case 1206: return \"Decorators are not valid here.\";\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\n case 1245: return \"Method '{0}' cannot have an implementation because it is marked abstract.\";\n case 1311: return \"A class may only extend another class.\";\n case 1317: return \"A parameter property cannot be declared using a rest parameter.\";\n case 2300: return \"Duplicate identifier '{0}'.\";\n case 2304: return \"Cannot find name '{0}'.\";\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\n case 2315: return \"Type '{0}' is not generic.\";\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\n case 2329: return \"Index signature is missing in type '{0}'.\";\n case 2332: return \"'this' cannot be referenced in current location.\";\n case 2335: return \"'super' can only be referenced in a derived class.\";\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\n case 2390: return \"Constructor implementation is missing.\";\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\n case 2392: return \"Multiple constructor implementations are not allowed.\";\n case 2393: return \"Duplicate function implementation.\";\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\n case 2460: return \"Type '{0}' has no property '{1}'.\";\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\n case 2554: return \"Expected {0} arguments, but got {1}.\";\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\n case 2673: return \"Constructor of class '{0}' is private and only accessible within the class declaration.\";\n case 2674: return \"Constructor of class '{0}' is protected and only accessible within the class declaration.\";\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\n case 6054: return \"File '{0}' not found.\";\n case 6188: return \"Numeric separators are not allowed here.\";\n case 6189: return \"Multiple consecutive numeric separators are not permitted.\";\n default: return \"\";\n }\n}\n","/**\r\n * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileAllocate as compileBuiltinAllocate,\r\n compileAbort as compileBuiltinAbort\r\n} from \"./builtins\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module,\r\n MemorySegment,\r\n ExpressionRef,\r\n UnaryOp,\r\n BinaryOp,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionId,\r\n FunctionTypeRef,\r\n GlobalRef,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getFunctionBody,\r\n getGetLocalIndex,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName\r\n} from \"./module\";\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n INNER_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n STATIC_DELIMITER,\r\n GETTER_PREFIX,\r\n SETTER_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Program,\r\n ClassPrototype,\r\n Class,\r\n Element,\r\n ElementKind,\r\n Enum,\r\n Field,\r\n FunctionPrototype,\r\n Function,\r\n FunctionTarget,\r\n Global,\r\n Local,\r\n Namespace,\r\n EnumValue,\r\n Property,\r\n VariableLikeElement,\r\n FlowFlags,\r\n ConstantValueKind,\r\n Flow,\r\n OperatorKind,\r\n DecoratorFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n Resolver\r\n} from \"./resolver\";\r\n\r\nimport {\r\n Token,\r\n operatorTokenToString\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n TypeNode,\r\n Source,\r\n Range,\r\n DecoratorKind,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DoStatement,\r\n EmptyStatement,\r\n EnumDeclaration,\r\n ExportStatement,\r\n ExpressionStatement,\r\n FunctionDeclaration,\r\n ForStatement,\r\n IfStatement,\r\n ImportStatement,\r\n InstanceOfExpression,\r\n InterfaceDeclaration,\r\n NamespaceDeclaration,\r\n ReturnStatement,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n VariableDeclaration,\r\n VariableStatement,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n Expression,\r\n AssertionExpression,\r\n BinaryExpression,\r\n CallExpression,\r\n CommaExpression,\r\n ElementAccessExpression,\r\n FloatLiteralExpression,\r\n FunctionExpression,\r\n IdentifierExpression,\r\n IntegerLiteralExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n NewExpression,\r\n ObjectLiteralExpression,\r\n ParenthesizedExpression,\r\n PropertyAccessExpression,\r\n TernaryExpression,\r\n ArrayLiteralExpression,\r\n StringLiteralExpression,\r\n UnaryPostfixExpression,\r\n UnaryPrefixExpression,\r\n FieldDeclaration,\r\n\r\n nodeIsConstantValue,\r\n isLastStatement,\r\n findDecorator\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n Signature,\r\n\r\n typesToNativeTypes\r\n} from \"./types\";\r\n\r\nimport {\r\n writeI32,\r\n writeI64,\r\n writeF32,\r\n writeF64\r\n} from \"./util\";\r\n\r\n/** Compilation target. */\r\nexport enum Target {\r\n /** WebAssembly with 32-bit pointers. */\r\n WASM32,\r\n /** WebAssembly with 64-bit pointers. Experimental and not supported by any runtime yet. */\r\n WASM64\r\n}\r\n\r\n/** Compiler options. */\r\nexport class Options {\r\n\r\n /** WebAssembly target. Defaults to {@link Target.WASM32}. */\r\n target: Target = Target.WASM32;\r\n /** If true, compiles everything instead of just reachable code. */\r\n noTreeShaking: bool = false;\r\n /** If true, replaces assertions with nops. */\r\n noAssert: bool = false;\r\n /** If true, imports the memory provided by the embedder. */\r\n importMemory: bool = false;\r\n /** If true, imports the function table provided by the embedder. */\r\n importTable: bool = false;\r\n /** If true, generates information necessary for source maps. */\r\n sourceMap: bool = false;\r\n /** Static memory start offset. */\r\n memoryBase: i32 = 0;\r\n /** Global aliases. */\r\n globalAliases: Map | null = null;\r\n /** Additional features to activate. */\r\n features: Feature = Feature.NONE;\r\n\r\n /** Hinted optimize level. Not applied by the compiler itself. */\r\n optimizeLevelHint: i32 = 0;\r\n /** Hinted shrink level. Not applied by the compiler itself. */\r\n shrinkLevelHint: i32 = 0;\r\n\r\n /** Tests if the target is WASM64 or, otherwise, WASM32. */\r\n get isWasm64(): bool {\r\n return this.target == Target.WASM64;\r\n }\r\n\r\n /** Gets the unsigned size type matching the target. */\r\n get usizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.usize64 : Type.usize32;\r\n }\r\n\r\n /** Gets the signed size type matching the target. */\r\n get isizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.isize64 : Type.isize32;\r\n }\r\n\r\n /** Gets the native size type matching the target. */\r\n get nativeSizeType(): NativeType {\r\n return this.target == Target.WASM64 ? NativeType.I64 : NativeType.I32;\r\n }\r\n\r\n /** Tests if a specific feature is activated. */\r\n hasFeature(feature: Feature): bool {\r\n return (this.features & feature) != 0;\r\n }\r\n}\r\n\r\n/** Indicates specific features to activate. */\r\nexport const enum Feature {\r\n /** No additional features. */\r\n NONE = 0,\r\n /** Sign extension operations. */\r\n SIGN_EXTENSION = 1 << 0, // see: https://github.com/WebAssembly/sign-extension-ops\r\n /** Mutable global imports and exports. */\r\n MUTABLE_GLOBAL = 1 << 1 // see: https://github.com/WebAssembly/mutable-global\r\n}\r\n\r\n/** Indicates the desired kind of a conversion. */\r\nexport const enum ConversionKind {\r\n /** No conversion. */\r\n NONE,\r\n /** Implicit conversion. */\r\n IMPLICIT,\r\n /** Explicit conversion. */\r\n EXPLICIT\r\n}\r\n\r\n/** Indicates the desired wrap mode of a conversion. */\r\nexport const enum WrapMode {\r\n /** No wrapping. */\r\n NONE,\r\n /** Wrap small integer values. */\r\n WRAP\r\n}\r\n\r\n/** Compiler interface. */\r\nexport class Compiler extends DiagnosticEmitter {\r\n\r\n /** Program reference. */\r\n program: Program;\r\n /** Resolver reference. */\r\n resolver: Resolver;\r\n /** Provided options. */\r\n options: Options;\r\n /** Module instance being compiled. */\r\n module: Module;\r\n /** Current function in compilation. */\r\n currentFunction: Function;\r\n /** Current outer function in compilation, if compiling a function expression. */\r\n currentOuterFunction: Function | null = null;\r\n /** Current inline function in compilation. */\r\n currentInlineFunction: Function | null = null;\r\n /** Current enum in compilation. */\r\n currentEnum: Enum | null = null;\r\n /** Current type in compilation. */\r\n currentType: Type = Type.void;\r\n /** Start function being compiled. */\r\n startFunctionInstance: Function;\r\n /** Start function statements. */\r\n startFunctionBody: ExpressionRef[];\r\n /** Counting memory offset. */\r\n memoryOffset: I64;\r\n /** Memory segments being compiled. */\r\n memorySegments: MemorySegment[] = [];\r\n /** Map of already compiled static string segments. */\r\n stringSegments: Map = new Map();\r\n /** Function table being compiled. */\r\n functionTable: Function[] = [];\r\n /** Argument count helper global. */\r\n argcVar: GlobalRef = 0;\r\n /** Argument count helper setter. */\r\n argcSet: FunctionRef = 0;\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n this.resolver = program.resolver;\r\n if (!options) options = new Options();\r\n this.options = options;\r\n this.memoryOffset = i64_new(\r\n // leave space for `null`. also functions as a sentinel for erroneous stores at offset 0.\r\n // note that Binaryen's asm.js output utilizes the first 8 bytes for reinterpretations (#1547)\r\n max(options.memoryBase, 8)\r\n );\r\n this.module = Module.create();\r\n }\r\n\r\n /** Performs compilation of the underlying {@link Program} to a {@link Module}. */\r\n compile(): Module {\r\n var options = this.options;\r\n var module = this.module;\r\n var program = this.program;\r\n\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n program.initialize(options);\r\n\r\n // set up the start function\r\n var startFunctionInstance = new Function(program.startFunction, \"start\", new Signature([], Type.void));\r\n this.startFunctionInstance = startFunctionInstance;\r\n var startFunctionBody = new Array();\r\n this.startFunctionBody = startFunctionBody;\r\n this.currentFunction = startFunctionInstance;\r\n\r\n // compile entry file(s) while traversing reachable elements\r\n var sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].isEntry) this.compileSource(sources[i]);\r\n }\r\n\r\n // compile the start function if not empty or called by main\r\n if (startFunctionBody.length || program.mainFunction !== null) {\r\n let signature = startFunctionInstance.signature;\r\n let funcRef = module.addFunction(\r\n startFunctionInstance.internalName,\r\n this.ensureFunctionType(\r\n signature.parameterTypes,\r\n signature.returnType,\r\n signature.thisType\r\n ),\r\n typesToNativeTypes(startFunctionInstance.additionalLocals),\r\n module.createBlock(null, startFunctionBody)\r\n );\r\n startFunctionInstance.finalize(module, funcRef);\r\n if (!program.mainFunction) module.setStart(funcRef);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n var memoryOffset = this.memoryOffset;\r\n memoryOffset = i64_align(memoryOffset, options.usizeType.byteSize);\r\n this.memoryOffset = memoryOffset;\r\n if (options.isWasm64) {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I64,\r\n false,\r\n module.createI64(i64_low(memoryOffset), i64_high(memoryOffset))\r\n );\r\n } else {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I32,\r\n false,\r\n module.createI32(i64_low(memoryOffset))\r\n );\r\n }\r\n\r\n // determine initial page size\r\n var numPages = this.memorySegments.length\r\n ? i64_low(i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0)))\r\n : 0;\r\n module.setMemory(\r\n numPages,\r\n this.options.isWasm64\r\n ? Module.MAX_MEMORY_WASM64\r\n : Module.MAX_MEMORY_WASM32,\r\n this.memorySegments,\r\n options.target,\r\n \"memory\"\r\n );\r\n\r\n // import memory if requested (default memory is named '0' by Binaryen)\r\n if (options.importMemory) module.addMemoryImport(\"0\", \"env\", \"memory\");\r\n\r\n // set up function table\r\n var functionTable = this.functionTable;\r\n var functionTableSize = functionTable.length;\r\n var functionTableExported = false;\r\n if (functionTableSize) {\r\n let entries = new Array(functionTableSize);\r\n for (let i = 0; i < functionTableSize; ++i) {\r\n entries[i] = functionTable[i].ref;\r\n }\r\n module.setFunctionTable(entries);\r\n module.addTableExport(\"0\", \"table\");\r\n functionTableExported = true;\r\n }\r\n\r\n // import table if requested (default table is named '0' by Binaryen)\r\n if (options.importTable) {\r\n module.addTableImport(\"0\", \"env\", \"table\");\r\n if (!functionTableExported) module.addTableExport(\"0\", \"table\");\r\n }\r\n\r\n return module;\r\n }\r\n\r\n // sources\r\n\r\n /** Compiles a source by looking it up by path first. */\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var source = this.program.lookupSourceByPath(normalizedPathWithoutExtension);\r\n if (source) this.compileSource(source);\r\n else {\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n }\r\n\r\n /** Compiles a source. */\r\n compileSource(source: Source): void {\r\n if (source.is(CommonFlags.COMPILED)) return;\r\n source.set(CommonFlags.COMPILED);\r\n\r\n // compile top-level statements\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var startFunctionInstance = this.startFunctionInstance;\r\n var startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let statement = statements[i];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileClassDeclaration(statement, [], null);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: break;\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileEnumDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(statement, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileNamespaceDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: { // global, always compiled as initializers might have side effects\r\n let variableInit = this.compileVariableStatement(statement);\r\n if (variableInit) startFunctionBody.push(variableInit);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n if ((statement).normalizedPath != null) {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n }\r\n if (noTreeShaking || isEntry) {\r\n this.compileExportStatement(statement);\r\n }\r\n break;\r\n }\r\n default: { // otherwise a top-level statement that is part of the start function's body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = startFunctionInstance;\r\n startFunctionBody.push(this.compileStatement(statement));\r\n this.currentFunction = previousFunction;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // globals\r\n\r\n compileGlobalDeclaration(declaration: VariableDeclaration): Global | null {\r\n // look up the initialized program element\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.GLOBAL);\r\n if (!this.compileGlobal(element)) return null; // reports\r\n return element;\r\n }\r\n\r\n compileGlobal(global: Global): bool {\r\n if (global.is(CommonFlags.COMPILED)) return true;\r\n global.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n var declaration = global.declaration;\r\n var initExpr: ExpressionRef = 0;\r\n\r\n if (global.type == Type.void) { // type is void if not yet resolved or not annotated\r\n if (declaration) {\r\n\r\n // resolve now if annotated\r\n if (declaration.type) {\r\n let resolvedType = this.resolver.resolveType(declaration.type); // reports\r\n if (!resolvedType) return false;\r\n if (resolvedType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.type.range\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n\r\n // infer from initializer if not annotated\r\n } else if (declaration.initializer) { // infer type using void/NONE for literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.WRAP\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.initializer.range, this.currentType.toString(), \"\"\r\n );\r\n return false;\r\n }\r\n global.type = this.currentType;\r\n\r\n // must either be annotated or have an initializer\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n return false;\r\n }\r\n } else {\r\n assert(false); // must have a declaration if 'void' (and thus resolved later on)\r\n }\r\n }\r\n\r\n // ambient builtins like 'HEAP_BASE' need to be resolved but are added explicitly\r\n if (global.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) return true;\r\n\r\n var nativeType = global.type.toNativeType();\r\n var isConstant = global.isAny(CommonFlags.CONST) || global.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n\r\n // handle imports\r\n if (global.is(CommonFlags.AMBIENT)) {\r\n\r\n // constant global\r\n if (isConstant || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n global.set(CommonFlags.MODULE_IMPORT);\r\n if (declaration) {\r\n mangleImportName(global, declaration, global.parent);\r\n } else {\r\n mangleImportName_moduleName = \"env\";\r\n mangleImportName_elementName = global.simpleName;\r\n }\r\n module.addGlobalImport(\r\n global.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n nativeType\r\n );\r\n global.set(CommonFlags.COMPILED);\r\n return true;\r\n\r\n // importing mutable globals is not supported in the MVP\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n assert(declaration).range\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n // the MVP does not yet support initializer expressions other than constant values (and\r\n // get_globals), hence such initializations must be performed in the start function for now.\r\n var initializeInStart = false;\r\n\r\n // inlined constant can be compiled as-is\r\n if (global.is(CommonFlags.INLINED)) {\r\n initExpr = this.compileInlineConstant(global, global.type, true);\r\n\r\n } else {\r\n\r\n // evaluate initializer if present\r\n if (declaration && declaration.initializer) {\r\n if (!initExpr) {\r\n initExpr = this.compileExpression(\r\n declaration.initializer,\r\n global.type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n }\r\n\r\n // check if the initializer is constant\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n\r\n // if a constant global, check if the initializer becomes constant after precompute\r\n if (isConstant) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n initializeInStart = true;\r\n }\r\n } else {\r\n initializeInStart = true;\r\n }\r\n }\r\n\r\n // initialize to zero if there's no initializer\r\n } else {\r\n initExpr = global.type.toNativeZero(module);\r\n }\r\n }\r\n\r\n var internalName = global.internalName;\r\n\r\n if (initializeInStart) { // initialize to mutable zero and set the actual value in start\r\n module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(module));\r\n this.startFunctionBody.push(module.createSetGlobal(internalName, initExpr));\r\n\r\n } else { // compile as-is\r\n\r\n if (isConstant) {\r\n let exprType = getExpressionType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(getConstValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return false;\r\n }\r\n }\r\n global.set(CommonFlags.INLINED); // inline the value from now on\r\n if (global.is(CommonFlags.MODULE_EXPORT)) {\r\n module.addGlobal(internalName, nativeType, false, initExpr);\r\n module.addGlobalExport(internalName, mangleExportName(global));\r\n } else if (declaration && declaration.isTopLevel) { // might become re-exported\r\n module.addGlobal(internalName, nativeType, false, initExpr);\r\n }\r\n\r\n } else /* mutable */ {\r\n module.addGlobal(internalName, nativeType, !isConstant, initExpr);\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // enums\r\n\r\n compileEnumDeclaration(declaration: EnumDeclaration): Enum | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(element)) return null;\r\n return element;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(CommonFlags.COMPILED)) return true;\r\n element.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n\r\n if (element.members) {\r\n for (let member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n let initInStart = false;\r\n let val = member;\r\n let valueDeclaration = val.declaration;\r\n val.set(CommonFlags.COMPILED);\r\n if (val.is(CommonFlags.INLINED)) {\r\n if (element.declaration.isTopLevelExport) {\r\n module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n false, // constant\r\n module.createI32(val.constantValue)\r\n );\r\n }\r\n } else {\r\n let initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(\r\n valueDeclaration.value,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n }\r\n } else if (previousValue == null) {\r\n initExpr = module.createI32(0);\r\n } else if (previousValue.is(CommonFlags.INLINED)) {\r\n initExpr = module.createI32(previousValue.constantValue + 1);\r\n } else {\r\n // in TypeScript this errors with TS1061, but actually we can do:\r\n initExpr = module.createBinary(BinaryOp.AddI32,\r\n module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n module.createI32(1)\r\n );\r\n if (element.is(CommonFlags.CONST)) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n if (initInStart) {\r\n module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n true, // mutable\r\n module.createI32(0)\r\n );\r\n this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr));\r\n } else {\r\n module.addGlobal(val.internalName, NativeType.I32, false, initExpr);\r\n if (getExpressionType(initExpr) == NativeType.I32) {\r\n val.constantValue = getConstValueI32(initExpr);\r\n val.set(CommonFlags.INLINED);\r\n } else {\r\n assert(false);\r\n val.constantValue = 0;\r\n }\r\n }\r\n }\r\n previousValue = val;\r\n\r\n // export values if the enum is exported\r\n if (element.is(CommonFlags.MODULE_EXPORT)) {\r\n if (member.is(CommonFlags.INLINED) || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n module.addGlobalExport(member.internalName, mangleExportName(member));\r\n } else if (valueDeclaration) {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n valueDeclaration.range\r\n );\r\n }\r\n }\r\n }\r\n }\r\n this.currentEnum = null;\r\n return true;\r\n }\r\n\r\n // functions\r\n\r\n /** Compiles a top-level function given its declaration. */\r\n compileFunctionDeclaration(\r\n declaration: FunctionDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n null, // no outer scope (is top level)\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n /** Resolves the specified type arguments prior to compiling the resulting function instance. */\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n outerScope: Flow | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!instance) return null;\r\n instance.outerScope = outerScope;\r\n if (!this.compileFunction(instance)) return null; // reports\r\n return instance;\r\n }\r\n\r\n /** Either reuses or creates the function type matching the specified signature. */\r\n private ensureFunctionType(\r\n parameterTypes: Type[] | null,\r\n returnType: Type,\r\n thisType: Type | null = null\r\n ): FunctionTypeRef {\r\n var numParameters = parameterTypes ? parameterTypes.length : 0;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n if (parameterTypes) {\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = parameterTypes[i].toNativeType();\r\n }\r\n }\r\n var resultType = returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n let name = Signature.makeSignatureString(parameterTypes, returnType, thisType);\r\n typeRef = module.addFunctionType(name, resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n assert(!instance.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN));\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n // check that modifiers are matching\r\n var declaration = instance.prototype.declaration;\r\n var body = declaration.body;\r\n if (body) {\r\n if (instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n if (!instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n declaration.name.range\r\n );\r\n }\r\n }\r\n\r\n var ref: FunctionRef;\r\n var signature = instance.signature;\r\n var typeRef = this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n if (body) {\r\n let isConstructor = instance.is(CommonFlags.CONSTRUCTOR);\r\n let returnType = instance.signature.returnType;\r\n\r\n // compile body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n let flow = instance.flow;\r\n let stmt: ExpressionRef;\r\n if (body.kind == NodeKind.EXPRESSION) { // () => expression\r\n assert(!instance.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.GET | CommonFlags.SET | CommonFlags.MAIN));\r\n assert(instance.is(CommonFlags.ARROW));\r\n stmt = this.compileExpression(\r\n (body).expression,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n flow.set(FlowFlags.RETURNS);\r\n if (!flow.canOverflow(stmt, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n flow.finalize();\r\n } else {\r\n assert(body.kind == NodeKind.BLOCK);\r\n let stmts = this.compileStatements((body).statements);\r\n if (instance.is(CommonFlags.MAIN)) {\r\n module.addGlobal(\"~started\", NativeType.I32, true, module.createI32(0));\r\n stmts.unshift(\r\n module.createIf(\r\n module.createUnary(\r\n UnaryOp.EqzI32,\r\n module.createGetGlobal(\"~started\", NativeType.I32)\r\n ),\r\n module.createBlock(null, [\r\n module.createCall(\"start\", null, NativeType.None),\r\n module.createSetGlobal(\"~started\", module.createI32(1))\r\n ])\r\n )\r\n );\r\n }\r\n flow.finalize();\r\n if (isConstructor) {\r\n let nativeSizeType = this.options.nativeSizeType;\r\n assert(instance.is(CommonFlags.INSTANCE));\r\n\r\n // implicitly return `this` if the constructor doesn't always return on its own\r\n if (!flow.is(FlowFlags.RETURNS)) {\r\n\r\n // if all branches are guaranteed to allocate, skip the final conditional allocation\r\n if (flow.is(FlowFlags.ALLOCATES)) {\r\n stmts.push(module.createGetLocal(0, nativeSizeType));\r\n\r\n // if not all branches are guaranteed to allocate, also append a conditional allocation\r\n } else {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n stmts.push(module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, declaration.name)\r\n ));\r\n }\r\n }\r\n\r\n // make sure all branches return\r\n } else if (returnType != Type.void && !flow.is(FlowFlags.RETURNS)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n }\r\n stmt = !stmts.length\r\n ? module.createNop()\r\n : stmts.length == 1\r\n ? stmts[0]\r\n : module.createBlock(null, stmts, returnType.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n\r\n // create the function\r\n ref = module.addFunction(\r\n instance.internalName,\r\n typeRef,\r\n typesToNativeTypes(instance.additionalLocals),\r\n stmt\r\n );\r\n\r\n // concrete functions cannot have an annotated external name\r\n if (instance.hasDecorator(DecoratorFlags.EXTERNAL)) {\r\n let decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n }\r\n\r\n } else {\r\n instance.set(CommonFlags.MODULE_IMPORT);\r\n mangleImportName(instance, declaration, instance.prototype.parent); // TODO: check for duplicates\r\n\r\n // create the function import\r\n ref = module.addFunctionImport(\r\n instance.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n typeRef\r\n );\r\n }\r\n\r\n // check module-level export\r\n if (instance.is(CommonFlags.MODULE_EXPORT)) {\r\n if (signature.requiredParameters < signature.parameterTypes.length) {\r\n // export the trampoline if the function takes optional parameters\r\n instance = this.ensureTrampoline(instance);\r\n this.ensureArgcSet();\r\n }\r\n module.addFunctionExport(instance.internalName, mangleExportName(instance));\r\n }\r\n\r\n instance.finalize(module, ref);\r\n return true;\r\n }\r\n\r\n // namespaces\r\n\r\n compileNamespaceDeclaration(declaration: NamespaceDeclaration): void {\r\n var members = declaration.members;\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n switch (member.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n let variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n compileNamespace(ns: Namespace): void {\r\n if (!ns.members) return;\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let element of ns.members.values()) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking || (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var module = this.module;\r\n var fileLevelExports = this.program.fileLevelExports;\r\n var members = statement.members;\r\n if (!members) return; // filespace\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n let internalExportName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n member.externalName.text\r\n );\r\n let element = fileLevelExports.get(internalExportName);\r\n if (!element) continue; // reported in Program#initialize\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (!(element).is(CommonFlags.GENERIC)) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n let functionInstance = this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n if (functionInstance) {\r\n let functionDeclaration = functionInstance.prototype.declaration;\r\n if (functionDeclaration && functionDeclaration.needsExplicitExport(member)) {\r\n module.addFunctionExport(functionInstance.internalName, member.externalName.text);\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (this.compileGlobal(element) && statement.range.source.isEntry) {\r\n let globalDeclaration = (element).declaration;\r\n if (globalDeclaration && globalDeclaration.needsExplicitExport(member)) {\r\n if ((element).is(CommonFlags.INLINED)) {\r\n module.addGlobalExport(element.internalName, member.externalName.text);\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n member.range\r\n );\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // classes\r\n\r\n compileClassDeclaration(\r\n declaration: ClassDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): void {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.compileClassUsingTypeArguments(\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n declaration\r\n );\r\n }\r\n\r\n compileClassUsingTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var instance = this.resolver.resolveClassInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode || prototype.declaration\r\n );\r\n if (!instance) return;\r\n this.compileClass(instance);\r\n }\r\n\r\n compileClass(instance: Class): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n var staticMembers = instance.prototype.members;\r\n if (staticMembers) {\r\n for (let element of staticMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [], null, null,\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], null, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], null, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n var ctorInstance = instance.constructorInstance;\r\n if (ctorInstance) this.compileFunction(ctorInstance);\r\n var instanceMembers = instance.members;\r\n if (instanceMembers) {\r\n for (let element of instanceMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n instance.contextualTypeArguments,\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n element.set(CommonFlags.COMPILED);\r\n if (!instance.is(CommonFlags.MODULE_EXPORT) || element.is(CommonFlags.PRIVATE)) break;\r\n let module = this.module;\r\n let name = (element).simpleName;\r\n let type = (element).type;\r\n let nativeType = type.toNativeType();\r\n let offset = (element).memoryOffset;\r\n let usizeType = this.options.usizeType;\r\n let nativeSizeType = this.options.nativeSizeType;\r\n\r\n // export an implicit getter: get:fieldName(this: usize) -> fieldType\r\n let getterName = mangleExportName(element, GETTER_PREFIX + name);\r\n module.addFunction(\r\n getterName,\r\n this.ensureFunctionType(null, type, usizeType),\r\n null,\r\n module.createLoad(\r\n type.byteSize,\r\n type.is(TypeFlags.SIGNED),\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(getterName, getterName);\r\n\r\n // export an implicit setter: set:fieldName(this: usize, value: fieldType) -> void\r\n if (element.is(CommonFlags.READONLY)) break;\r\n let setterName = mangleExportName(element, SETTER_PREFIX + name);\r\n module.addFunction(\r\n setterName,\r\n this.ensureFunctionType([ type ], Type.void, usizeType),\r\n null,\r\n module.createStore(\r\n type.byteSize,\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createGetLocal(1, nativeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(setterName, setterName);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], instance.contextualTypeArguments, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], instance.contextualTypeArguments, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n compileInterfaceDeclaration(\r\n declaration: InterfaceDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n // TODO\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n }\r\n\r\n // memory\r\n\r\n /** Adds a static memory segment with the specified data. */\r\n addMemorySegment(buffer: Uint8Array, alignment: i32 = 8): MemorySegment {\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n }\r\n\r\n // function table\r\n\r\n /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(CommonFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var functionTable = this.functionTable;\r\n var index = functionTable.length;\r\n if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) {\r\n // insert the trampoline if the function has optional parameters\r\n func = this.ensureTrampoline(func);\r\n }\r\n functionTable.push(func);\r\n func.functionTableIndex = index;\r\n return index;\r\n }\r\n\r\n // statements\r\n\r\n compileStatement(statement: Statement): ExpressionRef {\r\n var module = this.module;\r\n var stmt: ExpressionRef;\r\n switch (statement.kind) {\r\n case NodeKind.BLOCK: {\r\n stmt = this.compileBlockStatement(statement);\r\n break;\r\n }\r\n case NodeKind.BREAK: {\r\n stmt = this.compileBreakStatement(statement);\r\n break;\r\n }\r\n case NodeKind.CONTINUE: {\r\n stmt = this.compileContinueStatement(statement);\r\n break;\r\n }\r\n case NodeKind.DO: {\r\n stmt = this.compileDoStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EMPTY: {\r\n stmt = this.compileEmptyStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EXPRESSION: {\r\n stmt = this.compileExpressionStatement(statement);\r\n break;\r\n }\r\n case NodeKind.FOR: {\r\n stmt = this.compileForStatement(statement);\r\n break;\r\n }\r\n case NodeKind.IF: {\r\n stmt = this.compileIfStatement(statement);\r\n break;\r\n }\r\n case NodeKind.RETURN: {\r\n stmt = this.compileReturnStatement(statement);\r\n break;\r\n }\r\n case NodeKind.SWITCH: {\r\n stmt = this.compileSwitchStatement(statement);\r\n break;\r\n }\r\n case NodeKind.THROW: {\r\n stmt = this.compileThrowStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TRY: {\r\n stmt = this.compileTryStatement(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n stmt = this.compileVariableStatement(statement);\r\n if (!stmt) stmt = module.createNop();\r\n break;\r\n }\r\n case NodeKind.VOID: {\r\n stmt = this.compileVoidStatement(statement);\r\n break;\r\n }\r\n case NodeKind.WHILE: {\r\n stmt = this.compileWhileStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // type declarations must be top-level because function bodies are evaluated when\r\n // reachaable only.\r\n if (this.currentFunction == this.startFunctionInstance) {\r\n return module.createNop();\r\n }\r\n // otherwise fall-through\r\n }\r\n default: {\r\n assert(false);\r\n stmt = module.createUnreachable();\r\n }\r\n }\r\n if (this.options.sourceMap) this.addDebugLocation(stmt, statement.range);\r\n return stmt;\r\n }\r\n\r\n compileStatements(statements: Statement[]): ExpressionRef[] {\r\n var numStatements = statements.length;\r\n var stmts = new Array(numStatements);\r\n stmts.length = 0;\r\n var flow = this.currentFunction.flow;\r\n for (let i = 0; i < numStatements; ++i) {\r\n let stmt = this.compileStatement(statements[i]);\r\n switch (getExpressionId(stmt)) {\r\n case ExpressionId.Block: {\r\n if (!getBlockName(stmt)) {\r\n for (let j = 0, k = getBlockChildCount(stmt); j < k; ++j) stmts.push(getBlockChild(stmt, j));\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: stmts.push(stmt);\r\n case ExpressionId.Nop:\r\n }\r\n if (flow.isAny(FlowFlags.ANY_TERMINATING)) break;\r\n }\r\n return stmts;\r\n }\r\n\r\n compileBlockStatement(statement: BlockStatement): ExpressionRef {\r\n var statements = statement.statements;\r\n var parentFlow = this.currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n this.currentFunction.flow = flow;\r\n\r\n var stmts = this.compileStatements(statements);\r\n var stmt = stmts.length == 0\r\n ? this.module.createNop()\r\n : stmts.length == 1\r\n ? stmts[0]\r\n : this.module.createBlock(null, stmts,getExpressionType(stmts[stmts.length - 1]));\r\n\r\n this.currentFunction.flow = flow.free();\r\n parentFlow.inherit(flow);\r\n return stmt;\r\n }\r\n\r\n compileBreakStatement(statement: BreakStatement): ExpressionRef {\r\n var module = this.module;\r\n if (statement.label) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.label.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n var flow = this.currentFunction.flow;\r\n var breakLabel = flow.breakLabel;\r\n if (breakLabel == null) {\r\n this.error(\r\n DiagnosticCode.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement,\r\n statement.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n flow.set(FlowFlags.BREAKS);\r\n return module.createBreak(breakLabel);\r\n }\r\n\r\n compileContinueStatement(statement: ContinueStatement): ExpressionRef {\r\n var module = this.module;\r\n var label = statement.label;\r\n if (label) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n label.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // Check if 'continue' is allowed here\r\n var flow = this.currentFunction.flow;\r\n var continueLabel = flow.continueLabel;\r\n if (continueLabel == null) {\r\n this.error(\r\n DiagnosticCode.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement,\r\n statement.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n flow.set(FlowFlags.CONTINUES);\r\n return module.createBreak(continueLabel);\r\n }\r\n\r\n compileDoStatement(statement: DoStatement): ExpressionRef {\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n\r\n var label = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n var breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE, WrapMode.NONE),\r\n this.currentType\r\n );\r\n // TODO: check if condition is always false and if so, omit it (just a block)\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n var terminated = flow.isAny(FlowFlags.ANY_TERMINATING);\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n parentFlow.inherit(flow);\r\n\r\n return module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n terminated\r\n ? body // skip trailing continue if unnecessary\r\n : module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel, condExpr)\r\n ], NativeType.None)\r\n )\r\n ], terminated ? NativeType.Unreachable : NativeType.None);\r\n }\r\n\r\n compileEmptyStatement(statement: EmptyStatement): ExpressionRef {\r\n return this.module.createNop();\r\n }\r\n\r\n compileExpressionStatement(statement: ExpressionStatement): ExpressionRef {\r\n var expr = this.compileExpression(statement.expression, Type.void, ConversionKind.NONE, WrapMode.NONE);\r\n if (this.currentType != Type.void) {\r\n expr = this.module.createDrop(expr);\r\n this.currentType = Type.void;\r\n }\r\n return expr;\r\n }\r\n\r\n compileForStatement(statement: ForStatement): ExpressionRef {\r\n // A for statement initiates a new branch with its own scoped variables\r\n // possibly declared in its initializer, and break context.\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n var breakLabel = flow.breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n var repeatLabel = \"repeat|\" + label;\r\n\r\n // Compile in correct order\r\n var module = this.module;\r\n var initExpr = statement.initializer\r\n ? this.compileStatement(statement.initializer)\r\n : 0;\r\n var condExpr: ExpressionRef = 0;\r\n var alwaysTrue = false;\r\n if (statement.condition) {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n // check if the condition is always true\r\n let condPre = this.precomputeExpressionRef(condExpr);\r\n if (getExpressionId(condPre) == ExpressionId.Const) {\r\n assert(getExpressionType(condPre) == NativeType.I32);\r\n if (getConstValueI32(condPre) != 0) alwaysTrue = true;\r\n // TODO: could skip compilation if the condition is always false here, but beware that the\r\n // initializer could still declare new 'var's that are used later on.\r\n }\r\n // recompile to original\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n } else {\r\n // omitted condition is always true\r\n condExpr = module.createI32(1);\r\n alwaysTrue = true;\r\n }\r\n var incrExpr = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : 0;\r\n var bodyExpr = this.compileStatement(statement.statement);\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n var usesContinue = flow.isAny(FlowFlags.CONTINUES | FlowFlags.CONDITIONALLY_CONTINUES);\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n var terminated = alwaysTrue && flow.isAny(FlowFlags.ANY_TERMINATING);\r\n if (alwaysTrue) parentFlow.inherit(flow);\r\n else parentFlow.inheritConditional(flow);\r\n\r\n var breakBlock = new Array(); // outer 'break' block\r\n if (initExpr) breakBlock.push(initExpr);\r\n\r\n var repeatBlock = new Array(); // block repeating the loop\r\n if (usesContinue) {\r\n repeatBlock.push(\r\n module.createBlock(continueLabel, [ // inner 'continue' block\r\n module.createBreak(breakLabel, module.createUnary(UnaryOp.EqzI32, condExpr)),\r\n bodyExpr\r\n ], NativeType.None)\r\n );\r\n } else { // can omit the 'continue' block\r\n repeatBlock.push(\r\n module.createBreak(breakLabel, module.createUnary(UnaryOp.EqzI32, condExpr))\r\n );\r\n repeatBlock.push(bodyExpr);\r\n }\r\n if (incrExpr) repeatBlock.push(incrExpr);\r\n repeatBlock.push(\r\n module.createBreak(repeatLabel)\r\n );\r\n\r\n breakBlock.push(\r\n module.createLoop(repeatLabel,\r\n module.createBlock(null, repeatBlock, NativeType.None)\r\n )\r\n );\r\n\r\n return module.createBlock(\r\n breakLabel,\r\n breakBlock,\r\n terminated\r\n ? NativeType.Unreachable\r\n : NativeType.None\r\n );\r\n }\r\n\r\n compileIfStatement(statement: IfStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var ifTrue = statement.ifTrue;\r\n var ifFalse = statement.ifFalse;\r\n\r\n // The condition doesn't initiate a branch yet\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary branches if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileStatement(ifTrue)\r\n : ifFalse\r\n ? this.compileStatement(ifFalse)\r\n : module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Each arm initiates a branch\r\n var parentFlow = currentFunction.flow;\r\n var ifTrueFlow = parentFlow.fork();\r\n currentFunction.flow = ifTrueFlow;\r\n var ifTrueExpr = this.compileStatement(ifTrue);\r\n currentFunction.flow = ifTrueFlow.free();\r\n\r\n var ifFalseExpr: ExpressionRef = 0;\r\n if (ifFalse) {\r\n let ifFalseFlow = parentFlow.fork();\r\n currentFunction.flow = ifFalseFlow;\r\n ifFalseExpr = this.compileStatement(ifFalse);\r\n currentFunction.flow = ifFalseFlow.free();\r\n parentFlow.inheritMutual(ifTrueFlow, ifFalseFlow);\r\n } else {\r\n parentFlow.inheritConditional(ifTrueFlow);\r\n }\r\n return module.createIf(condExpr, ifTrueExpr, ifFalseExpr);\r\n }\r\n\r\n compileReturnStatement(statement: ReturnStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var expr: ExpressionRef = 0;\r\n var flow = currentFunction.flow;\r\n\r\n // Remember that this flow returns\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n if (statement.value) {\r\n let returnType = flow.returnType;\r\n if (returnType == Type.void) {\r\n this.compileExpressionRetainType(statement.value, returnType, WrapMode.NONE);\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n statement.value.range, this.currentType.toString(), returnType.toString()\r\n );\r\n this.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n expr = this.compileExpression(\r\n statement.value,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n currentFunction.is(CommonFlags.MODULE_EXPORT)\r\n ? WrapMode.WRAP\r\n : WrapMode.NONE\r\n );\r\n\r\n // Remember whether returning a properly wrapped value\r\n if (!flow.canOverflow(expr, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n }\r\n\r\n // If the last statement anyway, make it the block's return value\r\n if (isLastStatement(statement)) return expr ? expr : module.createNop();\r\n\r\n // When inlining, break to the end of the inlined function's block (no need to wrap)\r\n return flow.is(FlowFlags.INLINE_CONTEXT)\r\n ? module.createBreak(assert(flow.returnLabel), 0, expr)\r\n : module.createReturn(expr);\r\n }\r\n\r\n compileSwitchStatement(statement: SwitchStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n var cases = statement.cases;\r\n var numCases = cases.length;\r\n if (!numCases) {\r\n return this.compileExpression(statement.condition, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n\r\n // Everything within a switch uses the same break context\r\n var context = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n\r\n // introduce a local for evaluating the condition (exactly once)\r\n var tempLocal = currentFunction.getTempLocal(Type.u32, false);\r\n var tempLocalIndex = tempLocal.index;\r\n\r\n // Prepend initializer to inner block. Does not initiate a new branch, yet.\r\n var breaks = new Array(1 + numCases);\r\n breaks[0] = module.createSetLocal( // initializer\r\n tempLocalIndex,\r\n this.compileExpression(statement.condition, Type.u32, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n );\r\n\r\n // make one br_if per (possibly dynamic) labeled case (binaryen optimizes to br_table where possible)\r\n var breakIndex = 1;\r\n var defaultIndex = -1;\r\n for (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let label = case_.label;\r\n if (label) {\r\n breaks[breakIndex++] = module.createBreak(\"case\" + i.toString(10) + \"|\" + context,\r\n module.createBinary(BinaryOp.EqI32,\r\n module.createGetLocal(tempLocalIndex, NativeType.I32),\r\n this.compileExpression(label, Type.u32, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n )\r\n );\r\n } else {\r\n defaultIndex = i;\r\n }\r\n }\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n\r\n // otherwise br to default respectively out of the switch if there is no default case\r\n breaks[breakIndex] = module.createBreak((defaultIndex >= 0\r\n ? \"case\" + defaultIndex.toString(10)\r\n : \"break\"\r\n ) + \"|\" + context);\r\n\r\n // nest blocks in order\r\n var currentBlock = module.createBlock(\"case0|\" + context, breaks, NativeType.None);\r\n var alwaysReturns = true;\r\n var alwaysReturnsWrapped = true;\r\n var alwaysThrows = true;\r\n var alwaysAllocates = true;\r\n for (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let statements = case_.statements;\r\n let numStatements = statements.length;\r\n\r\n // Each switch case initiates a new branch\r\n let flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n let breakLabel = \"break|\" + context;\r\n flow.breakLabel = breakLabel;\r\n\r\n let isLast = i == numCases - 1;\r\n let nextLabel = isLast ? breakLabel : \"case\" + (i + 1).toString(10) + \"|\" + context;\r\n let stmts = new Array(1 + numStatements);\r\n stmts[0] = currentBlock;\r\n let count = 1;\r\n let terminated = false;\r\n for (let j = 0; j < numStatements; ++j) {\r\n let stmt = this.compileStatement(statements[j]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n stmts[count++] = stmt;\r\n if (flow.isAny(FlowFlags.ANY_TERMINATING)) {\r\n terminated = true;\r\n break;\r\n }\r\n }\r\n }\r\n stmts.length = count;\r\n if (terminated || isLast) {\r\n if (!flow.is(FlowFlags.RETURNS)) alwaysReturns = false;\r\n if (!flow.is(FlowFlags.RETURNS_WRAPPED)) alwaysReturnsWrapped = false;\r\n if (!flow.is(FlowFlags.THROWS)) alwaysThrows = false;\r\n if (!flow.is(FlowFlags.ALLOCATES)) alwaysAllocates = false;\r\n }\r\n\r\n // Switch back to the parent flow\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS\r\n );\r\n currentFunction.flow = flow.free();\r\n currentBlock = module.createBlock(nextLabel, stmts, NativeType.None); // must be a labeled block\r\n }\r\n currentFunction.leaveBreakContext();\r\n\r\n // If the switch has a default (guaranteed to handle any value), propagate common flags\r\n if (defaultIndex >= 0) {\r\n if (alwaysReturns) parentFlow.set(FlowFlags.RETURNS);\r\n if (alwaysReturnsWrapped) parentFlow.set(FlowFlags.RETURNS_WRAPPED);\r\n if (alwaysThrows) parentFlow.set(FlowFlags.THROWS);\r\n if (alwaysAllocates) parentFlow.set(FlowFlags.ALLOCATES);\r\n }\r\n return currentBlock;\r\n }\r\n\r\n compileThrowStatement(statement: ThrowStatement): ExpressionRef {\r\n var flow = this.currentFunction.flow;\r\n\r\n // Remember that this branch throws\r\n flow.set(FlowFlags.THROWS);\r\n\r\n // FIXME: without try-catch it is safe to assume RETURNS as well for now\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n // TODO: requires exception-handling spec.\r\n return compileBuiltinAbort(this, null, statement);\r\n }\r\n\r\n compileTryStatement(statement: TryStatement): ExpressionRef {\r\n // TODO\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n /**\r\n * Compiles a variable statement. Returns `0` if an initializer is not\r\n * necessary.\r\n */\r\n compileVariableStatement(statement: VariableStatement, isKnownGlobal: bool = false): ExpressionRef {\r\n var program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var declarations = statement.declarations;\r\n var numDeclarations = declarations.length;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n currentFunction == this.startFunctionInstance &&\r\n statement.parent && statement.parent.kind == NodeKind.SOURCE\r\n )) {\r\n // NOTE that the above condition also covers top-level variables declared with 'let', even\r\n // though such variables could also become start function locals if, and only if, not used\r\n // within any function declared in the same source, which is unknown at this point. the only\r\n // efficient way to deal with this would be to keep track of all occasions it is used and\r\n // replace these instructions afterwards, dynamically. (TOOD: what about a Binaryen pass?)\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n this.compileGlobalDeclaration(declarations[i]);\r\n }\r\n return 0;\r\n }\r\n\r\n // other variables become locals\r\n var initializers = new Array();\r\n var flow = this.currentFunction.flow;\r\n var resolver = this.resolver;\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n let declaration = declarations[i];\r\n let name = declaration.name.text;\r\n let type: Type | null = null;\r\n let initExpr: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = resolver.resolveType( // reports\r\n declaration.type,\r\n flow.contextualTypeArguments\r\n );\r\n if (!type) continue;\r\n if (declaration.initializer) {\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n } else if (declaration.initializer) { // infer type using void/NONE for proper literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.NONE\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.range, this.currentType.toString(), \"\"\r\n );\r\n continue;\r\n }\r\n type = this.currentType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n continue;\r\n }\r\n let isInlined = false;\r\n if (declaration.is(CommonFlags.CONST)) {\r\n if (initExpr) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) == ExpressionId.Const) {\r\n let local = new Local(program, name, -1, type);\r\n switch (getExpressionType(initExpr)) {\r\n case NativeType.I32: {\r\n local = local.withConstantIntegerValue(\r\n i64_new(\r\n getConstValueI32(initExpr),\r\n 0\r\n )\r\n );\r\n break;\r\n }\r\n case NativeType.I64: {\r\n local = local.withConstantIntegerValue(\r\n i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n )\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n local = local.withConstantFloatValue(getConstValueF32(initExpr));\r\n break;\r\n }\r\n case NativeType.F64: {\r\n local = local.withConstantFloatValue(getConstValueF64(initExpr));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n // Create a virtual local that doesn't actually exist in WebAssembly\r\n let scopedLocals = currentFunction.flow.scopedLocals;\r\n if (!scopedLocals) currentFunction.flow.scopedLocals = scopedLocals = new Map();\r\n else if (scopedLocals.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n scopedLocals.set(name, local);\r\n isInlined = true;\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n declaration.range\r\n );\r\n }\r\n }\r\n if (!isInlined) {\r\n let local: Local;\r\n if (\r\n declaration.isAny(CommonFlags.LET | CommonFlags.CONST) ||\r\n flow.is(FlowFlags.INLINE_CONTEXT)\r\n ) { // here: not top-level\r\n local = flow.addScopedLocal(type, name, false, declaration); // reports\r\n } else {\r\n local = currentFunction.addLocal(type, name, declaration); // reports\r\n }\r\n if (initExpr) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, initExpr));\r\n if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, !flow.canOverflow(initExpr, type));\r\n }\r\n } else if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, true); // zero\r\n }\r\n }\r\n }\r\n return initializers.length // we can unwrap these here because the\r\n ? initializers.length == 1 // source didn't tell us exactly what to do\r\n ? initializers[0]\r\n : this.module.createBlock(null, initializers, NativeType.None)\r\n : 0;\r\n }\r\n\r\n compileVoidStatement(statement: VoidStatement): ExpressionRef {\r\n return this.compileExpression(statement.expression, Type.void, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n compileWhileStatement(statement: WhileStatement): ExpressionRef {\r\n var module = this.module;\r\n\r\n // The condition does not yet initialize a branch\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary loops if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n if (!getConstValueI32(condExprPrecomp)) return module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Statements initiate a new branch with its own break context\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n var breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysTrue = false; // TODO\r\n var alwaysReturns = alwaysTrue && flow.is(FlowFlags.RETURNS);\r\n var terminated = flow.isAny(FlowFlags.ANY_TERMINATING);\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n if (alwaysTrue) parentFlow.inherit(flow);\r\n else parentFlow.inheritConditional(flow);\r\n\r\n var expr = module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n module.createIf(condExpr,\r\n terminated\r\n ? body // skip trailing continue if unnecessary\r\n : module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel)\r\n ], NativeType.None)\r\n )\r\n )\r\n ], alwaysReturns ? NativeType.Unreachable : NativeType.None);\r\n return expr;\r\n }\r\n\r\n // expressions\r\n\r\n /**\r\n * Compiles the value of an inlined constant element.\r\n * @param retainType If true, the annotated type of the constant is retained. Otherwise, the value\r\n * is precomputed according to context.\r\n */\r\n compileInlineConstant(\r\n element: VariableLikeElement,\r\n contextualType: Type,\r\n retainType: bool\r\n ): ExpressionRef {\r\n assert(element.is(CommonFlags.INLINED));\r\n var type = element.type;\r\n switch (\r\n !retainType &&\r\n type.is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n type.size < contextualType.size\r\n ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension\r\n : (this.currentType = type).kind\r\n ) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n let shift = type.computeSmallIntegerShift(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) << shift >> shift\r\n : 0\r\n ); // recognized by canOverflow\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let mask = element.type.computeSmallIntegerMask(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) & mask\r\n : 0\r\n ); // recognized by canOverflow\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n if (!element.program.options.isWasm64) {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return element.constantValueKind == ConstantValueKind.INTEGER\r\n ? this.module.createI64(\r\n i64_low(element.constantIntegerValue),\r\n i64_high(element.constantIntegerValue)\r\n )\r\n : this.module.createI64(0);\r\n }\r\n case TypeKind.F64: {\r\n if (!(element.is(CommonFlags.BUILTIN) && contextualType == Type.f32)) {\r\n return this.module.createF64((element).constantFloatValue);\r\n }\r\n // otherwise fall-through: basically precomputes f32.demote/f64 of NaN / Infinity\r\n this.currentType = Type.f32;\r\n }\r\n case TypeKind.F32: {\r\n return this.module.createF32((element).constantFloatValue);\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n\r\n compileExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n this.currentType = contextualType;\r\n\r\n var expr: ExpressionRef;\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n expr = this.compileAssertionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.BINARY: {\r\n expr = this.compileBinaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.CALL: {\r\n expr = this.compileCallExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.COMMA: {\r\n expr = this.compileCommaExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n expr = this.compileElementAccessExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.FUNCTION: {\r\n expr = this.compileFunctionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.FALSE:\r\n case NodeKind.NULL:\r\n case NodeKind.THIS:\r\n case NodeKind.SUPER:\r\n case NodeKind.TRUE: {\r\n expr = this.compileIdentifierExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.INSTANCEOF: {\r\n expr = this.compileInstanceOfExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.LITERAL: {\r\n expr = this.compileLiteralExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.NEW: {\r\n expr = this.compileNewExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PARENTHESIZED: {\r\n expr = this.compileParenthesizedExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n expr = this.compilePropertyAccessExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.TERNARY: {\r\n expr = this.compileTernaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.UNARYPOSTFIX: {\r\n expr = this.compileUnaryPostfixExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.UNARYPREFIX: {\r\n expr = this.compileUnaryPrefixExpression(expression, contextualType);\r\n break;\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n\r\n var currentType = this.currentType;\r\n if (conversionKind != ConversionKind.NONE && currentType != contextualType) {\r\n expr = this.convertExpression(expr, currentType, contextualType, conversionKind, wrapMode, expression);\r\n this.currentType = contextualType;\r\n } else if (wrapMode == WrapMode.WRAP) {\r\n expr = this.ensureSmallIntegerWrap(expr, currentType);\r\n }\r\n\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(\r\n expression: Expression,\r\n contextualType: Type,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.compileExpression(\r\n expression,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n wrapMode\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.precomputeExpressionRef(\r\n this.compileExpression(expression, contextualType, conversionKind, wrapMode)\r\n );\r\n }\r\n\r\n precomputeExpressionRef(expr: ExpressionRef): ExpressionRef {\r\n var module = this.module;\r\n var type = this.currentType;\r\n var nativeType = type.toNativeType();\r\n var funcRef = module.addTemporaryFunction(nativeType, null, expr);\r\n module.runPasses([ \"precompute\" ], funcRef);\r\n var ret = getFunctionBody(funcRef);\r\n module.removeTemporaryFunction();\r\n return ret;\r\n }\r\n\r\n convertExpression(\r\n expr: ExpressionRef,\r\n fromType: Type,\r\n toType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n assert(conversionKind != ConversionKind.NONE);\r\n var module = this.module;\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.VOID) {\r\n assert(toType.kind != TypeKind.VOID); // convertExpression should not be called with void -> void\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) return module.createDrop(expr);\r\n\r\n if (!fromType.isAssignableTo(toType)) {\r\n if (conversionKind == ConversionKind.IMPLICIT) {\r\n this.error(\r\n DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (fromType.is(TypeFlags.FLOAT)) {\r\n\r\n // float to float\r\n if (toType.is(TypeFlags.FLOAT)) {\r\n if (fromType.kind == TypeKind.F32) {\r\n\r\n // f32 to f64\r\n if (toType.kind == TypeKind.F64) {\r\n expr = module.createUnary(UnaryOp.PromoteF32, expr);\r\n }\r\n\r\n // otherwise f32 to f32\r\n\r\n // f64 to f32\r\n } else if (toType.kind == TypeKind.F32) {\r\n expr = module.createUnary(UnaryOp.DemoteF64, expr);\r\n }\r\n\r\n // otherwise f64 to f64\r\n\r\n // float to int\r\n } else if (toType.is(TypeFlags.INTEGER)) {\r\n\r\n // f32 to int\r\n if (fromType.kind == TypeKind.F32) {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU32, expr);\r\n }\r\n }\r\n\r\n // f64 to int\r\n } else {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU32, expr);\r\n }\r\n }\r\n }\r\n\r\n // float to void\r\n } else {\r\n assert(toType.flags == TypeFlags.NONE, \"void type expected\");\r\n expr = module.createDrop(expr);\r\n }\r\n\r\n // int to float\r\n } else if (fromType.is(TypeFlags.INTEGER) && toType.is(TypeFlags.FLOAT)) {\r\n\r\n // int to f32\r\n if (toType.kind == TypeKind.F32) {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF32\r\n : UnaryOp.ConvertU64ToF32,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF32\r\n : UnaryOp.ConvertU32ToF32,\r\n expr\r\n );\r\n }\r\n\r\n // int to f64\r\n } else {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF64\r\n : UnaryOp.ConvertU64ToF64,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF64\r\n : UnaryOp.ConvertU32ToF64,\r\n expr\r\n );\r\n }\r\n }\r\n\r\n // int to int\r\n } else {\r\n // i64 to ...\r\n if (fromType.is(TypeFlags.LONG)) {\r\n\r\n // i64 to i32 or smaller\r\n if (!toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits\r\n }\r\n\r\n // i32 or smaller to i64\r\n } else if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32,\r\n this.ensureSmallIntegerWrap(expr, fromType) // must clear garbage bits\r\n );\r\n wrapMode = WrapMode.NONE;\r\n\r\n // i32 to i32\r\n } else {\r\n // small i32 to ...\r\n if (fromType.is(TypeFlags.SHORT)) {\r\n // small i32 to larger i32\r\n if (fromType.size < toType.size) {\r\n expr = this.ensureSmallIntegerWrap(expr, fromType); // must clear garbage bits\r\n wrapMode = WrapMode.NONE;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.currentType = toType;\r\n return wrapMode == WrapMode.WRAP\r\n ? this.ensureSmallIntegerWrap(expr, toType)\r\n : expr;\r\n }\r\n\r\n compileAssertionExpression(expression: AssertionExpression, contextualType: Type): ExpressionRef {\r\n var toType = this.resolver.resolveType( // reports\r\n expression.toType,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!toType) return this.module.createUnreachable();\r\n return this.compileExpression(expression.expression, toType, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n private f32ModInstance: Function | null = null;\r\n private f64ModInstance: Function | null = null;\r\n private f32PowInstance: Function | null = null;\r\n private f64PowInstance: Function | null = null;\r\n\r\n compileBinaryExpression(\r\n expression: BinaryExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var left = expression.left;\r\n var right = expression.right;\r\n\r\n var leftExpr: ExpressionRef;\r\n var leftType: Type;\r\n var rightExpr: ExpressionRef;\r\n var rightType: Type;\r\n var commonType: Type | null;\r\n\r\n var expr: ExpressionRef;\r\n var compound = false;\r\n\r\n var operator = expression.operator;\r\n switch (operator) {\r\n case Token.LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.LtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.GtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.LESSTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeI64\r\n : BinaryOp.LeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.LeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeU64\r\n : BinaryOp.LeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeI64\r\n : BinaryOp.GeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.GeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeU64\r\n : BinaryOp.GeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EQUALS_EQUALS: {\r\n\r\n // NOTE that this favors correctness, in terms of emitting a binary expression, over\r\n // checking for a possible use of unary EQZ. while the most classic of all optimizations,\r\n // that's not what the source told us to do. for reference, `!left` emits unary EQZ.\r\n\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (operator == Token.EQUALS_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.EQ);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '==' with references\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.EqI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.EqI64\r\n : BinaryOp.EqI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.EqI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.EqF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.EqF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EXCLAMATION_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (operator == Token.EXCLAMATION_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '!=' with references\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.NeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.NeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.NeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.NeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EQUALS: {\r\n return this.compileAssignment(left, right, contextualType);\r\n }\r\n case Token.PLUS_EQUALS: compound = true;\r\n case Token.PLUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.ADD);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"+\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // addition might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AddI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_EQUALS: compound = true;\r\n case Token.MINUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.SUB);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"-\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // subtraction might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.SubI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MUL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"*\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.MulI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.MulI64\r\n : BinaryOp.MulI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.MulI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.MulF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.MulF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK_ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.POW);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n let instance: Function | null;\r\n\r\n // Mathf.pow if lhs is f32 (result is f32)\r\n if (this.currentType.kind == TypeKind.F32) {\r\n rightExpr = this.compileExpression(right, Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (!(instance = this.f32PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32PowInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n\r\n // Math.pow otherwise (result is f64)\r\n // TODO: should the result be converted back?\r\n } else {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n this.currentType,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(\r\n right,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n rightType = this.currentType;\r\n if (!(instance = this.f64PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64PowInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case Token.SLASH_EQUALS: compound = true;\r\n case Token.SLASH: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.DIV);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"/\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // signed div on signed small integers might overflow, e.g. -128/-1\r\n case TypeKind.I16: // ^\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.DivI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivI64\r\n : BinaryOp.DivI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.DivI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivU64\r\n : BinaryOp.DivU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.DivU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.DivF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.DivF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PERCENT_EQUALS: compound = true;\r\n case Token.PERCENT: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.REM);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"%\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemI64\r\n : BinaryOp.RemI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.RemI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemU64\r\n : BinaryOp.RemU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.RemU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let instance = this.f32ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32ModInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let instance = this.f64ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64ModInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: compound = true;\r\n case Token.LESSTHAN_LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShlI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShlI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShlI64\r\n : BinaryOp.ShlI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // must clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.ShrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrI64\r\n : BinaryOp.ShrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR_U);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // must clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: { // assumes that unsigned shr on unsigned small integers does not overflow\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n }\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.AMPERSAND_EQUALS: compound = true;\r\n case Token.AMPERSAND: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overloadd\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_AND);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"&\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AndI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AndI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AndI64\r\n : BinaryOp.AndI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.BAR_EQUALS: compound = true;\r\n case Token.BAR: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_OR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"|\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.OrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.OrI64\r\n : BinaryOp.OrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.CARET_EQUALS: compound = true;\r\n case Token.CARET: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_XOR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"^\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n\r\n // logical (no overloading)\r\n\r\n case Token.AMPERSAND_AMPERSAND: { // left && right\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = module.cloneExpression(leftExpr, true, 0)) {\r\n this.makeIsTrueish(leftExpr, this.currentType);\r\n expr = module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n rightExpr,\r\n expr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n rightExpr,\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n )\r\n );\r\n }\r\n break;\r\n }\r\n case Token.BAR_BAR: { // left || right\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = this.module.cloneExpression(leftExpr, true, 0)) {\r\n expr = this.module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n expr,\r\n rightExpr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n ),\r\n rightExpr\r\n );\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(left, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n compileUnaryOverload(\r\n operatorInstance: Function,\r\n value: Expression,\r\n valueExpr: ExpressionRef,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n thisArg = valueExpr; // can reuse the previously evaluated expr as the this value here\r\n argumentExpressions = [];\r\n } else {\r\n argumentExpressions = [ value ]; // annotated type might differ -> recompile\r\n }\r\n return this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n compileBinaryOverload(\r\n operatorInstance: Function,\r\n left: Expression,\r\n leftExpr: ExpressionRef,\r\n right: Expression,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(operatorInstance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n thisArg = leftExpr; // can reuse the previously evaluated leftExpr as the this value here\r\n argumentExpressions = [ right ];\r\n } else {\r\n argumentExpressions = [ left, right ]; // annotated type of LHS might differ -> recompile\r\n }\r\n var ret = this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n return ret;\r\n }\r\n\r\n compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef {\r\n var program = this.program;\r\n var resolver = program.resolver;\r\n var currentFunction = this.currentFunction;\r\n var target = resolver.resolveExpression(expression, currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n\r\n // to compile just the value, we need to know the target's type\r\n var targetType: Type;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field compiled as a global\r\n return this.module.createUnreachable();\r\n }\r\n assert((target).type != Type.void); // compileGlobal must guarantee this\r\n // fall-through\r\n }\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n targetType = (target).type;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (target).setterPrototype;\r\n if (setterPrototype) {\r\n let instance = this.resolver.resolveFunction(setterPrototype, null);\r\n if (!instance) return this.module.createUnreachable();\r\n assert(instance.signature.parameterTypes.length == 1); // parser must guarantee this\r\n targetType = instance.signature.parameterTypes[0];\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n if (resolver.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.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return this.compileCallExpressionBuiltin(prototype, expression, contextualType);\r\n }\r\n\r\n let instance: Function | null = null;\r\n\r\n // resolve generic call if type arguments have been provided\r\n if (typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.expression.range, prototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n instance = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n\r\n // infer generic call if type arguments have been omitted\r\n } else if (prototype.is(CommonFlags.GENERIC)) {\r\n let inferredTypes = new Map();\r\n let typeParameters = assert(prototype.declaration.typeParameters);\r\n let numTypeParameters = typeParameters.length;\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n inferredTypes.set(typeParameters[i].name.text, null);\r\n }\r\n // let numInferred = 0;\r\n let parameterTypes = prototype.declaration.signature.parameters;\r\n let numParameterTypes = parameterTypes.length;\r\n let argumentExpressions = expression.arguments;\r\n let numArguments = argumentExpressions.length;\r\n let argumentExprs = new Array(numArguments);\r\n for (let i = 0; i < numParameterTypes; ++i) {\r\n let typeNode = parameterTypes[i].type;\r\n let name = typeNode.kind == NodeKind.TYPE ? (typeNode).name.text : null;\r\n let argumentExpression = i < numArguments\r\n ? argumentExpressions[i]\r\n : prototype.declaration.signature.parameters[i].initializer;\r\n if (!argumentExpression) { // missing initializer -> too few arguments\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n expression.range, numParameterTypes.toString(10), numArguments.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (name !== null && inferredTypes.has(name)) {\r\n let inferredType = inferredTypes.get(name);\r\n if (inferredType) {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, inferredType, WrapMode.NONE);\r\n let commonType: Type | null;\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, true))) {\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, false))) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n parameterTypes[i].type.range, this.currentType.toString(), inferredType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n inferredType = commonType;\r\n } else {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, Type.i32, WrapMode.NONE);\r\n inferredType = this.currentType;\r\n // ++numInferred;\r\n }\r\n inferredTypes.set(name, inferredType);\r\n } else {\r\n let concreteType = this.resolver.resolveType(\r\n parameterTypes[i].type,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!concreteType) return module.createUnreachable();\r\n argumentExprs[i] = this.compileExpression(\r\n argumentExpression,\r\n concreteType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n let resolvedTypeArguments = new Array(numTypeParameters);\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n let inferredType = assert(inferredTypes.get(typeParameters[i].name.text)); // TODO\r\n resolvedTypeArguments[i] = inferredType;\r\n }\r\n instance = this.resolver.resolveFunction(\r\n prototype,\r\n resolvedTypeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n return this.makeCallDirect(instance, argumentExprs);\r\n // TODO: this skips inlining because inlining requires compiling its temporary locals in\r\n // the scope of the inlined flow. might need another mechanism to lock temp. locals early,\r\n // so inlining can be performed in `makeCallDirect` instead?\r\n\r\n // otherwise resolve the non-generic call as usual\r\n } else {\r\n instance = this.resolver.resolveFunction(\r\n prototype,\r\n null,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n }\r\n if (!instance) return this.module.createUnreachable();\r\n\r\n // compile 'this' expression if an instance method\r\n let thisExpr: ExpressionRef = 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n thisExpr = this.compileExpressionRetainType(\r\n assert(this.resolver.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 (instance === this.currentInlineFunction) {\r\n // skip inlining when trying to inline a function into itself and print a warning when\r\n // instead compiling the function the normal way.\r\n if (instance === this.currentFunction) {\r\n this.warning(\r\n DiagnosticCode.Function_0_cannot_be_inlined_into_itself,\r\n reportNode.range, instance.internalName\r\n );\r\n }\r\n } else {\r\n this.currentInlineFunction = instance;\r\n let ret = this.compileCallInlineUnchecked(instance, argumentExpressions, reportNode, thisArg);\r\n this.currentInlineFunction = null;\r\n return ret;\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(\"oob\", [\r\n module.createSwitch(names, \"oob\",\r\n // condition is number of provided optional arguments, so subtract required arguments\r\n minArguments\r\n ? module.createBinary(\r\n BinaryOp.SubI32,\r\n module.createGetGlobal(\"~argc\", NativeType.I32),\r\n module.createI32(minArguments)\r\n )\r\n : module.createGetGlobal(\"~argc\", NativeType.I32)\r\n )\r\n ]),\r\n module.createUnreachable()\r\n ]);\r\n for (let i = 0; i < numOptional; ++i, ++operandIndex) {\r\n let type = originalParameterTypes[minArguments + i];\r\n let declaration = originalParameterDeclarations[minArguments + i];\r\n let initializer = declaration.initializer;\r\n let initExpr: ExpressionRef;\r\n if (initializer) {\r\n initExpr = module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n )\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Optional_parameter_must_have_an_initializer,\r\n declaration.range\r\n );\r\n initExpr = module.createUnreachable();\r\n }\r\n body = module.createBlock(names[i + 1], [\r\n body,\r\n initExpr,\r\n ]);\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, type.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n assert(operandIndex == maxOperands);\r\n\r\n var funcRef = module.addFunction(\r\n trampolineName,\r\n this.ensureFunctionType(\r\n trampolineSignature.parameterTypes,\r\n trampolineSignature.returnType,\r\n trampolineSignature.thisType\r\n ),\r\n typesToNativeTypes(trampoline.additionalLocals),\r\n module.createBlock(null, [\r\n body,\r\n module.createCall(\r\n originalName,\r\n forwardedOperands,\r\n commonReturnType.toNativeType()\r\n )\r\n ], commonReturnType.toNativeType())\r\n );\r\n trampoline.finalize(module, funcRef);\r\n return trampoline;\r\n }\r\n\r\n /** Makes sure that the argument count helper global is present and returns its name. */\r\n private ensureArgcVar(): string {\r\n var internalName = \"~argc\";\r\n if (!this.argcVar) {\r\n let module = this.module;\r\n this.argcVar = module.addGlobal(\r\n internalName,\r\n NativeType.I32,\r\n true,\r\n module.createI32(0)\r\n );\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Makes sure that the argument count helper setter is present and returns its name. */\r\n private ensureArgcSet(): string {\r\n var internalName = \"~setargc\";\r\n if (!this.argcSet) {\r\n let module = this.module;\r\n this.argcSet = module.addFunction(internalName,\r\n this.ensureFunctionType([ Type.u32 ], Type.void),\r\n null,\r\n module.createSetGlobal(this.ensureArgcVar(),\r\n module.createGetLocal(0, NativeType.I32)\r\n )\r\n );\r\n module.addFunctionExport(internalName, \"_setargc\");\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Creates a direct call to the specified function. */\r\n makeCallDirect(\r\n instance: Function,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = instance.signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = instance.signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n var module = this.module;\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n var returnType = instance.signature.returnType;\r\n var isCallImport = instance.is(CommonFlags.MODULE_IMPORT);\r\n\r\n // fill up omitted arguments with their initializers, if constant, otherwise with zeroes.\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = instance.signature.parameterTypes;\r\n let parameterNodes = instance.prototype.declaration.signature.parameters;\r\n let allOptionalsAreConstant = true;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n let initializer = parameterNodes[i].initializer;\r\n if (!(initializer !== null && nodeIsConstantValue(initializer.kind))) {\r\n allOptionalsAreConstant = false;\r\n break;\r\n }\r\n }\r\n if (allOptionalsAreConstant) { // inline into the call\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(\r\n this.compileExpression(\r\n parameterNodes[i].initializer,\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n )\r\n );\r\n }\r\n } else { // otherwise fill up with zeroes and call the trampoline\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n if (!isCallImport) {\r\n let original = instance;\r\n instance = this.ensureTrampoline(instance);\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n instance.flow.flags = original.flow.flags;\r\n this.program.instancesLookup.set(instance.internalName, instance); // so canOverflow can find it\r\n let nativeReturnType = returnType.toNativeType();\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), module.createI32(numArguments)),\r\n module.createCall(instance.internalName, operands, nativeReturnType)\r\n ], nativeReturnType);\r\n }\r\n }\r\n }\r\n\r\n // otherwise just call through\r\n this.currentType = returnType;\r\n if (isCallImport) return module.createCallImport(instance.internalName, operands, returnType.toNativeType());\r\n var ret = module.createCall(instance.internalName, operands, returnType.toNativeType());\r\n return ret;\r\n }\r\n\r\n /** Compiles an indirect call using an index argument and a signature. */\r\n compileCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallIndirect(signature, indexArg, operands);\r\n }\r\n\r\n /** Creates an indirect call to the function at `indexArg` in the function table. */\r\n makeCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (signature.thisType) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n\r\n // fill up omitted arguments with zeroes\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n }\r\n\r\n var returnType = signature.returnType;\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), // might still be calling a trampoline\r\n module.createI32(numArguments)\r\n ),\r\n module.createCallIndirect(indexArg, operands, signature.toSignatureString())\r\n ], returnType.toNativeType()); // not necessarily wrapped\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var numExpressions = expressions.length;\r\n var exprs = new Array(numExpressions--);\r\n for (let i = 0; i < numExpressions; ++i) {\r\n exprs[i] = this.compileExpression(\r\n expressions[i],\r\n Type.void, // drop all\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n exprs[numExpressions] = this.compileExpression(\r\n expressions[numExpressions],\r\n contextualType, // except last\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.module.createBlock(null, exprs, this.currentType.toNativeType());\r\n }\r\n\r\n compileElementAccessExpression(expression: ElementAccessExpression, contextualType: Type): ExpressionRef {\r\n var target = this.resolver.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n switch (target.kind) {\r\n case ElementKind.CLASS: {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n let thisArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.compileCallDirect(indexedGet, [\r\n expression.elementExpression\r\n ], expression, thisArg);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var name = declaration.name;\r\n var simpleName = (name.text.length\r\n ? name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var currentFunction = this.currentFunction;\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n currentFunction.internalName + INNER_DELIMITER + simpleName,\r\n declaration,\r\n null,\r\n DecoratorFlags.NONE\r\n );\r\n var flow = currentFunction.flow;\r\n var instance = this.compileFunctionUsingTypeArguments(\r\n prototype,\r\n [],\r\n flow.contextualTypeArguments,\r\n flow,\r\n declaration\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = instance.signature.type; // TODO: get cached type?\r\n // NOTE that, in order to make this work in every case, the function must be represented by a\r\n // value, so we add it and rely on the optimizer to figure out where it can be called directly.\r\n var index = this.ensureFunctionTableEntry(instance); // reports\r\n return index < 0\r\n ? this.module.createUnreachable()\r\n : this.module.createI32(index);\r\n }\r\n\r\n /**\r\n * Compiles an identifier in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compileIdentifierExpression(\r\n expression: IdentifierExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // check special keywords first\r\n switch (expression.kind) {\r\n case NodeKind.NULL: {\r\n let options = this.options;\r\n if (!contextualType.classReference) {\r\n this.currentType = options.usizeType;\r\n }\r\n return options.isWasm64\r\n ? module.createI64(0)\r\n : module.createI32(0);\r\n }\r\n case NodeKind.TRUE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(1);\r\n }\r\n case NodeKind.FALSE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\r\n case NodeKind.THIS: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n this.currentType = scopedThis.type;\r\n return module.createGetLocal(scopedThis.index, scopedThis.type.toNativeType());\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisType = (parent).type;\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n if (!flow.is(FlowFlags.ALLOCATES)) {\r\n flow.set(FlowFlags.ALLOCATES);\r\n // must be conditional because `this` could have been provided by a derived class\r\n this.currentType = thisType;\r\n return module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, expression)\r\n );\r\n }\r\n }\r\n this.currentType = thisType;\r\n return module.createGetLocal(0, thisType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n case NodeKind.SUPER: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n let scopedThisClass = assert(scopedThis.type.classReference);\r\n let base = scopedThisClass.base;\r\n if (base) {\r\n this.currentType = base.type;\r\n return module.createGetLocal(scopedThis.index, base.type.toNativeType());\r\n }\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let base = (parent).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return module.createGetLocal(0, superType.toNativeType());\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var target = this.resolver.resolveIdentifier( // reports\r\n expression,\r\n this.currentEnum || currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n let localType = (target).type;\r\n let localIndex = (target).index;\r\n assert(localIndex >= 0);\r\n this.currentType = localType;\r\n return this.module.createGetLocal(localIndex, localType.toNativeType());\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return this.module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum\r\n if (!target.is(CommonFlags.COMPILED)) {\r\n this.error(\r\n DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,\r\n expression.range\r\n );\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.module.createI32((target).constantValue);\r\n }\r\n return this.module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let instance = this.resolver.resolveFunction(\r\n target,\r\n null,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!(instance && this.compileFunction(instance))) return module.createUnreachable();\r\n let index = this.ensureFunctionTableEntry(instance);\r\n this.currentType = instance.signature.type;\r\n return this.module.createI32(index);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileInstanceOfExpression(\r\n expression: InstanceOfExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n // NOTE that this differs from TypeScript in that the rhs is a type, not an expression. at the\r\n // time of implementation, this seemed more useful because dynamic rhs expressions are not\r\n // possible in AS anyway.\r\n var expr = this.compileExpressionRetainType(expression.expression, this.options.usizeType, WrapMode.NONE);\r\n var type = this.currentType;\r\n var isType = this.resolver.resolveType(expression.isType);\r\n this.currentType = Type.bool;\r\n if (!isType) return module.createUnreachable();\r\n return type.is(TypeFlags.NULLABLE) && !isType.is(TypeFlags.NULLABLE)\r\n ? type.nonNullableType.isAssignableTo(isType)\r\n ? module.createBinary( // not precomputeable\r\n type.is(TypeFlags.LONG)\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n expr,\r\n type.toNativeZero(module)\r\n )\r\n : module.createI32(0)\r\n : module.createI32(type.isAssignableTo(isType, true) ? 1 : 0);\r\n }\r\n\r\n compileLiteralExpression(\r\n expression: LiteralExpression,\r\n contextualType: Type,\r\n implicitNegate: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n switch (expression.literalKind) {\r\n case LiteralKind.ARRAY: {\r\n assert(!implicitNegate);\r\n let classType = contextualType.classReference;\r\n if (\r\n classType &&\r\n classType.prototype == this.program.arrayPrototype\r\n ) {\r\n return this.compileArrayLiteral(\r\n assert(classType.typeArguments)[0],\r\n (expression).elementExpressions,\r\n expression\r\n );\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n case LiteralKind.FLOAT: {\r\n let floatValue = (expression).value;\r\n if (implicitNegate) {\r\n floatValue = -floatValue;\r\n }\r\n if (contextualType == Type.f32) {\r\n return module.createF32(floatValue);\r\n }\r\n this.currentType = Type.f64;\r\n return module.createF64(floatValue);\r\n }\r\n case LiteralKind.INTEGER: {\r\n let intValue = (expression).value;\r\n if (implicitNegate) {\r\n intValue = i64_sub(\r\n i64_new(0),\r\n intValue\r\n );\r\n }\r\n switch (contextualType.kind) {\r\n\r\n // compile to contextualType if matching\r\n\r\n case TypeKind.I8: {\r\n if (i64_is_i8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (i64_is_u8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (i64_is_i16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (i64_is_u16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (i64_is_bool(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.USIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.F32: {\r\n if (i64_is_f32(intValue)) return module.createF32(i64_to_f32(intValue));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n if (i64_is_f64(intValue)) return module.createF64(i64_to_f64(intValue));\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n break; // compiles to best fitting type below, being dropped\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise compile to best fitting native type\r\n\r\n if (i64_is_i32(intValue)) {\r\n this.currentType = Type.i32;\r\n return module.createI32(i64_low(intValue));\r\n } else if (i64_is_u32(intValue)) {\r\n this.currentType = Type.u32;\r\n return module.createI32(i64_low(intValue));\r\n } else {\r\n this.currentType = Type.i64;\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n }\r\n case LiteralKind.STRING: {\r\n assert(!implicitNegate);\r\n return this.compileStaticString((expression).value);\r\n }\r\n case LiteralKind.OBJECT: {\r\n assert(!implicitNegate);\r\n return this.compileObjectLiteral(expression, contextualType);\r\n }\r\n // case LiteralKind.REGEXP:\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n\r\n compileStaticString(stringValue: string): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var stringSegments = this.stringSegments;\r\n\r\n var stringSegment: MemorySegment | null = stringSegments.get(stringValue);\r\n if (!stringSegment) {\r\n let stringLength = stringValue.length;\r\n let stringBuffer = new Uint8Array(4 + stringLength * 2);\r\n stringBuffer[0] = stringLength & 0xff;\r\n stringBuffer[1] = (stringLength >>> 8) & 0xff;\r\n stringBuffer[2] = (stringLength >>> 16) & 0xff;\r\n stringBuffer[3] = (stringLength >>> 24) & 0xff;\r\n for (let i = 0; i < stringLength; ++i) {\r\n stringBuffer[4 + i * 2] = stringValue.charCodeAt(i) & 0xff;\r\n stringBuffer[5 + i * 2] = (stringValue.charCodeAt(i) >>> 8) & 0xff;\r\n }\r\n stringSegment = this.addMemorySegment(stringBuffer, options.usizeType.byteSize);\r\n stringSegments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n var stringType = this.program.typesLookup.get(\"string\");\r\n this.currentType = stringType ? stringType : options.usizeType;\r\n if (options.isWasm64) {\r\n return module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n }\r\n assert(i64_is_i32(stringOffset));\r\n return module.createI32(i64_low(stringOffset));\r\n }\r\n\r\n compileArrayLiteral(elementType: Type, expressions: (Expression | null)[], reportNode: Node): ExpressionRef {\r\n var isStatic = true;\r\n var module = this.module;\r\n\r\n // obtain the array type\r\n var arrayPrototype = assert(this.program.arrayPrototype);\r\n if (!arrayPrototype || arrayPrototype.kind != ElementKind.CLASS_PROTOTYPE) return module.createUnreachable();\r\n var arrayInstance = this.resolver.resolveClass(arrayPrototype, [ elementType ]);\r\n if (!arrayInstance) return module.createUnreachable();\r\n var arrayType = arrayInstance.type;\r\n\r\n var elementCount = expressions.length;\r\n if (elementCount) { // non-empty static or dynamic\r\n let nativeElementType = elementType.toNativeType();\r\n let values: usize;\r\n let byteLength: usize;\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n values = changetype(new Int32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n values = changetype(new Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n values = changetype(new Float32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n values = changetype(new Float64Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // precompute value expressions\r\n let exprs = new Array(elementCount);\r\n let expr: BinaryenExpressionRef;\r\n for (let i = 0; i < elementCount; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : elementType.toNativeZero(module);\r\n if (isStatic) {\r\n expr = this.precomputeExpressionRef(exprs[i]);\r\n if (getExpressionId(expr) == ExpressionId.Const) {\r\n assert(getExpressionType(expr) == nativeElementType);\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n changetype(values)[i] = getConstValueI32(expr);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n changetype(values)[i] = i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n changetype(values)[i] = getConstValueF32(expr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n changetype(values)[i] = getConstValueF64(expr);\r\n break;\r\n }\r\n default: assert(false); // checked above\r\n }\r\n } else {\r\n // TODO: emit a warning if declared 'const'\r\n // if (isConst) {\r\n // this.warn(\r\n // DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n // reportNode.range\r\n // );\r\n // }\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n let usizeTypeSize = this.options.usizeType.byteSize;\r\n if (isStatic) { // non-empty, all elements can be precomputed\r\n\r\n // Create a combined static memory segment composed of:\r\n // Array struct + ArrayBuffer struct + aligned ArrayBuffer data\r\n\r\n let arraySize = usizeTypeSize + 4; // buffer_ & length_\r\n let bufferHeaderSize = (4 + 7) & ~7; // aligned byteLength (8)\r\n let bufferTotalSize = 1 << (32 - clz(byteLength + bufferHeaderSize - 1)); // see internals\r\n let data = new Uint8Array(arraySize + bufferTotalSize);\r\n let segment = this.addMemorySegment(data);\r\n let offset = 0;\r\n\r\n // write Array struct\r\n if (usizeTypeSize == 8) {\r\n writeI64(i64_add(segment.offset, i64_new(arraySize)), data, offset); // buffer_ @ segment[arSize]\r\n offset += 8;\r\n } else {\r\n assert(i64_high(segment.offset) == 0);\r\n writeI32(i64_low(segment.offset) + arraySize, data, offset); // buffer_ @ segment[arSize]\r\n offset += 4;\r\n }\r\n writeI32(elementCount, data, offset); // length_\r\n offset += 4;\r\n assert(offset == arraySize);\r\n\r\n // write ArrayBuffer struct\r\n writeI32(byteLength, data, offset);\r\n offset += bufferHeaderSize; // incl. alignment\r\n\r\n // write ArrayBuffer data\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.I64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n case NativeType.F32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.F64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n assert(offset <= arraySize + bufferTotalSize);\r\n\r\n this.currentType = arrayType;\r\n return usizeTypeSize == 8\r\n ? module.createI64(\r\n i64_low(segment.offset),\r\n i64_high(segment.offset)\r\n )\r\n : module.createI32(\r\n i64_low(segment.offset)\r\n );\r\n\r\n } else { // non-empty, some elements can't be precomputed\r\n\r\n this.currentType = arrayType;\r\n let setter = arrayInstance.lookupOverload(OperatorKind.INDEXED_SET, true);\r\n if (!setter) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n reportNode.range, arrayInstance.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let nativeArrayType = arrayType.toNativeType();\r\n let currentFunction = this.currentFunction;\r\n let tempLocal = currentFunction.getTempLocal(arrayType, false);\r\n let stmts = new Array(2 + elementCount);\r\n let index = 0;\r\n stmts[index++] = module.createSetLocal(tempLocal.index,\r\n this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(elementCount)\r\n ])\r\n );\r\n for (let i = 0; i < elementCount; ++i) {\r\n stmts[index++] = this.makeCallDirect(setter, [\r\n module.createGetLocal(tempLocal.index, nativeArrayType), // this\r\n module.createI32(i),\r\n exprs[i]\r\n ]);\r\n }\r\n assert(index + 1 == stmts.length);\r\n stmts[index] = module.createGetLocal(tempLocal.index, nativeArrayType);\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = arrayType;\r\n return module.createBlock(null, stmts, nativeArrayType);\r\n }\r\n\r\n } else { // empty, TBD: cache this somehow?\r\n this.currentType = arrayType;\r\n return this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(0)\r\n ]);\r\n }\r\n }\r\n\r\n compileObjectLiteral(expression: ObjectLiteralExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n\r\n // contextual type must be a class\r\n var classReference = contextualType.classReference;\r\n if (!classReference || classReference.is(CommonFlags.ABSTRACT)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n expression.range, \"\", contextualType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // if present, check that the constructor is compatible with object literals\r\n var ctor = classReference.constructorInstance;\r\n if (ctor) {\r\n if (ctor.signature.requiredParameters) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_must_not_require_any_arguments,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (ctor.is(CommonFlags.PRIVATE)) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (ctor.is(CommonFlags.PROTECTED)) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // check and compile field values\r\n var names = expression.names;\r\n var numNames = names.length;\r\n var values = expression.values;\r\n var members = classReference.members;\r\n var hasErrors = false;\r\n var exprs = new Array(numNames + 2);\r\n var tempLocal = this.currentFunction.getTempLocal(this.options.usizeType);\r\n assert(numNames == values.length);\r\n for (let i = 0, k = numNames; i < k; ++i) {\r\n let member = members ? members.get(names[i].text) : null;\r\n if (!member || member.kind != ElementKind.FIELD) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n names[i].range, names[i].text, classReference.toString()\r\n );\r\n hasErrors = true;\r\n continue;\r\n }\r\n let type = (member).type;\r\n exprs[i + 1] = this.module.createStore( // TODO: handle setters as well\r\n type.byteSize,\r\n this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType),\r\n this.compileExpression(values[i], (member).type, ConversionKind.IMPLICIT, WrapMode.NONE),\r\n type.toNativeType(),\r\n (member).memoryOffset\r\n );\r\n }\r\n this.currentType = classReference.type.nonNullableType;\r\n if (hasErrors) return module.createUnreachable();\r\n\r\n // allocate a new instance first and assign 'this' to the temp. local\r\n exprs[0] = module.createSetLocal(\r\n tempLocal.index,\r\n compileBuiltinAllocate(this, classReference, expression)\r\n );\r\n\r\n // once all field values have been set, return 'this'\r\n exprs[exprs.length - 1] = module.createGetLocal(tempLocal.index, this.options.nativeSizeType);\r\n\r\n return module.createBlock(null, exprs, this.options.nativeSizeType);\r\n }\r\n\r\n compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var currentFunction = this.currentFunction;\r\n\r\n // obtain the class being instantiated\r\n var target = this.resolver.resolveExpression( // reports\r\n expression.expression,\r\n currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n if (target.kind != ElementKind.CLASS_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature,\r\n expression.expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n var classPrototype = target;\r\n var classInstance: Class | null = null;\r\n var typeArguments = expression.typeArguments;\r\n var classReference: Class | null;\r\n if (\r\n !typeArguments &&\r\n (classReference = contextualType.classReference) !== null &&\r\n classReference.is(CommonFlags.GENERIC)\r\n ) {\r\n classInstance = this.resolver.resolveClass(\r\n classPrototype,\r\n classReference.typeArguments,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n } else {\r\n classInstance = this.resolver.resolveClassInclTypeArguments(\r\n classPrototype,\r\n typeArguments,\r\n currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n }\r\n if (!classInstance) return module.createUnreachable();\r\n\r\n var expr: ExpressionRef;\r\n\r\n // traverse to the first matching constructor\r\n var currentClassInstance: Class | null = classInstance;\r\n var constructorInstance = classInstance.constructorInstance;\r\n while (!constructorInstance && (currentClassInstance = classInstance.base)) {\r\n constructorInstance = currentClassInstance.constructorInstance;\r\n }\r\n\r\n // if a constructor is present, call it with a zero `this`\r\n if (constructorInstance) {\r\n expr = this.compileCallDirect(constructorInstance, expression.arguments, expression,\r\n options.usizeType.toNativeZero(module)\r\n );\r\n\r\n // otherwise simply allocate a new instance and initialize its fields\r\n } else {\r\n expr = this.makeAllocate(classInstance, expression);\r\n }\r\n\r\n this.currentType = classInstance.type;\r\n return expr;\r\n }\r\n\r\n compileParenthesizedExpression(\r\n expression: ParenthesizedExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n // does not change types, just order\r\n return this.compileExpression(\r\n expression.expression,\r\n contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n /**\r\n * Compiles a property access in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compilePropertyAccessExpression(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n var target = this.resolver.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: { // static property\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // enum value\r\n let parent = (target).parent;\r\n assert(parent !== null && parent.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(parent)) {\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return module.createI32((target).constantValue);\r\n }\r\n return module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FIELD: { // instance field\r\n let thisExpression = assert(this.resolver.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.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE)\r\n : this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n var ifThenFlow = parentFlow.fork();\r\n currentFunction.flow = ifThenFlow;\r\n var ifThenExpr = this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE);\r\n var ifThenType = this.currentType;\r\n ifThenFlow.free();\r\n\r\n var ifElseFlow = parentFlow.fork();\r\n currentFunction.flow = ifElseFlow;\r\n var ifElseExpr = this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n var ifElseType = this.currentType;\r\n currentFunction.flow = ifElseFlow.free();\r\n\r\n parentFlow.inheritMutual(ifThenFlow, ifElseFlow);\r\n\r\n var commonType = Type.commonCompatible(ifThenType, ifElseType, false);\r\n if (!commonType) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n expression.range, ifThenType.toString(), ifElseType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n ifThenExpr = this.convertExpression(\r\n ifThenExpr,\r\n ifThenType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifThen\r\n );\r\n ifElseExpr = this.convertExpression(\r\n ifElseExpr,\r\n ifElseType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifElse\r\n );\r\n this.currentType = commonType;\r\n return this.module.createIf(condExpr, ifThenExpr, ifElseExpr);\r\n }\r\n\r\n compileUnaryPostfixExpression(expression: UnaryPostfixExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // make a getter for the expression (also obtains the type)\r\n var getValue = this.compileExpression( // reports\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n // shortcut if compiling the getter already failed\r\n if (getExpressionId(getValue) == ExpressionId.Unreachable) return getValue;\r\n var currentType = this.currentType;\r\n\r\n var op: BinaryOp;\r\n var nativeType: NativeType;\r\n var nativeOne: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS_PLUS: {\r\n\r\n // TODO: check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n op = BinaryOp.AddI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.AddI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.AddF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.AddF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n\r\n // TODO: check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n op = BinaryOp.SubI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.SubI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.SubF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.SubF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // simplify if dropped anyway\r\n if (contextualType == Type.void) {\r\n return this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n getValue,\r\n nativeOne\r\n ),\r\n false\r\n );\r\n }\r\n\r\n // otherwise use a temp local for the intermediate value (always possibly overflows)\r\n var tempLocal = currentFunction.getTempLocal(currentType, false);\r\n var setValue = this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n this.module.createGetLocal(tempLocal.index, nativeType),\r\n nativeOne\r\n ),\r\n false\r\n );\r\n this.currentType = assert(tempLocal).type;\r\n currentFunction.freeTempLocal(tempLocal);\r\n\r\n var localIndex = (tempLocal).index;\r\n return module.createBlock(null, [\r\n module.createSetLocal(localIndex, getValue),\r\n setValue,\r\n module.createGetLocal(localIndex, nativeType)\r\n ], nativeType); // result of 'x++' / 'x--' might overflow\r\n }\r\n\r\n compileUnaryPrefixExpression(\r\n expression: UnaryPrefixExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PLUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // nop\r\n break;\r\n }\r\n case Token.MINUS: {\r\n if (expression.operand.kind == NodeKind.LITERAL && (\r\n (expression.operand).literalKind == LiteralKind.INTEGER ||\r\n (expression.operand).literalKind == LiteralKind.FLOAT\r\n )) {\r\n // implicitly negate integer and float literals. also enables proper checking of literal ranges.\r\n expr = this.compileLiteralExpression(expression.operand, contextualType, true);\r\n // compileExpression normally does this:\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n break;\r\n }\r\n\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MINUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, module.createI32(0), expr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n this.currentType.toNativeZero(module),\r\n expr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, module.createI64(0), expr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createUnary(UnaryOp.NegF32, expr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createUnary(UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PLUS_PLUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_INC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_DEC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, expr, module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.EXCLAMATION: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n // allow '!' for references even without an overload\r\n }\r\n\r\n expr = this.makeIsFalseish(expr, this.currentType);\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.TILDE: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n } else {\r\n expr = this.convertExpression(\r\n expr,\r\n this.currentType, this.currentType.intType,\r\n ConversionKind.IMPLICIT, WrapMode.NONE,\r\n expression.operand\r\n );\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.XorI32, expr, module.createI32(-1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n expr,\r\n this.currentType.toNativeNegOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, expr, module.createI64(-1, -1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.TYPEOF: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.operand, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n /** Makes sure that a 32-bit integer value is wrapped to a valid value of the specified type. */\r\n ensureSmallIntegerWrap(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n var flow = this.currentFunction.flow;\r\n switch (type.kind) {\r\n case TypeKind.I8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI8ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(24)\r\n ),\r\n module.createI32(24)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI16ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(16)\r\n ),\r\n module.createI32(16)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'false' in a broader sense. */\r\n makeIsFalseish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return module.createUnary(UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createUnary(UnaryOp.EqzI64, expr);\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.EqF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.EqF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(1);\r\n }\r\n }\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'true' in a broader sense. */\r\n makeIsTrueish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return expr;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return type.size == 64\r\n ? module.createBinary(BinaryOp.NeI64, expr, module.createI64(0))\r\n : expr;\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.NeF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.NeF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(0);\r\n }\r\n }\r\n }\r\n\r\n /** Makes an allocation expression for an instance of the specified class. */\r\n makeAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n\r\n // allocate the necessary memory and tee the pointer to a temp. local for reuse\r\n var tempLocal = currentFunction.getTempLocal(classInstance.type, false);\r\n var initializers = new Array();\r\n initializers.push(\r\n module.createSetLocal(tempLocal.index,\r\n compileBuiltinAllocate(this, classInstance, reportNode)\r\n )\r\n );\r\n\r\n // apply field initializers\r\n if (classInstance.members) {\r\n for (let member of classInstance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n let field = member;\r\n let fieldType = field.type;\r\n let nativeFieldType = fieldType.toNativeType();\r\n let fieldDeclaration = field.prototype.declaration;\r\n assert(!field.isAny(CommonFlags.CONST));\r\n if (fieldDeclaration.initializer) { // use initializer\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n this.compileExpression( // reports\r\n fieldDeclaration.initializer,\r\n fieldType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n ),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n } else { // initialize with zero\r\n // TODO: might be unnecessary if the ctor initializes the field\r\n let parameterIndex = (field.prototype.declaration).parameterIndex;\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n parameterIndex >= 0 // initialized via parameter\r\n ? module.createGetLocal(1 + parameterIndex, nativeFieldType)\r\n : fieldType.toNativeZero(module),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // return `this`\r\n initializers.push(\r\n module.createGetLocal(tempLocal.index, nativeSizeType)\r\n );\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = classInstance.type;\r\n return module.createBlock(null, initializers, nativeSizeType);\r\n }\r\n\r\n /** Makes a conditional allocation expression inside of the constructor of the specified class. */\r\n makeConditionalAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n // requires that `this` is the first local\r\n var module = this.module;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n this.currentType = classInstance.type;\r\n return module.createIf(\r\n nativeSizeType == NativeType.I64\r\n ? module.createBinary(\r\n BinaryOp.NeI64,\r\n module.createGetLocal(0, NativeType.I64),\r\n module.createI64(0)\r\n )\r\n : module.createGetLocal(0, NativeType.I32),\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createTeeLocal(0,\r\n this.makeAllocate(classInstance, reportNode)\r\n )\r\n );\r\n }\r\n\r\n /** Adds the debug location of the specified expression at the specified range to the source map. */\r\n addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n var currentFunction = this.currentFunction;\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n range.debugInfoRef = expr;\r\n currentFunction.debugLocations.push(range);\r\n }\r\n}\r\n\r\n// helpers\r\n\r\nfunction mangleExportName(element: Element, simpleName: string = element.simpleName): string {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION: {\r\n let parent = (element).parent || (element).prototype.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName\r\n : simpleName;\r\n }\r\n case ElementKind.FIELD: {\r\n let parent = assert((element).parent);\r\n return mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName;\r\n }\r\n case ElementKind.ENUMVALUE: {\r\n let parent = assert((element).parent);\r\n return mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName;\r\n }\r\n case ElementKind.CLASS: {\r\n let parent = (element).prototype.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + STATIC_DELIMITER\r\n + simpleName\r\n : simpleName;\r\n }\r\n default: {\r\n let parent = element.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + STATIC_DELIMITER\r\n + simpleName\r\n : simpleName;\r\n }\r\n }\r\n}\r\n\r\nfunction mangleImportName(\r\n element: Element,\r\n declaration: DeclarationStatement,\r\n parentElement: Element | null = null\r\n): void {\r\n mangleImportName_moduleName = parentElement ? parentElement.simpleName : declaration.range.source.simplePath;\r\n mangleImportName_elementName = element.simpleName;\r\n\r\n if (!element.hasDecorator(DecoratorFlags.EXTERNAL)) return;\r\n\r\n var program = element.program;\r\n var decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n var args = decorator.arguments;\r\n if (args && args.length) {\r\n let arg = args[0];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length >= 2) {\r\n arg = args[1];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_moduleName = mangleImportName_elementName;\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length > 2) {\r\n program.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"2\", args.length.toString()\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n decorator.range, \"1\", \"0\"\r\n );\r\n }\r\n}\r\n\r\nvar mangleImportName_moduleName: string;\r\nvar mangleImportName_elementName: string;\r\n","/**\r\n * A TypeScript parser for the AssemblyScript subset.\r\n * @module parser\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n LIBRARY_PREFIX,\r\n PATH_DELIMITER\r\n} from \"./common\";\r\n\r\nimport {\r\n Program\r\n} from \"./program\";\r\n\r\nimport {\r\n Tokenizer,\r\n Token,\r\n Range,\r\n CommentHandler,\r\n IdentifierHandling\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n normalizePath\r\n} from \"./util\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n SourceKind,\r\n CommonTypeNode,\r\n TypeNode,\r\n SignatureNode,\r\n\r\n Expression,\r\n AssertionKind,\r\n CallExpression,\r\n ClassExpression,\r\n FunctionExpression,\r\n IdentifierExpression,\r\n StringLiteralExpression,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DecoratorNode,\r\n DoStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportImportStatement,\r\n ExportMember,\r\n ExportStatement,\r\n ExpressionStatement,\r\n ForStatement,\r\n FunctionDeclaration,\r\n IfStatement,\r\n ImportDeclaration,\r\n ImportStatement,\r\n NamespaceDeclaration,\r\n ParameterNode,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameterNode,\r\n VariableStatement,\r\n VariableDeclaration,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n mangleInternalPath,\r\n nodeIsCallable,\r\n nodeIsGenericCallable\r\n} from \"./ast\";\r\n\r\nconst builtinsFile = LIBRARY_PREFIX + \"builtins.ts\";\r\n\r\n/** Parser interface. */\r\nexport class Parser extends DiagnosticEmitter {\r\n\r\n /** Program being created. */\r\n program: Program;\r\n /** Source file names to be requested next. */\r\n backlog: string[] = new Array();\r\n /** Source file names already seen, that is processed or backlogged. */\r\n seenlog: Set = new Set();\r\n /** Source file names already completely processed. */\r\n donelog: Set = new Set();\r\n /** Optional handler to intercept comments while tokenizing. */\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new parser. */\r\n constructor() {\r\n super();\r\n this.program = new Program(this.diagnostics);\r\n }\r\n\r\n /** Parses a file and adds its definitions to the program. */\r\n parseFile(\r\n text: string,\r\n path: string,\r\n isEntry: bool\r\n ): void {\r\n var normalizedPath = normalizePath(path);\r\n var internalPath = mangleInternalPath(normalizedPath);\r\n\r\n // check if already processed\r\n if (this.donelog.has(internalPath)) return;\r\n this.donelog.add(internalPath); // do not parse again\r\n this.seenlog.add(internalPath); // do not request again\r\n\r\n // create the source element\r\n var source = new Source(\r\n normalizedPath,\r\n text,\r\n isEntry\r\n ? SourceKind.ENTRY\r\n : path.startsWith(LIBRARY_PREFIX) && path.indexOf(PATH_DELIMITER, LIBRARY_PREFIX.length) < 0\r\n ? SourceKind.LIBRARY\r\n : SourceKind.DEFAULT\r\n );\r\n var program = this.program;\r\n program.sources.push(source);\r\n\r\n // mark the special builtins library file\r\n if (source.normalizedPath == builtinsFile) {\r\n source.set(CommonFlags.BUILTIN);\r\n }\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, program.diagnostics);\r\n tn.onComment = this.onComment;\r\n source.tokenizer = tn;\r\n var statements = source.statements;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n let statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n statements.push(statement);\r\n }\r\n }\r\n tn.finish();\r\n }\r\n\r\n /** Parses a top-level statement. */\r\n parseTopLevelStatement(\r\n tn: Tokenizer,\r\n namespace: Node | null = null\r\n ): Statement | null {\r\n var flags = CommonFlags.NONE;\r\n var startPos: i32 = -1;\r\n\r\n // check decorators\r\n var decorators: DecoratorNode[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) {\r\n this.skipStatement(tn);\r\n continue;\r\n }\r\n if (!decorators) decorators = [];\r\n decorators.push(decorator);\r\n }\r\n\r\n // mark builtins\r\n flags |= (tn.source.flags & CommonFlags.BUILTIN);\r\n\r\n // check modifiers\r\n var exportStart: i32 = 0;\r\n var exportEnd: i32 = 0;\r\n if (tn.skip(Token.EXPORT)) {\r\n if (tn.skip(Token.DEFAULT)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n flags |= CommonFlags.EXPORT;\r\n exportStart = tn.tokenPos;\r\n exportEnd = tn.pos;\r\n }\r\n\r\n var declareStart: i32 = 0;\r\n var declareEnd: i32 = 0;\r\n var contextIsAmbient = namespace != null && namespace.is(CommonFlags.AMBIENT);\r\n if (tn.skip(Token.DECLARE)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n if (contextIsAmbient) {\r\n this.error(\r\n DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n flags |= CommonFlags.DECLARE | CommonFlags.AMBIENT;\r\n } else if (contextIsAmbient) {\r\n flags |= CommonFlags.AMBIENT;\r\n }\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n\r\n // handle declarations\r\n var first = tn.peek();\r\n if (startPos < 0) startPos = tn.nextTokenPos;\r\n switch (first) {\r\n case Token.CONST: {\r\n tn.next();\r\n flags |= CommonFlags.CONST;\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n break;\r\n } else {\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n }\r\n break;\r\n }\r\n case Token.LET: flags |= CommonFlags.LET;\r\n case Token.VAR: {\r\n tn.next();\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ENUM: {\r\n tn.next();\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.FUNCTION: {\r\n tn.next();\r\n statement = this.parseFunction(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ABSTRACT: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (!tn.skip(Token.CLASS)) {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n break;\r\n } else {\r\n tn.discard(state);\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n // fall through\r\n }\r\n case Token.CLASS:\r\n case Token.INTERFACE: {\r\n tn.next();\r\n statement = this.parseClassOrInterface(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.NAMESPACE: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n case Token.IMPORT: {\r\n tn.next();\r\n flags |= CommonFlags.IMPORT;\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExportImport(tn, startPos);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n default: {\r\n\r\n // handle plain exports\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExport(tn, flags, startPos);\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (exportEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(exportStart, exportEnd), \"export\"\r\n ); // recoverable\r\n }\r\n if (declareEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(declareStart, declareEnd), \"declare\"\r\n ); // recoverable\r\n }\r\n if (!namespace) {\r\n statement = this.parseStatement(tn, true);\r\n } // TODO: else?\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorators[i].range\r\n );\r\n }\r\n }\r\n return statement;\r\n }\r\n\r\n /** Obtains the next file to parse. */\r\n nextFile(): string | null {\r\n var backlog = this.backlog;\r\n return backlog.length ? backlog.shift() : null;\r\n }\r\n\r\n /** Finishes parsing and returns the program. */\r\n finish(): Program {\r\n if (this.backlog.length) throw new Error(\"backlog is not empty\");\r\n this.backlog = [];\r\n this.seenlog.clear();\r\n this.donelog.clear();\r\n return this.program;\r\n }\r\n\r\n /** Parses a type. */\r\n parseType(\r\n tn: Tokenizer,\r\n acceptParenthesized: bool = true,\r\n suppressErrors: bool = false\r\n ): CommonTypeNode | null {\r\n\r\n // NOTE: this parses our limited subset\r\n var token = tn.next();\r\n var startPos = tn.tokenPos;\r\n\r\n var type: CommonTypeNode;\r\n\r\n // '(' ...\r\n if (token == Token.OPENPAREN) {\r\n\r\n // '(' FunctionSignature ')' '|' 'null'?\r\n let isNullableSignature = tn.skip(Token.OPENPAREN);\r\n // FunctionSignature?\r\n let signature = this.tryParseSignature(tn);\r\n if (signature) {\r\n if (isNullableSignature) {\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.BAR)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"|\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.NULL)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n signature.isNullable = true;\r\n }\r\n return signature;\r\n } else if (isNullableSignature || this.tryParseSignatureIsSignature) {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // Type (',' Type)* ')'\r\n if (acceptParenthesized) {\r\n let innerType = this.parseType(tn, false, suppressErrors);\r\n if (!innerType) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"}\"\r\n );\r\n }\r\n return null;\r\n }\r\n type = innerType;\r\n type.range.start = startPos;\r\n type.range.end = tn.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // 'void'\r\n } else if (token == Token.VOID) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"void\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'this'\r\n } else if (token == Token.THIS) {\r\n type = Node.createType(\r\n Node.createThisExpression(tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'true'\r\n } else if (token == Token.TRUE || token == Token.FALSE) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"bool\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // StringLiteral\r\n } else if (token == Token.STRINGLITERAL) {\r\n tn.readString();\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"string\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // Identifier\r\n } else if (token == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let parameters = new Array();\r\n let nullable = false;\r\n\r\n // Name\r\n if (tn.skip(Token.LESSTHAN)) {\r\n do {\r\n let parameter = this.parseType(tn, true, suppressErrors);\r\n if (!parameter) return null;\r\n parameters.push(parameter);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \">\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n // ... | null\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(identifier, parameters, nullable, tn.range(startPos, tn.pos));\r\n\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n // ... [][]\r\n while (tn.skip(Token.OPENBRACKET)) {\r\n let bracketStart = tn.tokenPos;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n }\r\n return null;\r\n }\r\n let bracketRange = tn.range(bracketStart, tn.pos);\r\n\r\n // ...[] | null\r\n let nullable = false;\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"Array\", bracketRange),\r\n [ type ],\r\n nullable,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (nullable) break;\r\n }\r\n\r\n return type;\r\n }\r\n\r\n // Indicates whether tryParseSignature determined that it is handling a Signature\r\n private tryParseSignatureIsSignature: bool = false;\r\n\r\n /** Parses a function signature, as used in type declarations. */\r\n tryParseSignature(\r\n tn: Tokenizer\r\n ): SignatureNode | null {\r\n\r\n // at '(': ('...'? Identifier '?'? ':' Type (',' '...'? Identifier '?'? ':' Type)* )? ')' '=>' Type\r\n\r\n var state = tn.mark();\r\n var startPos = tn.tokenPos;\r\n var parameters: ParameterNode[] | null = null;\r\n var thisType: TypeNode | null = null;\r\n var isSignature: bool = false;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n parameters = [];\r\n\r\n } else {\r\n isSignature = false; // not yet known\r\n do {\r\n let kind = ParameterKind.DEFAULT;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n kind = ParameterKind.REST;\r\n }\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let t = this.parseType(tn, false);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n this.tryParseSignatureIsSignature = true;\r\n return null;\r\n }\r\n thisType = t;\r\n } else {\r\n tn.reset(state);\r\n this.tryParseSignatureIsSignature = false;\r\n return null;\r\n }\r\n } else if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range(tn.tokenPos, tn.pos));\r\n if (tn.skip(Token.QUESTION)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n if (kind == ParameterKind.REST) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n tn.range()\r\n ); // recoverable\r\n } else {\r\n kind = ParameterKind.OPTIONAL;\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let type = this.parseType(tn); // not suppressing errors because known\r\n if (!type) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n let param = new ParameterNode();\r\n param.parameterKind = kind;\r\n param.name = name;\r\n param.type = type;\r\n if (!parameters) parameters = [ param ];\r\n else parameters.push(param);\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null;\r\n if (tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n returnType = this.parseType(tn);\r\n if (!returnType) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=>\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n this.tryParseSignatureIsSignature = true;\r\n return Node.createSignature(\r\n parameters || [],\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n\r\n // statements\r\n\r\n parseDecorator(\r\n tn: Tokenizer\r\n ): DecoratorNode | null {\r\n\r\n // at '@': Identifier ('.' Identifier)* '(' Arguments\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skipIdentifier()) {\r\n let name = tn.readIdentifier();\r\n let expression: Expression = Node.createIdentifierExpression(name, tn.range(startPos, tn.pos));\r\n while (tn.skip(Token.DOT)) {\r\n if (tn.skipIdentifier()) {\r\n name = tn.readIdentifier();\r\n expression = Node.createPropertyAccessExpression(\r\n expression,\r\n Node.createIdentifierExpression(name, tn.range()),\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let args: Expression[] | null;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n args = this.parseArguments(tn);\r\n if (args) {\r\n return Node.createDecorator(expression, args, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n return Node.createDecorator(expression, null, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVariable(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): VariableStatement | null {\r\n\r\n // at ('const' | 'let' | 'var'): VariableDeclaration (',' VariableDeclaration)* ';'?\r\n\r\n var members = new Array();\r\n do {\r\n let member = this.parseVariableDeclaration(tn, flags, decorators);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n\r\n var ret = Node.createVariableStatement(members, decorators, flags, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseVariableDeclaration(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags,\r\n parentDecorators: DecoratorNode[] | null\r\n ): VariableDeclaration | null {\r\n\r\n // before: Identifier (':' Type)? ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var flags = parentFlags;\r\n\r\n var type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n }\r\n\r\n var initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n } else {\r\n if (flags & CommonFlags.CONST) {\r\n if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n identifier.range\r\n ); // recoverable\r\n }\r\n } else if (!type) { // neither type nor initializer\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range(tn.pos)\r\n ); // recoverable\r\n }\r\n }\r\n return Node.createVariableDeclaration(\r\n identifier,\r\n type,\r\n initializer,\r\n parentDecorators,\r\n flags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseEnum(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): EnumDeclaration | null {\r\n\r\n // at 'enum': Identifier '{' (EnumValueDeclaration (',' EnumValueDeclaration )*)? '}' ';'?\r\n\r\n if (tn.next() != Token.IDENTIFIER) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.next() != Token.OPENBRACE) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n var members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseEnumValue(tn, CommonFlags.NONE);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n var ret = Node.createEnumDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseEnumValue(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags\r\n ): EnumValueDeclaration | null {\r\n\r\n // before: Identifier ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var value: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n }\r\n return Node.createEnumValueDeclaration(\r\n identifier,\r\n value,\r\n parentFlags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseReturn(\r\n tn: Tokenizer\r\n ): ReturnStatement | null {\r\n\r\n // at 'return': Expression | (';' | '}' | ...'\\n')\r\n\r\n var expr: Expression | null = null;\r\n if (\r\n tn.peek(true) != Token.SEMICOLON &&\r\n tn.nextToken != Token.CLOSEBRACE &&\r\n !tn.nextTokenOnNewLine\r\n ) {\r\n if (!(expr = this.parseExpression(tn))) return null;\r\n }\r\n\r\n var ret = Node.createReturnStatement(expr, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTypeParameters(\r\n tn: Tokenizer\r\n ): TypeParameterNode[] | null {\r\n\r\n // at '<': TypeParameter (',' TypeParameter)* '>'\r\n\r\n var typeParameters = new Array();\r\n while (!tn.skip(Token.GREATERTHAN)) {\r\n let typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.GREATERTHAN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (typeParameters.length === 0) {\r\n this.error(\r\n DiagnosticCode.Type_parameter_list_cannot_be_empty,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n return typeParameters;\r\n }\r\n\r\n parseTypeParameter(\r\n tn: Tokenizer\r\n ): TypeParameterNode | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n let extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n return Node.createTypeParameter(\r\n identifier,\r\n extendsType,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private parseParametersThis: TypeNode | null = null;\r\n\r\n parseParameters(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: ParameterNode | null = null;\r\n var seenOptional = false;\r\n var reportedRest = false;\r\n var thisType: CommonTypeNode | null = null;\r\n\r\n // check if there is a leading `this` parameter\r\n this.parseParametersThis = null;\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n thisType = this.parseType(tn); // reports\r\n if (!thisType) return null;\r\n if (thisType.kind == NodeKind.TYPE) {\r\n this.parseParametersThis = thisType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n thisType.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n return parameters;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let param = this.parseParameter(tn, isConstructor); // reports\r\n if (!param) return null;\r\n if (seenRest && !reportedRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,\r\n seenRest.name.range\r\n );\r\n reportedRest = true;\r\n }\r\n switch (param.parameterKind) {\r\n default: {\r\n if (seenOptional) {\r\n this.error(\r\n DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,\r\n param.name.range\r\n );\r\n }\r\n break;\r\n }\r\n case ParameterKind.OPTIONAL: {\r\n seenOptional = true;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n seenRest = param;\r\n break;\r\n }\r\n }\r\n parameters.push(param);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: ('public' | 'private' | 'protected' | '...')? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n var accessFlags: CommonFlags = CommonFlags.NONE;\r\n if (isConstructor) {\r\n if (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.peek() == Token.READONLY) {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek() != Token.COLON) { // modifier\r\n tn.discard(state);\r\n if (!startRange) startRange = tn.range();\r\n accessFlags |= CommonFlags.READONLY;\r\n } else { // identifier\r\n tn.reset(state);\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n if (accessFlags) {\r\n this.error(\r\n DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,\r\n tn.range()\r\n );\r\n } else {\r\n startRange = tn.range();\r\n }\r\n isRest = true;\r\n }\r\n if (tn.skipIdentifier()) {\r\n if (!isRest) startRange = tn.range();\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let type: CommonTypeNode | null = null;\r\n if (isOptional = tn.skip(Token.QUESTION)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n identifier.range\r\n );\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n type = Node.createOmittedType(tn.range(tn.pos));\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n if (isOptional) {\r\n this.error(\r\n DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,\r\n identifier.range\r\n );\r\n } else {\r\n isOptional = true;\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n }\r\n let param = Node.createParameter(\r\n identifier,\r\n type,\r\n initializer,\r\n isRest\r\n ? ParameterKind.REST\r\n : isOptional\r\n ? ParameterKind.OPTIONAL\r\n : ParameterKind.DEFAULT,\r\n Range.join(startRange, tn.range())\r\n );\r\n param.flags |= accessFlags;\r\n return param;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseFunction(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): FunctionDeclaration | null {\r\n\r\n // at 'function':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // '(' Parameters (':' Type)?\r\n // '{' Statement* '}'\r\n // ';'?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(tn.pos)\r\n );\r\n return null;\r\n }\r\n\r\n var name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var signatureStart: i32 = -1;\r\n\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n signatureStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n if (signatureStart < 0) {\r\n signatureStart = tn.tokenPos;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n var thisType = this.parseParametersThis;\r\n\r\n var isSetter = (flags & CommonFlags.SET) != 0;\r\n if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n ); // recoverable\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn, true, isSetter);\r\n if (!returnType) return null;\r\n }\r\n\r\n if (!returnType) {\r\n returnType = Node.createOmittedType(\r\n tn.range(tn.pos)\r\n );\r\n if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range(tn.pos)\r\n );\r\n }\r\n\r\n var ret = Node.createFunctionDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseFunctionExpression(tn: Tokenizer): FunctionExpression | null {\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n var isArrow = false;\r\n\r\n // either at 'function':\r\n // Identifier?\r\n // '(' Parameters (':' Type)?\r\n // Statement\r\n\r\n if (tn.token == Token.FUNCTION) {\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n // or at '(' of arrow function:\r\n // Parameters (':' Type)?\r\n // Statement\r\n\r\n } else {\r\n isArrow = true;\r\n assert(tn.token == Token.OPENPAREN);\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var signatureStart = tn.pos;\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, name, parameters, isArrow, startPos, signatureStart);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n name: IdentifierExpression,\r\n parameters: ParameterNode[],\r\n isArrow: bool,\r\n startPos: i32 = -1,\r\n signatureStart: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = name.range.start;\r\n if (signatureStart < 0) signatureStart = startPos;\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n\r\n if (isArrow) {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"=>\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null, // TODO?\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null;\r\n if (isArrow) {\r\n body = this.parseStatement(tn, false);\r\n } else {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n }\r\n if (!body) return null;\r\n\r\n var declaration = Node.createFunctionDeclaration(\r\n name,\r\n null,\r\n signature,\r\n body,\r\n null,\r\n isArrow ? CommonFlags.ARROW : CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n return Node.createFunctionExpression(declaration);\r\n }\r\n\r\n parseClassOrInterface(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): ClassDeclaration | null {\r\n\r\n // at ('class' | 'interface'):\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // ('extends' Type)?\r\n // ('implements' Type (',' Type)*)?\r\n // '{' ClassMember* '}'\r\n\r\n var isInterface = tn.token == Token.INTERFACE;\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n var typeParameters: TypeParameterNode[] | null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n } else {\r\n typeParameters = [];\r\n }\r\n\r\n var extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n\r\n var implementsTypes: TypeNode[] | null = null;\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Interface_declaration_cannot_have_implements_clause,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n do {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n if (!isInterface) {\r\n if (!implementsTypes) implementsTypes = [];\r\n implementsTypes.push(type);\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration: ClassDeclaration;\r\n if (isInterface) {\r\n assert(!implementsTypes);\r\n declaration = Node.createInterfaceDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n declaration = Node.createClassDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n implementsTypes,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return declaration;\r\n }\r\n\r\n parseClassExpression(tn: Tokenizer): ClassExpression | null {\r\n\r\n // at 'class': Identifier? '{' ... '}'\r\n\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration = Node.createClassDeclaration(\r\n name,\r\n [],\r\n null,\r\n null,\r\n members,\r\n null,\r\n CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return Node.createClassExpression(declaration);\r\n }\r\n\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parent: ClassDeclaration\r\n ): DeclarationStatement | null {\r\n\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\r\n // 'readonly'?\r\n // ('get' | 'set')?\r\n // Identifier ...\r\n\r\n var startPos = tn.pos;\r\n var isInterface = parent.kind == NodeKind.INTERFACEDECLARATION;\r\n\r\n var decorators = new Array();\r\n while (tn.skip(Token.AT)) {\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorator.range\r\n );\r\n }\r\n decorators.push(decorator);\r\n }\r\n\r\n // inherit ambient status\r\n var flags = parent.flags & CommonFlags.AMBIENT;\r\n\r\n // implemented methods are virtual\r\n if (isInterface) flags |= CommonFlags.VIRTUAL;\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"public\"\r\n );\r\n }\r\n flags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"private\"\r\n );\r\n }\r\n flags |= CommonFlags.PRIVATE;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"protected\"\r\n );\r\n }\r\n flags |= CommonFlags.PROTECTED;\r\n }\r\n\r\n var staticStart: i32 = 0;\r\n var staticEnd: i32 = 0;\r\n var abstractStart: i32 = 0;\r\n var abstractEnd: i32 = 0;\r\n if (tn.skip(Token.STATIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"static\"\r\n );\r\n }\r\n flags |= CommonFlags.STATIC;\r\n staticStart = tn.tokenPos;\r\n staticEnd = tn.pos;\r\n } else {\r\n flags |= CommonFlags.INSTANCE;\r\n if (tn.skip(Token.ABSTRACT)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"abstract\"\r\n );\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n abstractStart = tn.tokenPos;\r\n abstractEnd = tn.pos;\r\n }\r\n if (parent.flags & CommonFlags.GENERIC) {\r\n flags |= CommonFlags.GENERIC_CONTEXT;\r\n }\r\n }\r\n\r\n var readonlyStart: i32 = 0;\r\n var readonlyEnd: i32 = 0;\r\n if (tn.skip(Token.READONLY)) {\r\n flags |= CommonFlags.READONLY;\r\n readonlyStart = tn.tokenPos;\r\n readonlyEnd = tn.pos;\r\n }\r\n\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n var state = tn.mark();\r\n var isConstructor = false;\r\n var isGetter = false;\r\n var getStart: i32 = 0;\r\n var getEnd: i32 = 0;\r\n var isSetter = false;\r\n var setStart: i32 = 0;\r\n var setEnd: i32 = 0;\r\n if (!isInterface) {\r\n if (tn.skip(Token.GET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.GET;\r\n isGetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.SET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.SET | CommonFlags.SET;\r\n isSetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.CONSTRUCTOR)) {\r\n flags |= CommonFlags.CONSTRUCTOR;\r\n isConstructor = true;\r\n if (flags & CommonFlags.STATIC) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(staticStart, staticEnd), \"static\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n }\r\n }\r\n\r\n if (!isConstructor && !tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var name = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n let typeParametersStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.An_accessor_cannot_have_type_parameters,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else {\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n }\r\n\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let signatureStart = tn.tokenPos;\r\n let parameters = this.parseParameters(tn, isConstructor);\r\n if (!parameters) return null;\r\n let thisType = this.parseParametersThis;\r\n if (isConstructor) {\r\n for (let i = 0, k = parameters.length; i < k; ++i) {\r\n let parameter = parameters[i];\r\n if (parameter.isAny(\r\n CommonFlags.PUBLIC |\r\n CommonFlags.PROTECTED |\r\n CommonFlags.PRIVATE |\r\n CommonFlags.READONLY\r\n )) {\r\n let implicitFieldDeclaration = Node.createFieldDeclaration(\r\n parameter.name,\r\n parameter.type,\r\n null, // initialized via parameter\r\n null,\r\n parameter.flags | CommonFlags.INSTANCE,\r\n parameter.range\r\n );\r\n implicitFieldDeclaration.parameterIndex = i;\r\n implicitFieldDeclaration.parent = parent;\r\n parameter.implicitFieldDeclaration = implicitFieldDeclaration;\r\n parent.members.push(implicitFieldDeclaration);\r\n }\r\n }\r\n } else if (isGetter) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n );\r\n }\r\n } else if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n );\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n );\r\n }\r\n }\r\n\r\n let returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (name.kind == NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n );\r\n } else if (isSetter) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,\r\n tn.range()\r\n );\r\n }\r\n returnType = this.parseType(tn, name.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n if (!isSetter && name.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n let signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n let body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n } else if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract,\r\n tn.range(), name.text\r\n ); // recoverable\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT) && !isInterface) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n let retMethod = Node.createMethodDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retMethod;\r\n\r\n } else if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Constructor_implementation_is_missing,\r\n name.range\r\n );\r\n\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n name.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(getStart, getEnd), \"get\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.SET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(setStart, setEnd), \"set\"\r\n ); // recoverable\r\n }\r\n\r\n let type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n initializer = this.parseExpression(tn);\r\n if (!initializer) return null;\r\n }\r\n let retField = Node.createFieldDeclaration(\r\n name,\r\n type,\r\n initializer,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retField;\r\n }\r\n return null;\r\n }\r\n\r\n parseNamespace(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): NamespaceDeclaration | null {\r\n\r\n // at 'namespace': Identifier '{' (Variable | Function)* '}'\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n let ns = Node.createNamespaceDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseTopLevelStatement(tn, ns);\r\n if (!member) return null;\r\n member.parent = ns;\r\n members.push(member);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ns;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExport(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n startPos: i32\r\n ): ExportStatement | null {\r\n\r\n // at 'export': '{' ExportMember (',' ExportMember)* }' ('from' StringLiteral)? ';'?\r\n\r\n var path: StringLiteralExpression | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseExportMember(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let ret = Node.createExportStatement(members, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = ret.internalPath;\r\n if (internalPath !== null && !this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret = Node.createExportStatement(null, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = assert(ret.internalPath);\r\n let source = tn.source;\r\n if (!source.exportPaths) source.exportPaths = new Set();\r\n source.exportPaths.add(internalPath);\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportMember(\r\n tn: Tokenizer\r\n ): ExportMember | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifierName()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createExportMember(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImport(\r\n tn: Tokenizer\r\n ): ImportStatement | null {\r\n\r\n // at 'import':\r\n // ('{' (ImportMember (',' ImportMember)* '}') | ('*' 'as' Identifier)?\r\n // 'from' StringLiteral ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var members: ImportDeclaration[] | null = null;\r\n var namespaceName: IdentifierExpression | null = null;\r\n var skipFrom = false;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseImportDeclaration(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n namespaceName = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"as\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n skipFrom = true;\r\n }\r\n\r\n if (skipFrom || tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n let path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret: ImportStatement;\r\n if (namespaceName) {\r\n assert(!members);\r\n ret = Node.createImportStatementWithWildcard(namespaceName, path, tn.range(startPos, tn.pos));\r\n } else {\r\n ret = Node.createImportStatement(members, path, tn.range(startPos, tn.pos));\r\n }\r\n let internalPath = ret.internalPath;\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImportDeclaration(\r\n tn: Tokenizer\r\n ): ImportDeclaration | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifierName()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createImportDeclaration(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportImport(\r\n tn: Tokenizer,\r\n startPos: i32\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let ret = Node.createExportImportStatement(identifier, asIdentifier, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseStatement(\r\n tn: Tokenizer,\r\n topLevel: bool = false\r\n ): Statement | null {\r\n\r\n // at previous token\r\n\r\n var state = tn.mark();\r\n var token = tn.next();\r\n var statement: Statement | null = null;\r\n switch (token) {\r\n case Token.BREAK: {\r\n statement = this.parseBreak(tn);\r\n break;\r\n }\r\n case Token.CONST: {\r\n statement = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.CONTINUE: {\r\n statement = this.parseContinue(tn);\r\n break;\r\n }\r\n case Token.DO: {\r\n statement = this.parseDoStatement(tn);\r\n break;\r\n }\r\n case Token.FOR: {\r\n statement = this.parseForStatement(tn);\r\n break;\r\n }\r\n case Token.IF: {\r\n statement = this.parseIfStatement(tn);\r\n break;\r\n }\r\n case Token.LET: {\r\n statement = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.VAR: {\r\n statement = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n statement = this.parseBlockStatement(tn, topLevel);\r\n break;\r\n }\r\n case Token.RETURN: {\r\n if (topLevel) {\r\n this.error(\r\n DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n statement = this.parseReturn(tn);\r\n break;\r\n }\r\n case Token.SEMICOLON: {\r\n return Node.createEmptyStatement(tn.range(tn.tokenPos));\r\n }\r\n case Token.SWITCH: {\r\n statement = this.parseSwitchStatement(tn);\r\n break;\r\n }\r\n case Token.THROW: {\r\n statement = this.parseThrowStatement(tn);\r\n break;\r\n }\r\n case Token.TRY: {\r\n statement = this.parseTryStatement(tn);\r\n break;\r\n }\r\n case Token.VOID: {\r\n statement = this.parseVoidStatement(tn);\r\n break;\r\n }\r\n case Token.WHILE: {\r\n statement = this.parseWhileStatement(tn);\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n tn.reset(state);\r\n statement = this.parseExpressionStatement(tn);\r\n break;\r\n }\r\n }\r\n if (!statement) { // has been reported\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n }\r\n return statement;\r\n }\r\n\r\n parseBlockStatement(\r\n tn: Tokenizer,\r\n topLevel: bool\r\n ): BlockStatement | null {\r\n\r\n // at '{': Statement* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let state = tn.mark();\r\n let statement = this.parseStatement(tn, topLevel);\r\n if (!statement) {\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n statements.push(statement);\r\n }\r\n }\r\n var ret = Node.createBlockStatement(statements, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseBreak(\r\n tn: Tokenizer\r\n ): BreakStatement | null {\r\n\r\n // at 'break': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createBreakStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseContinue(\r\n tn: Tokenizer\r\n ): ContinueStatement | null {\r\n\r\n // at 'continue': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createContinueStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseDoStatement(\r\n tn: Tokenizer\r\n ): DoStatement | null {\r\n\r\n // at 'do': Statement 'while' '(' Expression ')' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n if (tn.skip(Token.WHILE)) {\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let ret = Node.createDoStatement(statement, condition, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"while\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExpressionStatement(\r\n tn: Tokenizer\r\n ): ExpressionStatement | null {\r\n\r\n // at previous token\r\n\r\n var expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n\r\n var ret = Node.createExpressionStatement(expr);\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseForStatement(\r\n tn: Tokenizer\r\n ): ForStatement | null {\r\n\r\n // at 'for': '(' Statement? Expression? ';' Expression? ')' Statement\r\n\r\n var startPos = tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let initializer: Statement | null = null;\r\n\r\n if (tn.skip(Token.CONST)) {\r\n initializer = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n } else if (tn.skip(Token.LET)) {\r\n initializer = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n } else if (tn.skip(Token.VAR)) {\r\n initializer = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n\r\n } else if (!tn.skip(Token.SEMICOLON)) {\r\n initializer = this.parseExpressionStatement(tn);\r\n if (!initializer) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let condition: ExpressionStatement | null = null;\r\n if (!tn.skip(Token.SEMICOLON)) {\r\n condition = this.parseExpressionStatement(tn);\r\n if (!condition) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let incrementor: Expression | null = null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n incrementor = this.parseExpression(tn);\r\n if (!incrementor) return null;\r\n\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n return Node.createForStatement(\r\n initializer,\r\n condition\r\n ? condition.expression\r\n : null,\r\n incrementor,\r\n statement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseIfStatement(\r\n tn: Tokenizer\r\n ): IfStatement | null {\r\n\r\n // at 'if': '(' Expression ')' Statement ('else' Statement)?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let elseStatement: Statement | null = null;\r\n if (tn.skip(Token.ELSE)) {\r\n elseStatement = this.parseStatement(tn);\r\n if (!elseStatement) return null;\r\n }\r\n return Node.createIfStatement(\r\n condition,\r\n statement,\r\n elseStatement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchStatement(\r\n tn: Tokenizer\r\n ): SwitchStatement | null {\r\n\r\n // at 'switch': '(' Expression ')' '{' SwitchCase* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n let ret = Node.createSwitchStatement(condition, cases, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchCase(\r\n tn: Tokenizer\r\n ): SwitchCase | null {\r\n\r\n var startPos = tn.tokenPos;\r\n var statements: Statement[],\r\n statement: Statement | null;\r\n\r\n // 'case' Expression ':' Statement*\r\n\r\n if (tn.skip(Token.CASE)) {\r\n let label = this.parseExpression(tn);\r\n if (!label) return null;\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(label, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n\r\n // 'default' ':' Statement*\r\n\r\n } else if (tn.skip(Token.DEFAULT)) {\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(null, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._case_or_default_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseThrowStatement(\r\n tn: Tokenizer\r\n ): ThrowStatement | null {\r\n\r\n // at 'throw': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n var ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTryStatement(\r\n tn: Tokenizer\r\n ): TryStatement | null {\r\n\r\n // at 'try':\r\n // '{' Statement* '}'\r\n // ('catch' '(' VariableMember ')' '{' Statement* '}')?\r\n // ('finally' '{' Statement* '}'? ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var stmt: Statement | null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n statements.push(stmt);\r\n }\r\n let catchVariable: IdentifierExpression | null = null;\r\n let catchStatements: Statement[] | null = null;\r\n let finallyStatements: Statement[] | null = null;\r\n if (tn.skip(Token.CATCH)) {\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n catchVariable = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n catchStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n catchStatements.push(stmt);\r\n }\r\n }\r\n if (tn.skip(Token.FINALLY)) {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n finallyStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n finallyStatements.push(stmt);\r\n }\r\n }\r\n if (!(catchStatements || finallyStatements)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"catch\"\r\n );\r\n return null;\r\n }\r\n let ret = Node.createTryStatement(\r\n statements,\r\n catchVariable,\r\n catchStatements,\r\n finallyStatements,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseTypeDeclaration(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier ('<' TypeParameters '>')? '=' Type ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n if (tn.skip(Token.EQUALS)) {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n let ret = Node.createTypeDeclaration(\r\n name,\r\n typeParameters,\r\n type,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVoidStatement(\r\n tn: Tokenizer\r\n ): VoidStatement | null {\r\n\r\n // at 'void': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn, Precedence.GROUPING);\r\n if (!expression) return null;\r\n var ret = Node.createVoidStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseWhileStatement(\r\n tn: Tokenizer\r\n ): WhileStatement | null {\r\n\r\n // at 'while': '(' Expression ')' Statement ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let ret = Node.createWhileStatement(expression, statement, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n // expressions\r\n // see: http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm#climbing\r\n\r\n parseExpressionStart(\r\n tn: Tokenizer\r\n ): Expression | null {\r\n\r\n var token = tn.next(IdentifierHandling.PREFER);\r\n var startPos = tn.tokenPos;\r\n var precedence = determinePrecedenceStart(token);\r\n if (precedence != Precedence.NONE) {\r\n let operand: Expression | null;\r\n\r\n // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions)\r\n\r\n // NewExpression\r\n if (token == Token.NEW) {\r\n operand = this.parseExpression(tn, Precedence.CALL);\r\n if (!operand) return null;\r\n if (operand.kind == NodeKind.CALL) {\r\n return Node.createNewExpression(\r\n (operand).expression,\r\n (operand).typeArguments,\r\n (operand).arguments,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n } else {\r\n operand = this.parseExpression(tn, precedence);\r\n if (!operand) return null;\r\n }\r\n\r\n // UnaryPrefixExpression\r\n if (token == Token.PLUS_PLUS || token == Token.MINUS_MINUS) {\r\n if (\r\n operand.kind != NodeKind.IDENTIFIER &&\r\n operand.kind != NodeKind.ELEMENTACCESS &&\r\n operand.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n operand.range\r\n );\r\n }\r\n }\r\n return Node.createUnaryPrefixExpression(token, operand, tn.range(startPos, tn.pos));\r\n }\r\n\r\n var expr: Expression | null = null;\r\n switch (token) {\r\n\r\n case Token.NULL: return Node.createNullExpression(tn.range());\r\n case Token.TRUE: return Node.createTrueExpression(tn.range());\r\n case Token.FALSE: return Node.createFalseExpression(tn.range());\r\n\r\n // ParenthesizedExpression\r\n // FunctionExpression\r\n case Token.OPENPAREN: {\r\n\r\n // determine whether this is a function expression\r\n if (tn.skip(Token.CLOSEPAREN)) { // must be a function expression (fast route)\r\n return this.parseFunctionExpressionCommon(\r\n tn,\r\n Node.createEmptyIdentifierExpression(tn.range(startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n let state = tn.mark();\r\n let again = true;\r\n do {\r\n switch (tn.next(IdentifierHandling.PREFER)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT: {\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n switch (tn.next()) {\r\n\r\n // if we got here, check for arrow\r\n case Token.CLOSEPAREN: {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n again = false;\r\n break;\r\n }\r\n // fall-through\r\n }\r\n // function expression\r\n case Token.COLON: { // type annotation\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.QUESTION: // optional parameter or ternary\r\n case Token.COMMA: {\r\n break; // continue\r\n }\r\n // parenthesized expression\r\n // case Token.EQUALS: // missing type annotation for simplicity\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n // parenthesized expression\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n } while (again);\r\n tn.reset(state);\r\n\r\n // parse parenthesized\r\n expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return Node.createParenthesizedExpression(expr, tn.range(startPos, tn.pos));\r\n }\r\n // ArrayLiteralExpression\r\n case Token.OPENBRACKET: {\r\n let elementExpressions = new Array();\r\n while (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (tn.peek() == Token.COMMA) {\r\n expr = null; // omitted\r\n } else {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n }\r\n elementExpressions.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACKET)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n }\r\n // ObjectLiteralExpression\r\n case Token.OPENBRACE: {\r\n let startPos = tn.tokenPos;\r\n let names = new Array();\r\n let values = new Array();\r\n let name: IdentifierExpression;\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n if (!tn.skipIdentifier()) {\r\n if (!tn.skip(Token.STRINGLITERAL)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(),\r\n );\r\n return null;\r\n }\r\n name = Node.createIdentifierExpression(tn.readString(), tn.range());\r\n name.set(CommonFlags.QUOTED);\r\n } else {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n 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 element of this.program.moduleLevelExports.values()) this.visitElement(element);\r\n var todo = this.todo;\r\n for (let i = 0; i < todo.length; ) this.visitElement(todo[i]);\r\n }\r\n\r\n /** Visits an element.*/\r\n visitElement(element: Element): void {\r\n if (element.is(CommonFlags.PRIVATE) && !this.includePrivate) return;\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitGlobal(element);\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.visitFunctionInstances(element);\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n this.visitClassInstances(element);\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n if ((element).is(CommonFlags.COMPILED)) this.visitField(element);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prop = element;\r\n let getter = prop.getterPrototype;\r\n if (getter) this.visitFunctionInstances(getter);\r\n let setter = prop.setterPrototype;\r\n if (setter) this.visitFunctionInstances(setter);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n if (hasCompiledMember(element)) this.visitNamespace(element);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n\r\n private visitFunctionInstances(element: FunctionPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitFunction(instance);\r\n }\r\n }\r\n\r\n private visitClassInstances(element: ClassPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitClass(instance);\r\n }\r\n }\r\n\r\n abstract visitGlobal(element: Global): void;\r\n abstract visitEnum(element: Enum): void;\r\n abstract visitFunction(element: Function): void;\r\n abstract visitClass(element: Class): void;\r\n abstract visitInterface(element: Interface): void;\r\n abstract visitField(element: Field): void;\r\n abstract visitNamespace(element: Element): void;\r\n}\r\n\r\n/** A WebIDL definitions builder. */\r\nexport class IDLBuilder extends ExportsWalker {\r\n\r\n /** Builds WebIDL definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new IDLBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n if (isConst) {\r\n switch (element.constantValueKind) {\r\n case ConstantValueKind.INTEGER: {\r\n sb.push(\" = \");\r\n sb.push(i64_to_string(element.constantIntegerValue));\r\n break;\r\n }\r\n case ConstantValueKind.FLOAT: {\r\n sb.push(\" = \");\r\n sb.push(element.constantFloatValue.toString());\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n let isConst = (member).is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"readonly \");\r\n sb.push(\"unsigned long \");\r\n sb.push(name);\r\n if (isConst) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n }\r\n for (let member of members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) this.visitElement(member);\r\n }\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(this.typeToString(parameters[i]));\r\n sb.push(\" \");\r\n sb.push(signature.getParameterName(i));\r\n }\r\n sb.push(\");\\n\");\r\n var members = element.members;\r\n if (members && members.size) {\r\n indent(sb, this.indentLevel);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n // TODO\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n // TODO\r\n }\r\n\r\n visitNamespace(element: Namespace): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"byte\";\r\n case TypeKind.I16: return \"short\";\r\n case TypeKind.I32: return \"long\";\r\n case TypeKind.I64: return \"long long\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"long long\" : \"long\";\r\n case TypeKind.U8: return \"octet\";\r\n case TypeKind.U16: return \"unsigned short\";\r\n case TypeKind.U32: return \"unsigned long\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"unsigned long long\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"unsigned long long\" : \"unsigned long\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"boolean\";\r\n case TypeKind.F32: return \"unrestricted float\";\r\n case TypeKind.F64: return \"unrestricted double\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"interface ASModule {\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n/** A TypeScript definitions builder. */\r\nexport class TSDBuilder extends ExportsWalker {\r\n\r\n /** Builds TypeScript definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new TSDBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.STATIC)) {\r\n if (isConst) sb.push(\"static readonly \");\r\n else sb.push(\"static \");\r\n } else {\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"var \");\r\n }\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"enum \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n let numMembers = members.size;\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n indent(sb, this.indentLevel);\r\n sb.push(name);\r\n if (member.is(CommonFlags.INLINED)) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\",\\n\");\r\n --numMembers;\r\n }\r\n }\r\n if (numMembers) this.visitNamespace(element);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n if (element.isAny(CommonFlags.PRIVATE | CommonFlags.SET)) return;\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.GET)) {\r\n sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally\r\n sb.push(\": \");\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\";\\n\");\r\n return;\r\n } else {\r\n if (!element.isAny(CommonFlags.STATIC | CommonFlags.INSTANCE)) sb.push(\"function \");\r\n sb.push(element.simpleName);\r\n }\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(signature.getParameterName(i));\r\n sb.push(\": \");\r\n sb.push(this.typeToString(parameters[i]));\r\n }\r\n if (element.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.SET)) {\r\n sb.push(\")\");\r\n } else {\r\n sb.push(\"): \");\r\n sb.push(this.typeToString(signature.returnType));\r\n }\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n var isInterface = element.kind == ElementKind.INTERFACE;\r\n indent(sb, this.indentLevel++);\r\n if (isInterface) {\r\n sb.push(\"interface \");\r\n } else {\r\n if (element.is(CommonFlags.ABSTRACT)) sb.push(\"abstract \");\r\n sb.push(\"class \");\r\n }\r\n sb.push(element.simpleName);\r\n var base = element.base;\r\n if (base && base.is(CommonFlags.COMPILED | CommonFlags.MODULE_EXPORT)) {\r\n sb.push(\" extends \");\r\n sb.push(base.simpleName); // TODO: fqn\r\n }\r\n sb.push(\" {\\n\");\r\n var members = element.prototype.members; // static\r\n if (members) {\r\n for (let member of members.values()) {\r\n this.visitElement(member);\r\n }\r\n }\r\n var ctor = element.constructorInstance;\r\n if (ctor) this.visitFunction(ctor);\r\n members = element.members; // instance\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n if (element.is(CommonFlags.PRIVATE)) return;\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.READONLY)) sb.push(\"readonly \");\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitNamespace(element: Element): void {\r\n var members = element.members;\r\n if (members && members.size) {\r\n let sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"namespace \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"I64\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"I64\" : \"i32\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"U64\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"U64\" : \"u32\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"declare module ASModule {\\n\");\r\n sb.push(\" type i8 = number;\\n\");\r\n sb.push(\" type i16 = number;\\n\");\r\n sb.push(\" type i32 = number;\\n\");\r\n sb.push(\" type u8 = number;\\n\");\r\n sb.push(\" type u16 = number;\\n\");\r\n sb.push(\" type u32 = number;\\n\");\r\n sb.push(\" type f32 = number;\\n\");\r\n sb.push(\" type f64 = number;\\n\");\r\n sb.push(\" type bool = any;\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n sb.push(\"export default ASModule;\\n\");\r\n return this.sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n/** Tests if a namespace-like element has at least one compiled member. */\r\nfunction hasCompiledMember(element: Element): bool {\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (member.is(CommonFlags.COMPILED) || hasCompiledMember(member)) return true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n","/**\r\n * A decompiler that generates low-level AssemblyScript from WebAssembly binaries.\r\n * @module decompiler\r\n *//***/\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n ExpressionId,\r\n UnaryOp,\r\n BinaryOp,\r\n HostOp,\r\n FunctionRef,\r\n ExpressionRef,\r\n Index,\r\n getFunctionName,\r\n getFunctionBody,\r\n getFunctionParamCount,\r\n getFunctionParamType,\r\n getFunctionResultType,\r\n getExpressionId,\r\n getExpressionType,\r\n getBlockName,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getIfCondition,\r\n getIfTrue,\r\n getIfFalse,\r\n getLoopName,\r\n getLoopBody,\r\n getBreakName,\r\n getBreakCondition,\r\n getGetLocalIndex,\r\n getSetLocalIndex,\r\n getSetLocalValue,\r\n getLoadOffset,\r\n getLoadPtr,\r\n getStoreOffset,\r\n getStorePtr,\r\n getStoreValue,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getUnaryOp,\r\n getUnaryValue,\r\n getBinaryOp,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getSelectThen,\r\n getSelectElse,\r\n getSelectCondition,\r\n getDropValue,\r\n getReturnValue,\r\n getHostOp,\r\n getHostOperand\r\n} from \"./module\";\r\n\r\n// TODO :-)\r\n\r\nexport class Decompiler {\r\n\r\n static decompile(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n }\r\n\r\n text: string[] = [];\r\n functionId: i32 = 0;\r\n\r\n constructor() { }\r\n\r\n /** Decompiles a module to an AST that can then be serialized. */\r\n decompile(module: Module): void {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n decompileFunction(func: FunctionRef): void {\r\n var name = getFunctionName(func) || \"$\" + this.functionId.toString(10);\r\n var body = getFunctionBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (let i: Index = 0, k: Index = getFunctionParamCount(func); i < k; ++i) {\r\n if (i > 0) this.push(\", \");\r\n this.push(\"$\");\r\n this.push(i.toString(10));\r\n this.push(\": \");\r\n this.push(nativeTypeToType(getFunctionParamType(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(getFunctionResultType(func)));\r\n this.push(\" \");\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"\\n}\\n\");\r\n }\r\n ++this.functionId;\r\n }\r\n\r\n decompileExpression(expr: ExpressionRef): void {\r\n var id = getExpressionId(expr);\r\n var type = getExpressionType(expr);\r\n\r\n var nested: ExpressionRef;\r\n var string: string | null;\r\n var i: Index, k: Index;\r\n\r\n switch (id) {\r\n case ExpressionId.Block: { // TODO: magic\r\n if ((string = getBlockName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = getBlockChildCount(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(getBlockChild(expr, i));\r\n }\r\n this.push(\"}\\n\");\r\n return;\r\n }\r\n case ExpressionId.If: {\r\n if (type == NativeType.None) {\r\n this.push(\"if (\");\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(getIfTrue(expr));\r\n if (nested = getIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(getIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(getIfFalse(expr));\r\n }\r\n return;\r\n }\r\n case ExpressionId.Loop: {\r\n if ((string = getLoopName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(getLoopBody(expr));\r\n this.push(\"while (0);\\n\");\r\n }\r\n case ExpressionId.Break: {\r\n if (nested = getBreakCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = getBreakName(expr)) != null) {\r\n this.push(\"break \");\r\n this.push(string);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"break;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Switch:\r\n case ExpressionId.Call:\r\n case ExpressionId.CallImport:\r\n case ExpressionId.CallIndirect: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.GetLocal: {\r\n this.push(\"$\");\r\n this.push(getGetLocalIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(getSetLocalIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(getSetLocalValue(expr));\r\n return;\r\n }\r\n case ExpressionId.GetGlobal:\r\n case ExpressionId.SetGlobal: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.Load: {\r\n this.push(\"load<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getLoadOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getLoadPtr(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Store: {\r\n this.push(\"store<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getStoreOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getStorePtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getStoreValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Const: {\r\n switch (type) {\r\n case NativeType.I32: {\r\n this.push(getConstValueI32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.I64: {\r\n this.push(\r\n i64_to_string(\r\n i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(getConstValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(getConstValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NegF32:\r\n case UnaryOp.NegF64: {\r\n this.push(\"-\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: {\r\n this.push(\"!\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Binary: { // TODO: precedence\r\n switch (getBinaryOp(expr)) {\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.SubI32:\r\n case BinaryOp.SubI64:\r\n case BinaryOp.SubF32:\r\n case BinaryOp.SubF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.MulI32:\r\n case BinaryOp.MulI64:\r\n case BinaryOp.MulF32:\r\n case BinaryOp.MulF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivI32:\r\n case BinaryOp.DivI64:\r\n case BinaryOp.DivF32:\r\n case BinaryOp.DivF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n case ExpressionId.Select: {\r\n this.push(\"select<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.decompileExpression(getSelectThen(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectElse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(getDropValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = getReturnValue(expr)) {\r\n this.push(\"return \");\r\n this.decompileExpression(nested);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"return;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Host: {\r\n switch (getHostOp(expr)) {\r\n case HostOp.CurrentMemory: {\r\n this.push(\"current_memory()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"grow_memory(\");\r\n this.decompileExpression(getHostOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Nop: {\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Unreachable: {\r\n this.push(\"unreachable()\");\r\n return;\r\n }\r\n case ExpressionId.AtomicCmpxchg:\r\n case ExpressionId.AtomicRMW:\r\n case ExpressionId.AtomicWait:\r\n case ExpressionId.AtomicWake:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n private push(text: string): void {\r\n // mostly here so we can add debugging if necessary\r\n this.text.push(text);\r\n }\r\n\r\n finish(): string {\r\n var ret = this.text.join(\"\");\r\n this.text = [];\r\n return ret;\r\n }\r\n}\r\n\r\nfunction nativeTypeToType(type: NativeType): string {\r\n switch (type) {\r\n case NativeType.None: return \"void\";\r\n case NativeType.I32: return \"i32\";\r\n case NativeType.I64: return \"i64\";\r\n case NativeType.F32: return \"f32\";\r\n case NativeType.F64: return \"f64\";\r\n case NativeType.Unreachable: throw new Error(\"unreachable type\");\r\n case NativeType.Auto: throw new Error(\"auto type\");\r\n default: throw new Error(\"unexpected type\");\r\n }\r\n}\r\n","/**\r\n * Low-level C-like compiler API.\r\n * @module index\r\n *//***/\r\n\r\nimport {\r\n Compiler,\r\n Options,\r\n Target,\r\n Feature\r\n} from \"./compiler\";\r\n\r\nimport {\r\n Decompiler\r\n} from \"./decompiler\";\r\n\r\nimport {\r\n IDLBuilder,\r\n TSDBuilder\r\n} from \"./definitions\";\r\n\r\nimport {\r\n DiagnosticMessage,\r\n DiagnosticCategory,\r\n formatDiagnosticMessage\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module\r\n} from \"./module\";\r\n\r\nimport {\r\n Parser\r\n} from \"./parser\";\r\n\r\nimport {\r\n Program\r\n} from \"./program\";\r\n\r\n/** Parses a source file. If `parser` has been omitted a new one is created. */\r\nexport function parseFile(text: string, path: string, isEntry: bool = false,\r\n parser: Parser | null = null\r\n): Parser {\r\n if (!parser) parser = new Parser();\r\n parser.parseFile(text, path, isEntry);\r\n return parser;\r\n}\r\n\r\n/** Obtains the next required file's path. Returns `null` once complete. */\r\nexport function nextFile(parser: Parser): string | null {\r\n return parser.nextFile();\r\n}\r\n\r\n/** Obtains the next diagnostic message. Returns `null` once complete. */\r\nexport function nextDiagnostic(parser: Parser): DiagnosticMessage | null {\r\n var program = parser.program;\r\n return program.diagnosticsOffset < program.diagnostics.length\r\n ? program.diagnostics[program.diagnosticsOffset++]\r\n : null;\r\n}\r\n\r\n/** Formats a diagnostic message to a string. */\r\nexport { formatDiagnosticMessage as formatDiagnostic };\r\n\r\n/** Tests whether a diagnostic is informatory. */\r\nexport function isInfo(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.INFO;\r\n}\r\n\r\n/** Tests whether a diagnostic is a warning. */\r\nexport function isWarning(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.WARNING;\r\n}\r\n\r\n/** Tests whether a diagnostic is an error. */\r\nexport function isError(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.ERROR;\r\n}\r\n\r\n/** Creates a new set of compiler options. */\r\nexport function createOptions(): Options {\r\n return new Options();\r\n}\r\n\r\n/** Sets the `target` option. */\r\nexport function setTarget(options: Options, target: Target): void {\r\n options.target = target;\r\n}\r\n\r\n/** Sets the `noTreeShaking` option. */\r\nexport function setNoTreeShaking(options: Options, noTreeShaking: bool): void {\r\n options.noTreeShaking = noTreeShaking;\r\n}\r\n\r\n/** Sets the `noAssert` option. */\r\nexport function setNoAssert(options: Options, noAssert: bool): void {\r\n options.noAssert = noAssert;\r\n}\r\n\r\n/** Sets the `importMemory` option. */\r\nexport function setImportMemory(options: Options, importMemory: bool): void {\r\n options.importMemory = importMemory;\r\n}\r\n\r\n/** Sets the `importTable` option. */\r\nexport function setImportTable(options: Options, importTable: bool): void {\r\n options.importTable = importTable;\r\n}\r\n\r\n/** Sets the `sourceMap` option. */\r\nexport function setSourceMap(options: Options, sourceMap: bool): void {\r\n options.sourceMap = sourceMap;\r\n}\r\n\r\n/** Sets the `memoryBase` option. */\r\nexport function setMemoryBase(options: Options, memoryBase: u32): void {\r\n options.memoryBase = memoryBase;\r\n}\r\n\r\n/** Sets a 'globalAliases' value. */\r\nexport function setGlobalAlias(options: Options, name: string, alias: string): void {\r\n var globalAliases = options.globalAliases;\r\n if (!globalAliases) options.globalAliases = globalAliases = new Map();\r\n globalAliases.set(name, alias);\r\n}\r\n\r\n/** Sign extension operations. */\r\nexport const FEATURE_SIGN_EXTENSION = Feature.SIGN_EXTENSION;\r\n/** Mutable global imports and exports. */\r\nexport const FEATURE_MUTABLE_GLOBAL = Feature.MUTABLE_GLOBAL;\r\n\r\n/** Enables a specific feature. */\r\nexport function enableFeature(options: Options, feature: Feature): void {\r\n options.features |= feature;\r\n}\r\n\r\n/** Gives the compiler a hint at the optimize levels that will be used later on. */\r\nexport function setOptimizeLevelHints(options: Options, optimizeLevel: i32, shrinkLevel: i32): void {\r\n options.optimizeLevelHint = optimizeLevel;\r\n options.shrinkLevelHint = shrinkLevel;\r\n}\r\n\r\n/** Finishes parsing. */\r\nexport function finishParsing(parser: Parser): Program {\r\n return parser.finish();\r\n}\r\n\r\n/** Compiles the sources computed by the parser to a module. */\r\nexport function compileProgram(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n}\r\n\r\n/** Decompiles a module to its (low level) source. */\r\nexport function decompileModule(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n}\r\n\r\n/** Builds WebIDL definitions for the specified program. */\r\nexport function buildIDL(program: Program): string {\r\n return IDLBuilder.build(program);\r\n}\r\n\r\n/** Builds TypeScript definitions for the specified program. */\r\nexport function buildTSD(program: Program): string {\r\n return TSDBuilder.build(program);\r\n}\r\n\r\n/** Prefix indicating a library file. */\r\nexport { LIBRARY_PREFIX } from \"./common\";\r\n","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n","const Long = global.Long || require(\"long\");\r\n\r\nglobal.i64_zero = Long.ZERO;\r\n\r\nglobal.i64_one = Long.ONE;\r\n\r\nglobal.i64_new = function(lo, hi) {\r\n return Long.fromBits(lo, hi);\r\n};\r\n\r\nglobal.i64_low = function(value) {\r\n return value.low;\r\n};\r\n\r\nglobal.i64_high = function(value) {\r\n return value.high;\r\n};\r\n\r\nglobal.i64_add = function(left, right) {\r\n return left.add(right);\r\n};\r\n\r\nglobal.i64_sub = function(left, right) {\r\n return left.sub(right);\r\n};\r\n\r\nglobal.i64_mul = function(left, right) {\r\n return left.mul(right);\r\n};\r\n\r\nglobal.i64_div = function(left, right) {\r\n return left.div(right);\r\n};\r\n\r\nglobal.i64_div_u = function(left, right) {\r\n return left.toUnsigned().div(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_rem = function(left, right) {\r\n return left.mod(right);\r\n};\r\n\r\nglobal.i64_rem_u = function(left, right) {\r\n return left.toUnsigned().mod(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_and = function(left, right) {\r\n return left.and(right);\r\n};\r\n\r\nglobal.i64_or = function(left, right) {\r\n return left.or(right);\r\n};\r\n\r\nglobal.i64_xor = function(left, right) {\r\n return left.xor(right);\r\n};\r\n\r\nglobal.i64_shl = function(left, right) {\r\n return left.shl(right);\r\n};\r\n\r\nglobal.i64_shr = function(left, right) {\r\n return left.shr(right);\r\n};\r\n\r\nglobal.i64_shr_u = function(left, right) {\r\n return left.shru(right);\r\n};\r\n\r\nglobal.i64_not = function(value) {\r\n return value.not();\r\n};\r\n\r\nglobal.i64_eq = function(left, right) {\r\n return left.eq(right);\r\n};\r\n\r\nglobal.i64_ne = function(left, right) {\r\n return left.ne(right);\r\n};\r\n\r\nglobal.i64_align = function(value, alignment) {\r\n assert(alignment && (alignment & (alignment - 1)) == 0);\r\n var mask = Long.fromInt(alignment - 1);\r\n return value.add(mask).and(mask.not());\r\n};\r\n\r\nglobal.i64_is_i8 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i8.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i8.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i16 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i16.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i16.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i32 = function(value) {\r\n return (value.high === 0 && value.low >= 0)\r\n || (value.high === -1 && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_u8 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u8.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u16 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u16.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u32 = function(value) {\r\n return value.high === 0;\r\n};\r\n\r\nglobal.i64_is_bool = function(value) {\r\n return value.high === 0 && (value.low === 0 || value.low === 1);\r\n};\r\n\r\nconst minSafeF32 = Long.fromNumber(f32.MIN_SAFE_INTEGER);\r\nconst maxSafeF32 = Long.fromNumber(f32.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f32 = function(value) {\r\n return value.gte(minSafeF32) && value.lte(maxSafeF32);\r\n};\r\n\r\nconst minSafeF64 = Long.fromNumber(f64.MIN_SAFE_INTEGER);\r\nconst maxSafeF64 = Long.fromNumber(f64.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f64 = function(value) {\r\n return value.gte(minSafeF64) && value.lte(maxSafeF64);\r\n};\r\n\r\nglobal.i64_to_f32 = function(value) {\r\n return global.Math.fround(value.toNumber());\r\n};\r\n\r\nglobal.i64_to_f64 = function(value) {\r\n return value.toNumber();\r\n};\r\n\r\nglobal.i64_to_string = function(value, unsigned) {\r\n return (unsigned ? value.toUnsigned() : value).toString(10);\r\n};\r\n","const F64 = new Float64Array(1);\r\nconst F32 = new Float32Array(F64.buffer);\r\nconst I32 = new Int32Array(F64.buffer);\r\n\r\nglobal.f32_as_i32 = function(value) {\r\n F32[0] = value;\r\n return I32[0];\r\n};\r\n\r\nglobal.i32_as_f32 = function(value) {\r\n I32[0] = value;\r\n return F32[0];\r\n};\r\n\r\nglobal.f64_as_i64 = function(value) {\r\n F64[0] = value;\r\n return i64_new(I32[0], I32[1]);\r\n};\r\n\r\nglobal.i64_as_f64 = function(value) {\r\n I32[0] = i64_low(value);\r\n I32[1] = i64_high(value);\r\n return F64[0];\r\n};\r\n","/** @module util *//***/\r\n\r\n/** Reads a 32-bit integer from the specified buffer. */\r\nexport function readI32(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset ]\r\n | buffer[offset + 1] << 8\r\n | buffer[offset + 2] << 16\r\n | buffer[offset + 3] << 24;\r\n}\r\n\r\n/** Writes a 32-bit integer to the specified buffer. */\r\nexport function writeI32(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset ] = value;\r\n buffer[offset + 1] = value >>> 8;\r\n buffer[offset + 2] = value >>> 16;\r\n buffer[offset + 3] = value >>> 24;\r\n}\r\n\r\n/** Reads a 64-bit integer from the specified buffer. */\r\nexport function readI64(buffer: Uint8Array, offset: i32): I64 {\r\n var lo = readI32(buffer, offset);\r\n var hi = readI32(buffer, offset + 4);\r\n return i64_new(lo, hi);\r\n}\r\n\r\n/** Writes a 64-bit integer to the specified buffer. */\r\nexport function writeI64(value: I64, buffer: Uint8Array, offset: i32): void {\r\n writeI32(i64_low(value), buffer, offset);\r\n writeI32(i64_high(value), buffer, offset + 4);\r\n}\r\n\r\n/** Reads a 32-bit float from the specified buffer. */\r\nexport function readF32(buffer: Uint8Array, offset: i32): f32 {\r\n return i32_as_f32(readI32(buffer, offset));\r\n}\r\n\r\n/** Writes a 32-bit float to the specified buffer. */\r\nexport function writeF32(value: f32, buffer: Uint8Array, offset: i32): void {\r\n writeI32(f32_as_i32(value), buffer, offset);\r\n}\r\n\r\n/** Reads a 64-bit float from the specified buffer. */\r\nexport function readF64(buffer: Uint8Array, offset: i32): f64 {\r\n return i64_as_f64(readI64(buffer, offset));\r\n}\r\n\r\n/** Writes a 64-bit float to the specified buffer. */\r\nexport function writeF64(value: f64, buffer: Uint8Array, offset: i32): void {\r\n var valueI64 = f64_as_i64(value);\r\n writeI32(i64_low(valueI64), buffer, offset);\r\n writeI32(i64_high(valueI64), buffer, offset + 4);\r\n}\r\n","/** @module util *//***/\r\n\r\nconst indentX1 = \" \";\r\nconst indentX2 = \" \";\r\nconst indentX4 = \" \";\r\n\r\n/** Creates an indentation matching the number of specified levels. */\r\nexport function indent(sb: string[], level: i32): void {\r\n while (level >= 4) {\r\n sb.push(indentX4);\r\n level -= 4;\r\n }\r\n if (level >= 2) {\r\n sb.push(indentX2);\r\n level -= 2;\r\n }\r\n if (level) {\r\n sb.push(indentX1);\r\n }\r\n}\r\n","/** @module util *//***/\r\n\r\nimport {\r\n CharCode\r\n} from \"./charcode\";\r\n\r\nconst separator = CharCode.SLASH;\r\n\r\n/**\r\n * Normalizes the specified path, removing interior placeholders.\r\n * Expects a posix-compatible relative path (not Windows compatible).\r\n */\r\nexport function normalizePath(path: string): string {\r\n var pos = 0;\r\n var len = path.length;\r\n\r\n // trim leading './'\r\n while (pos + 1 < len &&\r\n path.charCodeAt(pos) == CharCode.DOT &&\r\n path.charCodeAt(pos + 1) == separator\r\n ) {\r\n pos += 2;\r\n }\r\n\r\n if (pos > 0 || len < path.length) {\r\n path = path.substring(pos, len);\r\n len -= pos;\r\n pos = 0;\r\n }\r\n\r\n var atEnd: bool;\r\n while (pos + 1 < len) {\r\n atEnd = false;\r\n\r\n // we are only interested in '/.' sequences ...\r\n if (\r\n path.charCodeAt(pos) == separator &&\r\n path.charCodeAt(pos + 1) == CharCode.DOT\r\n ) {\r\n // '/.' ( '/' | $ )\r\n atEnd = pos + 2 == len;\r\n if (atEnd ||\r\n pos + 2 < len &&\r\n path.charCodeAt(pos + 2) == separator\r\n ) {\r\n path = atEnd\r\n ? path.substring(0, pos)\r\n : path.substring(0, pos) + path.substring(pos + 2);\r\n len -= 2;\r\n continue;\r\n }\r\n\r\n // '/.' ( './' | '.' $ )\r\n atEnd = pos + 3 == len;\r\n if (atEnd && path.charCodeAt(pos + 2) == CharCode.DOT ||\r\n pos + 3 < len &&\r\n path.charCodeAt(pos + 2) == CharCode.DOT &&\r\n path.charCodeAt(pos + 3) == separator\r\n ) {\r\n // find preceeding '/'\r\n let ipos = pos;\r\n while (--ipos >= 0) {\r\n if (path.charCodeAt(ipos) == separator) {\r\n if (pos - ipos != 3 ||\r\n path.charCodeAt(ipos + 1) != CharCode.DOT ||\r\n path.charCodeAt(ipos + 2) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = atEnd\r\n ? path.substring(0, ipos)\r\n : path.substring(0, ipos) + path.substring(pos + 3);\r\n len -= pos + 3 - ipos;\r\n pos = ipos - 1; // incremented again at end of loop\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // if there's no preceeding '/', trim start if non-empty\r\n if (ipos < 0 && pos > 0) {\r\n if (pos != 2 ||\r\n path.charCodeAt(0) != CharCode.DOT ||\r\n path.charCodeAt(1) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = path.substring(pos + 4);\r\n len = path.length;\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n pos++;\r\n }\r\n return len > 0 ? path : \".\";\r\n}\r\n\r\n/** Resolves the specified path relative to the specified origin. */\r\nexport function resolvePath(normalizedPath: string, origin: string): string {\r\n if (normalizedPath.startsWith(\"std/\")) {\r\n return normalizedPath;\r\n }\r\n return normalizePath(\r\n dirname(origin) + String.fromCharCode(separator) + normalizedPath\r\n );\r\n}\r\n\r\n/** Obtains the directory portion of a normalized path. */\r\nexport function dirname(normalizedPath: string): string {\r\n var pos = normalizedPath.length;\r\n while (--pos > 0) {\r\n if (normalizedPath.charCodeAt(pos) == separator) {\r\n return normalizedPath.substring(0, pos);\r\n }\r\n }\r\n return \".\";\r\n}\r\n","/** @module util *//***/\r\n\r\n/** An enum of named character codes. */\r\nexport const enum CharCode {\r\n\r\n NULL = 0,\r\n LINEFEED = 0x0A,\r\n CARRIAGERETURN = 0x0D,\r\n LINESEPARATOR = 0x2028,\r\n PARAGRAPHSEPARATOR = 0x2029,\r\n NEXTLINE = 0x0085,\r\n\r\n SPACE = 0x20,\r\n NONBREAKINGSPACE = 0xA0,\r\n ENQUAD = 0x2000,\r\n EMQUAD = 0x2001,\r\n ENSPACE = 0x2002,\r\n EMSPACE = 0x2003,\r\n THREEPEREMSPACE = 0x2004,\r\n FOURPEREMSPACE = 0x2005,\r\n SIXPEREMSPACE = 0x2006,\r\n FIGURESPACE = 0x2007,\r\n PUNCTUATIONSPACE = 0x2008,\r\n THINSPACE = 0x2009,\r\n HAIRSPACE = 0x200A,\r\n ZEROWIDTHSPACE = 0x200B,\r\n NARROWNOBREAKSPACE = 0x202F,\r\n IDEOGRAPHICSPACE = 0x3000,\r\n MATHEMATICALSPACE = 0x205F,\r\n OGHAM = 0x1680,\r\n\r\n _ = 0x5F,\r\n\r\n _0 = 0x30,\r\n _1 = 0x31,\r\n _2 = 0x32,\r\n _3 = 0x33,\r\n _4 = 0x34,\r\n _5 = 0x35,\r\n _6 = 0x36,\r\n _7 = 0x37,\r\n _8 = 0x38,\r\n _9 = 0x39,\r\n\r\n a = 0x61,\r\n b = 0x62,\r\n c = 0x63,\r\n d = 0x64,\r\n e = 0x65,\r\n f = 0x66,\r\n g = 0x67,\r\n h = 0x68,\r\n i = 0x69,\r\n j = 0x6A,\r\n k = 0x6B,\r\n l = 0x6C,\r\n m = 0x6D,\r\n n = 0x6E,\r\n o = 0x6F,\r\n p = 0x70,\r\n q = 0x71,\r\n r = 0x72,\r\n s = 0x73,\r\n t = 0x74,\r\n u = 0x75,\r\n v = 0x76,\r\n w = 0x77,\r\n x = 0x78,\r\n y = 0x79,\r\n z = 0x7A,\r\n\r\n A = 0x41,\r\n B = 0x42,\r\n C = 0x43,\r\n D = 0x44,\r\n E = 0x45,\r\n F = 0x46,\r\n G = 0x47,\r\n H = 0x48,\r\n I = 0x49,\r\n J = 0x4A,\r\n K = 0x4B,\r\n L = 0x4C,\r\n M = 0x4D,\r\n N = 0x4E,\r\n O = 0x4F,\r\n P = 0x50,\r\n Q = 0x51,\r\n R = 0x52,\r\n S = 0x53,\r\n T = 0x54,\r\n U = 0x55,\r\n V = 0x56,\r\n W = 0x57,\r\n X = 0x58,\r\n Y = 0x59,\r\n Z = 0x5a,\r\n\r\n AMPERSAND = 0x26,\r\n ASTERISK = 0x2A,\r\n AT = 0x40,\r\n BACKSLASH = 0x5C,\r\n BACKTICK = 0x60,\r\n BAR = 0x7C,\r\n CARET = 0x5E,\r\n CLOSEBRACE = 0x7D,\r\n CLOSEBRACKET = 0x5D,\r\n CLOSEPAREN = 0x29,\r\n COLON = 0x3A,\r\n COMMA = 0x2C,\r\n DOLLAR = 0x24,\r\n DOT = 0x2E,\r\n DOUBLEQUOTE = 0x22,\r\n EQUALS = 0x3D,\r\n EXCLAMATION = 0x21,\r\n GREATERTHAN = 0x3E,\r\n HASH = 0x23,\r\n LESSTHAN = 0x3C,\r\n MINUS = 0x2D,\r\n OPENBRACE = 0x7B,\r\n OPENBRACKET = 0x5B,\r\n OPENPAREN = 0x28,\r\n PERCENT = 0x25,\r\n PLUS = 0x2B,\r\n QUESTION = 0x3F,\r\n SEMICOLON = 0x3B,\r\n SINGLEQUOTE = 0x27,\r\n SLASH = 0x2F,\r\n TILDE = 0x7E,\r\n\r\n BACKSPACE = 0x08,\r\n FORMFEED = 0x0C,\r\n BYTEORDERMARK = 0xFEFF,\r\n TAB = 0x09,\r\n VERTICALTAB = 0x0B\r\n}\r\n\r\n/** Tests if the specified character code is some sort of line break. */\r\nexport function isLineBreak(c: CharCode): bool {\r\n switch (c) {\r\n case CharCode.LINEFEED:\r\n case CharCode.CARRIAGERETURN:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: {\r\n return true;\r\n }\r\n default: {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is some sort of white space. */\r\nexport function isWhiteSpace(c: i32): bool {\r\n switch (c) {\r\n case CharCode.SPACE:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.NONBREAKINGSPACE:\r\n case CharCode.NEXTLINE:\r\n case CharCode.OGHAM:\r\n case CharCode.NARROWNOBREAKSPACE:\r\n case CharCode.MATHEMATICALSPACE:\r\n case CharCode.IDEOGRAPHICSPACE:\r\n case CharCode.BYTEORDERMARK: {\r\n return true;\r\n }\r\n default: {\r\n return c >= CharCode.ENQUAD && c <= CharCode.ZEROWIDTHSPACE;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is a valid decimal digit. */\r\nexport function isDecimalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._9;\r\n}\r\n\r\n/** Tests if the specified character code is a valid octal digit. */\r\nexport function isOctalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._7;\r\n}\r\n\r\n/** Tests if the specified character code is a valid start of an identifier. */\r\nexport function isIdentifierStart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierStart(c);\r\n}\r\n\r\n/** Tests if the specified character code is a valid keyword character. */\r\nexport function isKeywordCharacter(c: i32): bool {\r\n return c >= CharCode.a && c <= CharCode.z;\r\n}\r\n\r\n/** Tests if the specified character code is a valid part of an identifier. */\r\nexport function isIdentifierPart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c >= CharCode._0 && c <= CharCode._9\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierPart(c);\r\n}\r\n\r\n// storing as u16 to save memory\r\nconst unicodeIdentifierStart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514,\r\n 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774,\r\n 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969,\r\n 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088,\r\n 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384,\r\n 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474,\r\n 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529,\r\n 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613,\r\n 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705,\r\n 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784,\r\n 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873,\r\n 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958,\r\n 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986,\r\n 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125,\r\n 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240,\r\n 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333,\r\n 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455,\r\n 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634,\r\n 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725,\r\n 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757,\r\n 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840,\r\n 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186,\r\n 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293,\r\n 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696,\r\n 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798,\r\n 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992,\r\n 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872,\r\n 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016,\r\n 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389,\r\n 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688,\r\n 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141,\r\n 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424,\r\n 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025,\r\n 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130,\r\n 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188,\r\n 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469,\r\n 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505,\r\n 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520,\r\n 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670,\r\n 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720,\r\n 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540,\r\n 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893,\r\n 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538,\r\n 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888,\r\n 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015,\r\n 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259,\r\n 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520,\r\n 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695,\r\n 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739,\r\n 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798,\r\n 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243,\r\n 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285,\r\n 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323,\r\n 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019,\r\n 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474,\r\n 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\nconst unicodeIdentifierPart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415,\r\n 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520,\r\n 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788,\r\n 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112,\r\n 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423,\r\n 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482,\r\n 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525,\r\n 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602,\r\n 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632,\r\n 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693,\r\n 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757,\r\n 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821,\r\n 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884,\r\n 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929,\r\n 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972,\r\n 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018,\r\n 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088,\r\n 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157,\r\n 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216,\r\n 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285,\r\n 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340,\r\n 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424,\r\n 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515,\r\n 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570,\r\n 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720,\r\n 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751,\r\n 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789,\r\n 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895,\r\n 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028,\r\n 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304,\r\n 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744,\r\n 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808,\r\n 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108,\r\n 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902,\r\n 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099,\r\n 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272,\r\n 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516,\r\n 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783,\r\n 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155,\r\n 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676,\r\n 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027,\r\n 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134,\r\n 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205,\r\n 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417,\r\n 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477,\r\n 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517,\r\n 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559,\r\n 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686,\r\n 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728,\r\n 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449,\r\n 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799,\r\n 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512,\r\n 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783,\r\n 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072,\r\n 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309,\r\n 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584,\r\n 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741,\r\n 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808,\r\n 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203,\r\n 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275,\r\n 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321,\r\n 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008,\r\n 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140,\r\n 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382,\r\n 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\n\r\nfunction lookupInUnicodeMap(code: u16, map: u16[]): bool {\r\n if (code < map[0]) return false;\r\n\r\n var lo = 0;\r\n var hi = map.length;\r\n var mid: i32;\r\n\r\n while (lo + 1 < hi) {\r\n mid = lo + (hi - lo) / 2;\r\n mid -= mid % 2;\r\n if (map[mid] <= code && code <= map[mid + 1]) {\r\n return true;\r\n }\r\n if (code < map[mid]) {\r\n hi = mid;\r\n } else {\r\n lo = mid + 2;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction isUnicodeIdentifierStart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierStart);\r\n}\r\n\r\nfunction isUnicodeIdentifierPart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierPart);\r\n}\r\n","/**\r\n * Built-in elements providing WebAssembly core functionality.\r\n * @module builtins\r\n *//***/\r\n\r\n import {\r\n Compiler,\r\n ConversionKind,\r\n WrapMode\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Expression,\r\n LiteralKind,\r\n LiteralExpression,\r\n StringLiteralExpression\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags\r\n} from \"./types\";\r\n\r\nimport {\r\n BinaryOp,\r\n UnaryOp,\r\n HostOp,\r\n NativeType,\r\n ExpressionRef,\r\n ExpressionId,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI64High,\r\n getConstValueI64Low,\r\n getConstValueI32\r\n} from \"./module\";\r\n\r\nimport {\r\n ElementKind,\r\n FunctionPrototype,\r\n Class,\r\n Field,\r\n OperatorKind,\r\n FlowFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n ReportMode\r\n} from \"./resolver\";\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 (operands.length != 1) {\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 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 compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\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 (operands.length != 1) {\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 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 compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\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 \"current_memory\": { // current_memory() -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.CurrentMemory);\r\n }\r\n case \"grow_memory\": { // grow_memory(pages: i32) -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n arg0 = module.createUnreachable();\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.GrowMemory, null, [ arg0 ]);\r\n }\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n case \"move_memory\": { // move_memory(dest: usize, src: usize: n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.MoveMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n case \"set_memory\": { // set_memory(dest: usize, value: u8, n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n Type.u32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.SetMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n\r\n // other\r\n\r\n case \"changetype\": { // changetype(value: *) -> T\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpressionRetainType(\r\n operands[0],\r\n typeArguments[0],\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.size != typeArguments[0].size) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // if (reportNode.range.source.sourceKind != SourceKind.STDLIB)\r\n // compiler.warning(DiagnosticCode.Operation_is_unsafe, reportNode.range);\r\n return arg0; // any usize to any usize\r\n }\r\n case \"assert\": { // assert(isTrueish: T, message?: string) -> T with T != null\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else if (operands.length > 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.bool, WrapMode.WRAP);\r\n }\r\n\r\n let type = compiler.currentType;\r\n compiler.currentType = type.nonNullableType;\r\n\r\n // just return ifTrueish if assertions are disabled, or simplify if dropped anyway\r\n if (compiler.options.noAssert) {\r\n if (contextualType == Type.void) {\r\n compiler.currentType = Type.void;\r\n return module.createNop();\r\n }\r\n return arg0;\r\n }\r\n\r\n let abort = compileAbort(compiler, operands.length == 2 ? operands[1] : null, reportNode);\r\n\r\n compiler.currentType = type.nonNullableType;\r\n\r\n if (contextualType == Type.void) { // simplify if dropped anyway\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n // TODO: also check for NaN in float assertions, as in `Boolean(NaN) -> false`?\r\n case TypeKind.F32: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n arg0,\r\n module.createF32(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n arg0,\r\n module.createF64(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n default: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.I64)\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F32)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f64, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F64)\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unchecked\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = compiler.currentFunction.flow;\r\n flow.set(FlowFlags.UNCHECKED_CONTEXT);\r\n ret = compiler.compileExpressionRetainType(operands[0], contextualType, WrapMode.NONE);\r\n flow.unset(FlowFlags.UNCHECKED_CONTEXT);\r\n return ret;\r\n }\r\n case \"call_indirect\": { // call_indirect(target: Function | u32, ...args: *[]) -> T\r\n if (operands.length < 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let returnType: Type;\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n returnType = typeArguments[0];\r\n } else {\r\n returnType = contextualType;\r\n }\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n if (compiler.currentType.kind != TypeKind.U32) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let numOperands = operands.length - 1;\r\n let operandExprs = new Array(numOperands);\r\n let signatureParts = new Array(numOperands + 1);\r\n let nativeReturnType = returnType.toNativeType();\r\n let nativeParamTypes = new Array(numOperands);\r\n for (let i = 0; i < numOperands; ++i) {\r\n operandExprs[i] = compiler.compileExpressionRetainType(operands[1 + i], Type.i32, WrapMode.NONE);\r\n let operandType = compiler.currentType;\r\n signatureParts[i] = operandType.toSignatureString();\r\n nativeParamTypes[i] = operandType.toNativeType();\r\n }\r\n signatureParts[numOperands] = returnType.toSignatureString();\r\n let typeName = signatureParts.join(\"\");\r\n let typeRef = module.getFunctionTypeBySignature(nativeReturnType, nativeParamTypes);\r\n if (!typeRef) typeRef = module.addFunctionType(typeName, nativeReturnType, nativeParamTypes);\r\n compiler.currentType = returnType;\r\n // of course this can easily result in a 'RuntimeError: function signature mismatch' trap and\r\n // thus must be used with care. it exists because it *might* be useful in specific scenarios.\r\n return module.createCallIndirect(arg0, operandExprs, typeName);\r\n }\r\n\r\n // conversions\r\n\r\n case \"i8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"isize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"usize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"bool\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.bool;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.bool,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n var expr = deferASMCall(compiler, prototype, operands, contextualType, reportNode);\r\n if (expr) {\r\n if (typeArguments && typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return expr;\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n}\r\n\r\n/** Defers an inline-assembler-like call to a built-in function. */\r\nfunction deferASMCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (prototype.internalName) {\r\n\r\n // TODO: Operators can't be just deferred (don't have a corresponding generic built-in)\r\n // add, sub, mul, div_s, div_u, rem_s, rem_u\r\n // and, or, xor, shl, shr_u, shr_s\r\n // eq, eqz, ne, lt_s, lt_u, le_s, le_u, gt_s, gt_u, ge_s, ge_u\r\n\r\n case \"i32.clz\": return deferASM(\"clz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.clz\": return deferASM(\"clz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.ctz\": return deferASM(\"ctz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.ctz\": return deferASM(\"ctz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.popcnt\": return deferASM(\"popcnt\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.popcnt\": return deferASM(\"popcnt\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotl\": return deferASM(\"rotl\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotl\": return deferASM(\"rotl\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotr\": return deferASM(\"rotr\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotr\": return deferASM(\"rotr\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.abs\": return deferASM(\"abs\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.abs\": return deferASM(\"abs\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.max\": return deferASM(\"max\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.max\": return deferASM(\"max\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.min\": return deferASM(\"min\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.min\": return deferASM(\"min\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.ceil\": return deferASM(\"ceil\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.ceil\": return deferASM(\"ceil\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.floor\": return deferASM(\"floor\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.floor\": return deferASM(\"floor\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.copysign\": return deferASM(\"copysign\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.copysign\": return deferASM(\"copysign\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.nearest\": return deferASM(\"nearest\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.nearest\": return deferASM(\"nearest\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.reinterpret_f32\": return deferASM(\"reinterpret\", compiler, Type.i32, operands, Type.f32, reportNode);\r\n case \"i64.reinterpret_f64\": return deferASM(\"reinterpret\", compiler, Type.i64, operands, Type.f64, reportNode);\r\n case \"f32.reinterpret_i32\": return deferASM(\"reinterpret\", compiler, Type.f32, operands, Type.i32, reportNode);\r\n case \"f64.reinterpret_i64\": return deferASM(\"reinterpret\", compiler, Type.f64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.sqrt\": return deferASM(\"sqrt\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.sqrt\": return deferASM(\"sqrt\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.trunc\": return deferASM(\"trunc\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.trunc\": return deferASM(\"trunc\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u32, reportNode);\r\n case \"i32.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u32, reportNode);\r\n case \"i32.load\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u64, reportNode);\r\n case \"i64.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u64, reportNode);\r\n case \"i64.load32_s\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.load32_u\": return deferASM(\"load\", compiler, Type.u32, operands, Type.u64, reportNode);\r\n case \"i64.load\": return deferASM(\"load\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.load\": return deferASM(\"load\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.load\": return deferASM(\"load\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.store\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.store32\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.store\": return deferASM(\"store\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.store\": return deferASM(\"store\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.store\": return deferASM(\"store\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n }\r\n return 0;\r\n}\r\n\r\n/** A helper for deferring inline-assembler-like calls to built-in functions. */\r\nfunction deferASM(\r\n name: string,\r\n compiler: Compiler,\r\n typeArgument: Type,\r\n operands: Expression[],\r\n valueType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var prototype = assert(compiler.program.elementsLookup.get(name));\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return compileCall(compiler, prototype, [ typeArgument ], operands, valueType, reportNode);\r\n}\r\n\r\n/** Evaluates the constant type of a type argument *or* expression. */\r\nfunction evaluateConstantType(\r\n compiler: Compiler,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n reportNode: Node\r\n): Type | null {\r\n if (operands.length == 0) { // requires type argument\r\n if (!typeArguments || typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return null;\r\n }\r\n return typeArguments[0];\r\n }\r\n if (operands.length == 1) { // optional type argument\r\n if (typeArguments) {\r\n if (typeArguments.length == 1) {\r\n compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n if (typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return null;\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n } else {\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n return compiler.currentType;\r\n }\r\n if (typeArguments && typeArguments.length > 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return null;\r\n}\r\n\r\n/** Evaluates a `constantOffset` argument.*/\r\nfunction evaluateConstantOffset(compiler: Compiler, expression: Expression): i32 {\r\n var expr: ExpressionRef;\r\n var value: i32;\r\n if (compiler.options.isWasm64) {\r\n expr = compiler.precomputeExpression(expression, Type.usize64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I64 ||\r\n getConstValueI64High(expr) != 0 ||\r\n (value = getConstValueI64Low(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n } else {\r\n expr = compiler.precomputeExpression(expression, Type.usize32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I32 ||\r\n (value = getConstValueI32(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n }\r\n return value;\r\n}\r\n\r\nconst allocateInternalName = \"allocate_memory\";\r\n\r\n/** Compiles a memory allocation for an instance of the specified class. */\r\nexport function compileAllocate(\r\n compiler: Compiler,\r\n classInstance: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n assert(classInstance.program == program);\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n\r\n var allocatePrototype = program.elementsLookup.get(allocateInternalName);\r\n if (!allocatePrototype) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, allocateInternalName\r\n );\r\n program.info(\r\n DiagnosticCode.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (allocatePrototype.kind != ElementKind.FUNCTION_PROTOTYPE) {\r\n program.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n reportNode.range, allocatePrototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n var allocateInstance = compiler.resolver.resolveFunction(allocatePrototype, null);\r\n if (!(allocateInstance && compiler.compileFunction(allocateInstance))) return module.createUnreachable();\r\n\r\n compiler.currentType = classInstance.type;\r\n return module.createCall(\r\n allocateInstance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(classInstance.currentMemoryOffset)\r\n : module.createI32(classInstance.currentMemoryOffset)\r\n ],\r\n options.nativeSizeType\r\n );\r\n}\r\n\r\nconst abortInternalName = \"abort\";\r\n\r\n/** Compiles an abort wired to the conditionally imported 'abort' function. */\r\nexport function compileAbort(\r\n compiler: Compiler,\r\n message: Expression | null,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n var module = compiler.module;\r\n\r\n var stringType = program.typesLookup.get(\"string\"); // might be intended\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortPrototype = program.elementsLookup.get(abortInternalName); // might be intended\r\n if (!abortPrototype || abortPrototype.kind != ElementKind.FUNCTION_PROTOTYPE) return module.createUnreachable();\r\n\r\n var abortInstance = compiler.resolver.resolveFunction(abortPrototype, null);\r\n if (!(abortInstance && compiler.compileFunction(abortInstance))) return module.createUnreachable();\r\n\r\n var messageArg = message != null\r\n ? compiler.compileExpression(message, stringType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : stringType.toNativeZero(module);\r\n\r\n var filenameArg = compiler.compileStaticString(reportNode.range.source.normalizedPath);\r\n\r\n compiler.currentType = Type.void;\r\n return module.createBlock(null, [\r\n module.createCallImport(\r\n abortInstance.internalName, [\r\n messageArg,\r\n filenameArg,\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ],\r\n NativeType.None\r\n ),\r\n module.createUnreachable()\r\n ]);\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__24__;","// Copy Binaryen exports to global scope\r\n\r\nconst binaryen = global.Binaryen || require(\"binaryen\");\r\n\r\nfor (var key in binaryen)\r\n if (key.startsWith(\"_Binaryen\") || key.startsWith(\"_Relooper\"))\r\n global[key] = binaryen[key];\r\n\r\n// Utilize Binaryen's heap\r\n\r\nglobal.allocate_memory = function(size) {\r\n if (!size) return 0; // should be safe in our case\r\n return binaryen._malloc(size);\r\n};\r\n\r\nglobal.free_memory = function(ptr) {\r\n if (ptr) binaryen._free(ptr);\r\n};\r\n\r\nglobal.move_memory = function(dest, src, n) {\r\n return binaryen._memmove(dest, src, n);\r\n};\r\n\r\nglobal.store = function(ptr, val) {\r\n binaryen.HEAPU8[ptr] = val;\r\n};\r\n\r\nglobal.load = function(ptr) {\r\n return binaryen.HEAPU8[ptr];\r\n};\r\n\r\n// Implement module stubs\r\n\r\nconst Module = require(\"../../module\").Module;\r\n\r\nModule.prototype.toText = function() {\r\n return new binaryen.Module(this.ref).emitText();\r\n};\r\n\r\nModule.prototype.toAsmjs = function() {\r\n return new binaryen.Module(this.ref).emitAsmjs();\r\n};\r\n","module.exports = globalScope => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n\r\n globalScope[\"allocate_memory\"] = function allocate_memory(size) {\r\n if (!(size >>>= 0)) return 0;\r\n\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7)\r\n HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n\r\n return ptr;\r\n };\r\n\r\n globalScope[\"free_memory\"] = function free_memory(ptr) {\r\n // TODO\r\n };\r\n\r\n globalScope[\"move_memory\"] = function move_memory(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n };\r\n\r\n globalScope[\"store\"] = function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n };\r\n\r\n globalScope[\"load\"] = function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n };\r\n};\r\n","/** @module std/portable *//***/\r\n\r\nvar globalScope = typeof window !== \"undefined\" && window || typeof global !== \"undefined\" && global || self;\r\n\r\nglobalScope.ASC_TARGET = 0;\r\n\r\nObject.defineProperties(\r\n globalScope[\"i8\"] = function i8(value) { return value << 24 >> 24; }\r\n, {\r\n \"MIN_VALUE\": { value: -128, writable: false },\r\n \"MAX_VALUE\": { value: 127, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i16\"] = function i16(value) { return value << 16 >> 16; }\r\n, {\r\n \"MIN_VALUE\": { value: -32768, writable: false },\r\n \"MAX_VALUE\": { value: 32767, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i32\"] = globalScope[\"isize\"] = function i32(value) { return value | 0; }\r\n, {\r\n \"MIN_VALUE\": { value: -2147483648, writable: false },\r\n \"MAX_VALUE\": { value: 2147483647, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u8\"] = function u8(value) { return value & 0xff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 255, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u16\"] = function u16(value) { return value & 0xffff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 65535, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u32\"] = globalScope[\"usize\"] = function u32(value) { return value >>> 0; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 4294967295, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"bool\"] = function bool(value) { return !!value; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 1, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f32\"] = function f32(value) { return Math.fround(value); }\r\n, {\r\n \"MIN_VALUE\": { value: Math.fround(-3.40282347e+38), writable: false },\r\n \"MAX_VALUE\": { value: Math.fround(3.40282347e+38), writable: false },\r\n \"MIN_POSITIVE_VALUE\": { value: Math.fround(1.175494351e-38), writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -16777215, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 16777215, writable: false },\r\n \"EPSILON\": { value: Math.fround(1.19209290e-07), writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f64\"] = function f64(value) { return +value; }\r\n, {\r\n \"MIN_VALUE\": { value: -1.7976931348623157e+308, writable: false },\r\n \"MAX_VALUE\": { value: 1.7976931348623157e+308, writable: false },\r\n \"MIN_POSITIVE_VALUE\": { value: 2.2250738585072014e-308 , writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -9007199254740991, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 9007199254740991, writable: false },\r\n \"EPSILON\": { value: 2.2204460492503131e-16, writable: false }\r\n});\r\n\r\nglobalScope[\"clz\"] = Math.clz32;\r\n\r\nglobalScope[\"ctz\"] = function ctz(value) {\r\n var c = Math.clz32(value & -value);\r\n return value ? 31 - c : c;\r\n};\r\n\r\nglobalScope[\"popcnt\"] = function popcnt(value) {\r\n value -= value >>> 1 & 0x55555555;\r\n value = (value & 0x33333333) + (value >>> 2 & 0x33333333);\r\n return (((value + (value >>> 4)) & 0x0F0F0F0F) * 0x01010101) >>> 24;\r\n};\r\n\r\nglobalScope[\"rotl\"] = function rotl(value, shift) {\r\n shift &= 31;\r\n return (value << shift) | (value >>> (32 - shift));\r\n};\r\n\r\nglobalScope[\"rotr\"] = function rotr(value, shift) {\r\n shift &= 31;\r\n return (value >>> shift) | (value << (32 - shift));\r\n};\r\n\r\nglobalScope[\"abs\"] = Math.abs;\r\n\r\nglobalScope[\"max\"] = Math.max;\r\n\r\nglobalScope[\"min\"] = Math.min;\r\n\r\nglobalScope[\"ceil\"] = Math.ceil;\r\n\r\nglobalScope[\"floor\"] = Math.floor;\r\n\r\n// Adopt code from https://github.com/rfk/wasm-polyfill\r\nglobalScope[\"nearest\"] = function nearest(value) {\r\n if (Math.abs(value - Math.trunc(value)) === 0.5) {\r\n return 2.0 * Math.round(value * 0.5);\r\n }\r\n return Math.round(value);\r\n};\r\n\r\nglobalScope[\"select\"] = function select(ifTrue, ifFalse, condition) {\r\n return condition ? ifTrue : ifFalse;\r\n};\r\n\r\nglobalScope[\"sqrt\"] = Math.sqrt;\r\n\r\nglobalScope[\"trunc\"] = Math.trunc;\r\n\r\nglobalScope[\"copysign\"] = function copysign(x, y) {\r\n return Math.abs(x) * Math.sign(y);\r\n};\r\n\r\nglobalScope[\"bswap\"] = function bswap(value) {\r\n var a = value >> 8 & 0x00FF00FF;\r\n var b = (value & 0x00FF00FF) << 8;\r\n value = a | b;\r\n a = value >> 16 & 0x0000FFFF;\r\n b = (value & 0x0000FFFF) << 16;\r\n return a | b;\r\n};\r\n\r\nglobalScope[\"bswap16\"] = function bswap16(value) {\r\n return ((value << 8) & 0xFF00) | ((value >> 8) & 0x00FF) | (value & 0xFFFF0000);\r\n};\r\n\r\nfunction UnreachableError() {\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, UnreachableError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nUnreachableError.prototype = Object.create(Error.prototype);\r\nUnreachableError.prototype.name = \"UnreachableError\";\r\nUnreachableError.prototype.message = \"unreachable\";\r\n\r\nglobalScope[\"unreachable\"] = function unreachable() {\r\n throw new UnreachableError();\r\n};\r\n\r\nfunction AssertionError(message) {\r\n this.message = message || \"assertion failed\";\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, AssertionError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nAssertionError.prototype = Object.create(Error.prototype);\r\nAssertionError.prototype.name = \"AssertionError\";\r\n\r\nglobalScope[\"assert\"] = function assert(isTrueish, message) {\r\n if (isTrueish) return isTrueish;\r\n throw new AssertionError(message);\r\n};\r\n\r\nglobalScope[\"changetype\"] = function changetype(value) {\r\n return value;\r\n};\r\n\r\nglobalScope[\"parseI32\"] = function parseI32(str, radix) {\r\n return parseInt(str, undefined) | 0;\r\n};\r\n\r\nString[\"fromCharCodes\"] = function fromCharCodes(arr) {\r\n return String.fromCharCode.apply(String, arr);\r\n};\r\n\r\nString[\"fromCodePoints\"] = function fromCodePoints(arr) {\r\n return String.fromCodePoint.apply(String, arr);\r\n};\r\n\r\nglobalScope[\"isInteger\"] = Number.isInteger;\r\n\r\nglobalScope[\"isFloat\"] = function isFloat(arg) {\r\n return typeof arg === \"number\";\r\n};\r\n\r\nglobalScope[\"isReference\"] = function isClass(arg) {\r\n return typeof arg === \"object\" || typeof arg === \"string\";\r\n};\r\n\r\nglobalScope[\"isString\"] = function isString(arg) {\r\n return typeof arg === \"string\" || arg instanceof String;\r\n};\r\n\r\nglobalScope[\"isArray\"] = Array.isArray;\r\n\r\nglobalScope[\"unchecked\"] = function(expr) {\r\n return expr;\r\n};\r\n\r\nglobalScope[\"fmod\"] = function fmod(x, y) {\r\n return x % y;\r\n};\r\n\r\nglobalScope[\"fmodf\"] = function fmodf(x, y) {\r\n return Math.fround(x % y);\r\n};\r\n\r\nglobalScope[\"JSMath\"] = Math;\r\n\r\nrequire(\"./memory\")(globalScope);\r\n","/**\r\n * JavaScript glue code.\r\n * @module glue/js\r\n * @preferred\r\n *//***/\r\n\r\n/// \r\n\r\nimport \"../../../std/portable/index\";\r\nimport \"./binaryen\";\r\nimport \"./float\";\r\nimport \"./i64\";\r\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://assemblyscript/webpack/universalModuleDefinition","webpack://assemblyscript/webpack/bootstrap","webpack://assemblyscript/./src/common.ts","webpack://assemblyscript/./src/diagnostics.ts","webpack://assemblyscript/./src/ast.ts","webpack://assemblyscript/./src/util/index.ts","webpack://assemblyscript/./src/module.ts","webpack://assemblyscript/./src/program.ts","webpack://assemblyscript/./src/types.ts","webpack://assemblyscript/(webpack)/buildin/global.js","webpack://assemblyscript/./src/tokenizer.ts","webpack://assemblyscript/./src/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/./node_modules/long/src/long.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./src/glue/js/float.js","webpack://assemblyscript/./src/util/binary.ts","webpack://assemblyscript/./src/util/text.ts","webpack://assemblyscript/./src/util/path.ts","webpack://assemblyscript/./src/util/charcode.ts","webpack://assemblyscript/./src/builtins.ts","webpack://assemblyscript/external \"binaryen\"","webpack://assemblyscript/./src/glue/js/binaryen.js","webpack://assemblyscript/./std/portable/memory.js","webpack://assemblyscript/./std/portable/index.js","webpack://assemblyscript/./src/glue/js/index.ts"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__24__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","CommonFlags","PATH_DELIMITER","PARENT_SUBST","GETTER_PREFIX","SETTER_PREFIX","INSTANCE_DELIMITER","STATIC_DELIMITER","INNER_DELIMITER","LIBRARY_SUBST","LIBRARY_PREFIX","FILESPACE_PREFIX","DiagnosticCategory","diagnosticMessages_generated_1","util_1","diagnosticMessages_generated_2","diagnosticCategoryToString","category","INFO","WARNING","ERROR","assert","diagnosticCategoryToColor","COLOR_BLUE","COLOR_YELLOW","COLOR_RED","DiagnosticCode","diagnosticCodeToString","COLOR_RESET","DiagnosticMessage","code","message","range","arg0","arg1","arg2","replace","createInfo","createWarning","createError","withRange","toString","source","normalizedPath","line","column","formatDiagnosticContext","useColors","text","len","length","start","end","isLineBreak","charCodeAt","sb","substring","push","join","formatDiagnosticMessage","showContext","DiagnosticEmitter","diagnostics","Array","emitDiagnostic","info","warning","error","common_1","tokenizer_1","Token","Range","NodeKind","nodeIsConstantValue","kind","LITERAL","NULL","TRUE","FALSE","nodeIsCallable","IDENTIFIER","CALL","ELEMENTACCESS","PROPERTYACCESS","nodeIsGenericCallable","Node","parent","flags","NONE","is","flag","isAny","set","createType","typeArguments","isNullable","type","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","extendsType","elem","TypeParameterNode","createParameter","initializer","ParameterNode","parameterKind","createSignature","parameters","returnType","explicitThisType","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","arguments","decoratorKind","decoratorNameToKind","createComment","node","CommentNode","commentKind","expr","IdentifierExpression","createEmptyIdentifierExpression","createArrayLiteralExpression","elements","ArrayLiteralExpression","elementExpressions","nodes","k","setParentIfNotNull","createAssertionExpression","assertionKind","expression","toType","AssertionExpression","createBinaryExpression","operator","left","right","BinaryExpression","createCallExpression","typeArgs","CallExpression","createClassExpression","declaration","ClassExpression","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","element","ElementAccessExpression","elementExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","FunctionExpression","ARROW","createInstanceOfExpression","isType","InstanceOfExpression","createIntegerLiteralExpression","IntegerLiteralExpression","createNewExpression","NewExpression","createNullExpression","NullExpression","createObjectLiteralExpression","names","values","ObjectLiteralExpression","createParenthesizedExpression","ParenthesizedExpression","createPropertyAccessExpression","PropertyAccessExpression","createRegexpLiteralExpression","pattern","RegexpLiteralExpression","patternFlags","createTernaryExpression","condition","ifThen","ifElse","TernaryExpression","createStringLiteralExpression","StringLiteralExpression","createSuperExpression","SuperExpression","createThisExpression","ThisExpression","createTrueExpression","TrueExpression","createUnaryPostfixExpression","operand","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","statements","BlockStatement","createBreakStatement","label","BreakStatement","createClassDeclaration","identifier","typeParameters","implementsTypes","members","decorators","ClassDeclaration","createContinueStatement","ContinueStatement","createDoStatement","statement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","path","ExportStatement","normalizePath","startsWith","resolvePath","internalPath","mangleInternalPath","createExportImportStatement","externalName","ExportImportStatement","createExportMember","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","ifTrue","ifFalse","IfStatement","createImportStatement","decls","ImportStatement","declarations","namespaceName","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createFunctionDeclaration","signature","body","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createNamespaceDeclaration","NamespaceDeclaration","createReturnStatement","ReturnStatement","createSwitchStatement","cases","SwitchStatement","createSwitchCase","SwitchCase","createThrowStatement","ThrowStatement","createTryStatement","catchVariable","catchStatements","finallyStatements","TryStatement","createTypeDeclaration","alias","TypeDeclaration","createVariableStatement","VariableStatement","createVariableDeclaration","VariableDeclaration","createVoidStatement","VoidStatement","createWhileStatement","WhileStatement","CommonTypeNode","_super","__extends","_this","apply","TYPE","TYPEPARAMETER","ParameterKind","PARAMETER","implicitFieldDeclaration","DecoratorKind","SIGNATURE","nameStr","EXTERNAL","GLOBAL","INLINE","OPERATOR","SEALED","UNMANAGED","propStr","OPERATOR_BINARY","OPERATOR_PREFIX","OPERATOR_POSTFIX","CUSTOM","DECORATOR","CommentKind","COMMENT","Expression","LiteralKind","LiteralExpression","literalKind","ARRAY","AssertionKind","ASSERTION","BINARY","CLASS","COMMA","CONSTRUCTOR","FLOAT","FUNCTION","INSTANCEOF","INTEGER","NEW","OBJECT","PARENTHESIZED","REGEXP","TERNARY","STRING","SUPER","THIS","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","isLastStatement","BLOCK","FUNCTIONDECLARATION","METHODDECLARATION","SourceKind","Statement","Source","SOURCE","tokenizer","debugInfoIndex","exportPaths","sourceKind","pos","lastIndexOf","simplePath","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","VARIABLE","NAMESPACEDECLARATION","EXPORT","isTopLevelExport","CLASSDECLARATION","STATIC","needsExplicitExport","member","VariableLikeDeclarationStatement","BREAK","CONTINUE","DO","EMPTY","ENUMDECLARATION","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","FIELDDECLARATION","parameterIndex","FOR","IF","IMPORTDECLARATION","IMPORT","INTERFACEDECLARATION","RETURN","SWITCHCASE","SWITCH","THROW","TRY","TYPEDECLARATION","VARIABLEDECLARATION","VOID","WHILE","asGlobal","endsWith","findDecorator","decorator","__export","NativeType","ExpressionId","compiler_1","_BinaryenTypeNone","_BinaryenTypeInt32","_BinaryenTypeInt64","_BinaryenTypeFloat32","_BinaryenTypeFloat64","_BinaryenTypeUnreachable","_BinaryenTypeAuto","_BinaryenInvalidId","_BinaryenBlockId","_BinaryenIfId","_BinaryenLoopId","_BinaryenBreakId","_BinaryenSwitchId","_BinaryenCallId","_BinaryenCallImportId","_BinaryenCallIndirectId","_BinaryenGetLocalId","_BinaryenSetLocalId","_BinaryenGetGlobalId","_BinaryenSetGlobalId","_BinaryenLoadId","_BinaryenStoreId","_BinaryenConstId","_BinaryenUnaryId","_BinaryenBinaryId","_BinaryenSelectId","_BinaryenDropId","_BinaryenReturnId","_BinaryenHostId","_BinaryenNopId","_BinaryenUnreachableId","_BinaryenAtomicCmpxchgId","_BinaryenAtomicRMWId","_BinaryenAtomicWaitId","_BinaryenAtomicWakeId","UnaryOp","_BinaryenClzInt32","_BinaryenCtzInt32","_BinaryenPopcntInt32","_BinaryenNegFloat32","_BinaryenAbsFloat32","_BinaryenCeilFloat32","_BinaryenFloorFloat32","_BinaryenTruncFloat32","_BinaryenNearestFloat32","_BinaryenSqrtFloat32","_BinaryenEqZInt32","_BinaryenClzInt64","_BinaryenCtzInt64","_BinaryenPopcntInt64","_BinaryenNegFloat64","_BinaryenAbsFloat64","_BinaryenCeilFloat64","_BinaryenFloorFloat64","_BinaryenTruncFloat64","_BinaryenNearestFloat64","_BinaryenSqrtFloat64","_BinaryenEqZInt64","_BinaryenExtendSInt32","_BinaryenExtendUInt32","_BinaryenWrapInt64","_BinaryenTruncSFloat32ToInt32","_BinaryenTruncSFloat32ToInt64","_BinaryenTruncUFloat32ToInt32","_BinaryenTruncUFloat32ToInt64","_BinaryenTruncSFloat64ToInt32","_BinaryenTruncSFloat64ToInt64","_BinaryenTruncUFloat64ToInt32","_BinaryenTruncUFloat64ToInt64","_BinaryenReinterpretFloat32","_BinaryenReinterpretFloat64","_BinaryenConvertSInt32ToFloat32","_BinaryenConvertSInt32ToFloat64","_BinaryenConvertUInt32ToFloat32","_BinaryenConvertUInt32ToFloat64","_BinaryenConvertSInt64ToFloat32","_BinaryenConvertSInt64ToFloat64","_BinaryenConvertUInt64ToFloat32","_BinaryenConvertUInt64ToFloat64","_BinaryenPromoteFloat32","_BinaryenDemoteFloat64","_BinaryenReinterpretInt32","_BinaryenReinterpretInt64","_BinaryenExtendS8Int32","_BinaryenExtendS16Int32","_BinaryenExtendS8Int64","_BinaryenExtendS16Int64","_BinaryenExtendS32Int64","BinaryOp","_BinaryenAddInt32","_BinaryenSubInt32","_BinaryenMulInt32","_BinaryenDivSInt32","_BinaryenDivUInt32","_BinaryenRemSInt32","_BinaryenRemUInt32","_BinaryenAndInt32","_BinaryenOrInt32","_BinaryenXorInt32","_BinaryenShlInt32","_BinaryenShrUInt32","_BinaryenShrSInt32","_BinaryenRotLInt32","_BinaryenRotRInt32","_BinaryenEqInt32","_BinaryenNeInt32","_BinaryenLtSInt32","_BinaryenLtUInt32","_BinaryenLeSInt32","_BinaryenLeUInt32","_BinaryenGtSInt32","_BinaryenGtUInt32","_BinaryenGeSInt32","_BinaryenGeUInt32","_BinaryenAddInt64","_BinaryenSubInt64","_BinaryenMulInt64","_BinaryenDivSInt64","_BinaryenDivUInt64","_BinaryenRemSInt64","_BinaryenRemUInt64","_BinaryenAndInt64","_BinaryenOrInt64","_BinaryenXorInt64","_BinaryenShlInt64","_BinaryenShrUInt64","_BinaryenShrSInt64","_BinaryenRotLInt64","_BinaryenRotRInt64","_BinaryenEqInt64","_BinaryenNeInt64","_BinaryenLtSInt64","_BinaryenLtUInt64","_BinaryenLeSInt64","_BinaryenLeUInt64","_BinaryenGtSInt64","_BinaryenGtUInt64","_BinaryenGeSInt64","_BinaryenGeUInt64","_BinaryenAddFloat32","_BinaryenSubFloat32","_BinaryenMulFloat32","_BinaryenDivFloat32","_BinaryenCopySignFloat32","_BinaryenMinFloat32","_BinaryenMaxFloat32","_BinaryenEqFloat32","_BinaryenNeFloat32","_BinaryenLtFloat32","_BinaryenLeFloat32","_BinaryenGtFloat32","_BinaryenGeFloat32","_BinaryenAddFloat64","_BinaryenSubFloat64","_BinaryenMulFloat64","_BinaryenDivFloat64","_BinaryenCopySignFloat64","_BinaryenMinFloat64","_BinaryenMaxFloat64","_BinaryenEqFloat64","_BinaryenNeFloat64","_BinaryenLtFloat64","_BinaryenLeFloat64","_BinaryenGtFloat64","_BinaryenGeFloat64","HostOp","_BinaryenPageSize","_BinaryenCurrentMemory","_BinaryenGrowMemory","_BinaryenHasFeature","AtomicRMWOp","_BinaryenAtomicRMWAdd","_BinaryenAtomicRMWSub","_BinaryenAtomicRMWAnd","_BinaryenAtomicRMWOr","_BinaryenAtomicRMWXor","_BinaryenAtomicRMWXchg","MemorySegment","buffer","offset","segment","Module","cachedTemporaryName","hasTemporaryFunction","cachedPrecomputeName","cachedPrecomputeNames","ref","_BinaryenModuleCreate","cachedByValue","allocate_memory","createFrom","cArr","allocU8Array","_BinaryenModuleRead","free_memory","changetype","addFunctionType","result","paramTypes","cStr","allocString","allocI32Array","_BinaryenAddFunctionType","getFunctionTypeBySignature","_BinaryenGetFunctionTypeBySignature","removeFunctionType","_BinaryenRemoveFunctionType","createI32","out","_BinaryenLiteralInt32","_BinaryenConst","createI64","valueLow","valueHigh","_BinaryenLiteralInt64","createF32","_BinaryenLiteralFloat32","createF64","_BinaryenLiteralFloat64","createUnary","op","_BinaryenUnary","createBinary","_BinaryenBinary","createHost","operands","allocPtrArray","_BinaryenHost","createGetLocal","index","_BinaryenGetLocal","createTeeLocal","_BinaryenTeeLocal","createGetGlobal","_BinaryenGetGlobal","createLoad","bytes","signed","ptr","_BinaryenLoad","createStore","_BinaryenStore","createAtomicLoad","_BinaryenAtomicLoad","createAtomicStore","_BinaryenAtomicStore","createAtomicRMW","_BinaryenAtomicRMW","createAtomicCmpxchg","expected","replacement","_BinaryenAtomicCmpxchg","createAtomicWait","timeout","expectedType","_BinaryenAtomicWait","createAtomicWake","wakeCount","_BinaryenAtomicWake","createSetLocal","_BinaryenSetLocal","createSetGlobal","_BinaryenSetGlobal","createBlock","children","None","_BinaryenBlock","createBreak","_BinaryenBreak","createDrop","_BinaryenDrop","createLoop","_BinaryenLoop","createIf","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","defaultName","numNames","strs","_BinaryenSwitch","createCall","target","_BinaryenCall","createCallImport","_BinaryenCallImport","createCallIndirect","typeName","_BinaryenCallIndirect","createUnreachable","_BinaryenUnreachable","addGlobal","mutable","_BinaryenAddGlobal","addFunction","varTypes","_BinaryenAddFunction","removeFunction","_BinaryenRemoveFunction","addTemporaryFunction","tempName","typeRef","removeTemporaryFunction","addFunctionExport","internalName","cStr1","cStr2","_BinaryenAddFunctionExport","addTableExport","_BinaryenAddTableExport","addMemoryExport","_BinaryenAddMemoryExport","addGlobalExport","_BinaryenAddGlobalExport","removeExport","_BinaryenRemoveExport","addFunctionImport","externalModuleName","externalBaseName","functionType","cStr3","_BinaryenAddFunctionImport","addTableImport","_BinaryenAddTableImport","addMemoryImport","_BinaryenAddMemoryImport","addGlobalImport","globalType","_BinaryenAddGlobalImport","removeImport","_BinaryenRemoveImport","setMemory","initial","maximum","segments","exportName","segs","offs","sizs","Target","WASM64","i64_low","i64_high","cArr1","cArr2","cArr3","_BinaryenSetMemory","setFunctionTable","funcs","_BinaryenSetFunctionTable","setStart","func","_BinaryenSetStart","setOptimizeLevel","level","_BinaryenSetOptimizeLevel","setShrinkLevel","_BinaryenSetShrinkLevel","setDebugInfo","on","_BinaryenSetDebugInfo","optimize","_BinaryenFunctionOptimize","_BinaryenModuleOptimize","runPasses","passes","_BinaryenFunctionRunPasses","_BinaryenModuleRunPasses","precomputeFunction","validate","_BinaryenModuleValidate","interpret","_BinaryenModuleInterpret","toBinary","sourceMapUrl","binaryPtr","sourceMapPtr","_BinaryenModuleAllocateAndWrite","readInt","binaryBytes","ret","BinaryModule","output","Uint8Array","load","readBuffer","sourceMap","readString","toText","Error","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","i32","MAX_VALUE","nested1","nested2","_BinaryenExpressionGetId","Const","_BinaryenExpressionGetType","I32","_BinaryenConstGetValueI32","I64","_BinaryenConstGetValueI64Low","_BinaryenConstGetValueI64High","F32","_BinaryenConstGetValueF32","F64","_BinaryenConstGetValueF64","GetLocal","_BinaryenGetLocalGetIndex","GetGlobal","globalName","_BinaryenGetGlobalGetName","Load","_BinaryenLoadGetPtr","_BinaryenLoadIsAtomic","_BinaryenLoadGetBytes","_BinaryenLoadGetOffset","_BinaryenLoadIsSigned","_BinaryenLoadGetAlign","Unary","_BinaryenUnaryGetValue","_BinaryenUnaryGetOp","Binary","_BinaryenBinaryGetLeft","_BinaryenBinaryGetRight","_BinaryenBinaryGetOp","addDebugInfoFile","_BinaryenModuleAddDebugInfoFileName","getDebugInfoFile","_BinaryenModuleGetDebugInfoFileName","setDebugLocation","fileIndex","lineNumber","columnNumber","_BinaryenFunctionSetDebugLocation","MAX_MEMORY_WASM32","MAX_MEMORY_WASM64","getExpressionId","getExpressionType","getConstValueI32","getConstValueI64Low","getConstValueI64High","getConstValueF32","getConstValueF64","getGetLocalIndex","getSetLocalIndex","_BinaryenSetLocalGetIndex","getSetLocalValue","_BinaryenSetLocalGetValue","isTeeLocal","_BinaryenSetLocalIsTee","getBinaryOp","getBinaryLeft","getBinaryRight","getUnaryOp","getUnaryValue","getLoadBytes","getLoadOffset","getLoadPtr","isLoadSigned","getStoreBytes","_BinaryenStoreGetBytes","getStoreOffset","_BinaryenStoreGetOffset","getStorePtr","_BinaryenStoreGetPtr","getStoreValue","_BinaryenStoreGetValue","getBlockName","_BinaryenBlockGetName","getBlockChildCount","_BinaryenBlockGetNumChildren","getBlockChild","_BinaryenBlockGetChild","getIfCondition","_BinaryenIfGetCondition","getIfTrue","_BinaryenIfGetIfTrue","getIfFalse","_BinaryenIfGetIfFalse","getLoopName","_BinaryenLoopGetName","getLoopBody","_BinaryenLoopGetBody","getBreakName","_BinaryenBreakGetName","getBreakCondition","_BinaryenBreakGetCondition","getSelectThen","_BinaryenSelectGetIfTrue","getSelectElse","_BinaryenSelectGetIfFalse","getSelectCondition","_BinaryenSelectGetCondition","getDropValue","_BinaryenDropGetValue","getReturnValue","_BinaryenReturnGetValue","getCallTarget","_BinaryenCallGetTarget","getHostOp","_BinaryenHostGetOp","getHostOperandCount","_BinaryenHostGetNumOperands","getHostOperand","_BinaryenHostGetOperand","getHostName","_BinaryenHostGetNameOperand","getFunctionBody","_BinaryenFunctionGetBody","getFunctionName","_BinaryenFunctionGetName","getFunctionParamCount","_BinaryenFunctionGetNumParams","getFunctionParamType","_BinaryenFunctionGetParam","getFunctionResultType","_BinaryenFunctionGetResult","relooper","_RelooperCreate","addBlock","_RelooperAddBlock","addBranch","from","to","_RelooperAddBranch","addBlockWithSwitch","_RelooperAddBlockWithSwitch","addBranchForSwitch","indexes","_RelooperAddBranchForSwitch","renderAndDispose","entry","labelHelper","_RelooperRenderAndDispose","u8s","numValues","idx","store","i32s","val","ptrs","str","u","stringLengthUTF8","cp","u1","u2","u3","u4","arr","String","fromCodePoints","OperatorKind","diagnostics_1","types_1","ast_1","module_1","resolver_1","QueuedImport","QueuedExport","TypeAlias","operatorKindFromDecorator","arg","INDEXED_GET","INDEXED_SET","UNCHECKED_INDEXED_GET","UNCHECKED_INDEXED_SET","ADD","SUB","MUL","POW","DIV","REM","BITWISE_AND","BITWISE_OR","BITWISE_XOR","EQ","NE","GT","GE","BITWISE_SHR","BITWISE_SHR_U","LT","LE","BITWISE_SHL","PLUS","PREFIX_INC","MINUS","PREFIX_DEC","NOT","BITWISE_NOT","POSTFIX_INC","POSTFIX_DEC","INVALID","ElementKind","DecoratorFlags","noTypesYet","Map","Program","diagnosticsOffset","elementsLookup","instancesLookup","typesLookup","typeAliases","fileLevelExports","moduleLevelExports","arrayPrototype","stringInstance","mainFunction","resolver","Resolver","sources","getSource","lookupSourceByPath","normalizedPathWithoutExtension","tmp","initialize","options","Type","i8","i16","i64","isizeType","u8","u16","u32","u64","usizeType","bool","f32","f64","void","setConstantInteger","i64_new","isWasm64","noTreeShaking","noAssert","memoryBase","optimizeLevelHint","shrinkLevelHint","hasFeature","queuedImports","queuedExports","queuedExtends","queuedImplements","filespace","Filespace","currentFilespace","j","initializeClass","initializeEnum","initializeExports","initializeFunction","initializeImports","initializeInterface","initializeNamespace","initializeTypeAlias","initializeVariables","queuedImport","tryLocateImport","localName","splice","externalNameAlt","Module_0_has_no_exported_member_1","queuedExports_1","__values","queuedExports_1_1","next","done","_c","__read","queuedExport","currentExport","isReExport","setExportAndCheckLibrary","Cannot_find_name_0","derivedPrototype","derivedDeclaration","derivedType","baseElement","resolveIdentifier","CLASS_PROTOTYPE","basePrototype","A_class_may_only_extend_another_class","globalAliases","globalAliases_1","globalAliases_1_1","_d","stringPrototype","resolveClass","has","Duplicate_identifier_0","programLevelInternalName","FUNCTION_PROTOTYPE","startFunction","GENERIC","AMBIENT","MAIN","Global","withConstantIntegerValue","setConstantFloat","withConstantFloatValue","queuedNamedExports","checkDecorators","acceptedFlags","presentFlags","decoratorKindToFlag","Duplicate_decorator","Decorator_0_is_not_valid_here","checkGlobal","parentNode","hasDecorator","BUILTIN","isLibrary","namespace","fileLevelInternalName","simpleName","ClassPrototype","numImplementsTypes","Unmanaged_classes_cannot_implement_interfaces","Operation_not_supported","MODULE_EXPORT","Export_declaration_conflicts_with_exported_declaration_of_0","isEntry","memberDeclarations","memberDeclaration","initializeField","GET","SET","initializeAccessor","initializeMethod","classPrototype","isInterface","INTERFACE_PROTOTYPE","staticField","ABSTRACT","instanceMembers","instanceField","FieldPrototype","decoratorFlags","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperatorOverloads","numArgs","firstArg","overloads","overloadPrototypes","Duplicate_function_implementation","operatorKind","String_literal_expected","Expected_0_arguments_but_got_1","internalPropertyName","propertyElement","isGetter","isNew","PROPERTY","getterPrototype","setterPrototype","Property","baseName","staticName","staticPrototype","instanceName","instancePrototype","Enum","initializeEnumValue","enm","EnumValue","initializeExport","prefix","FILESPACE","referencedName","referencedElement","seen","Set","add","initializeImport","indexPart","InterfacePrototype","parentNamespace","Namespace","existingExport","Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local","global_1","Element","program","NAMESPACE","ENUM","ENUMVALUE","constantValue","ConstantValueKind","VariableLikeElement","constantValueKind","constantIntegerValue","CONST","INLINED","constantFloatValue","Parameter","Local","LOCAL","scopedGlobal","instances","classTypeArguments","Function","contextualTypeArguments","localsByName","localsByIndex","additionalLocals","breakContext","debugLocations","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","DECLARE","localIndex","INSTANCE","local","thisType","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","_b","inheritedName","inheritedType","parameterTypes","parameterType","parameterName","getParameterName","flow","Flow","addLocal","getTempLocal","wrapped","temps","toNativeType","pop","setLocalWrapped","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","debugLocation","debugInfoRef","FunctionTarget","FUNCTION_TARGET","toSignatureString","asFunction","FIELD_PROTOTYPE","Field","FIELD","memoryOffset","Class","base","currentMemoryOffset","constructorInstance","asClass","inheritedTypeArguments_2","inheritedTypeArguments_2_1","baseType","isAssignableTo","current","lookupOverload","unchecked","uncheckedOverload","instance","overload","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","returnLabel","wrappedLocals","wrappedLocalsExt","unset","fork","branch","slice","free","scopedLocal","SCOPED","addScopedLocal","existingLocal","addScopedLocalAlias","scopedAlias","getScopedLocal","isLocalWrapped","map","ext","i64_ne","i64_and","i64_shl","i64_one","i64_zero","off","i64_or","i64_not","inherit","other","inheritConditional","inheritMutual","leftExt","rightExt","thisExt","minLength","min","canOverflow","canConversionOverflow","SetLocal","EqI32","EqI64","EqF32","EqF64","NeI32","NeI64","NeF32","NeF64","LtI32","LtU32","LtI64","LtU64","LtF32","LtF64","LeI32","LeU32","LeI64","LeU64","LeF32","LeF64","GtI32","GtU32","GtI64","GtU64","GtF32","GtF64","GeI32","GeU32","GeI64","GeU64","GeF32","GeF64","MulI32","AndI32","computeSmallIntegerMask","ShlI32","shift","size","ShrI32","ShrU32","DivU32","RemI32","RemU32","EqzI32","EqzI64","ClzI32","CtzI32","PopcntI32","MIN_VALUE","fromType","Block","last","If","Select","Call","Unreachable","fromSize","byteSize","toSize","TypeKind","TypeFlags","cachedNullableType","ceil","classReference","signatureReference","nonNullableType","isize64","isize32","usize64","usize32","computeSmallIntegerShift","targetType","classType","asNullable","signednessIsRelevant","currentClass","targetClass","targetFunction","commonCompatible","signednessIsImportant","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","typesToNativeTypes","types","numTypes","typesToString","Signature","cachedFunctionTarget","parameterNames","requiredParameters","hasRest","getDefaultParameterName","thisThisType","targetThisType","thisParameterTypes","targetParameterTypes","numParameters","thisParameterType","targetParameterType","thisReturnType","targetReturnType","makeSignatureString","includeThis","optionalStart","restIndex","cachedDefaultParameterNames","g","eval","e","window","IdentifierHandling","tokenFromKeyword","AS","ASYNC","AWAIT","CASE","CATCH","DEBUGGER","DEFAULT","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","IS","KEYOF","LET","MODULE","OF","PACKAGE","PRIVATE","PROTECTED","PUBLIC","READONLY","TYPEOF","VAR","WITH","YIELD","tokenIsAlsoIdentifier","token","operatorTokenToString","DOT_DOT_DOT","LESSTHAN","GREATERTHAN","LESSTHAN_EQUALS","GREATERTHAN_EQUALS","EQUALS_EQUALS","EXCLAMATION_EQUALS","EQUALS_EQUALS_EQUALS","EXCLAMATION_EQUALS_EQUALS","ASTERISK_ASTERISK","ASTERISK","SLASH","PERCENT","PLUS_PLUS","MINUS_MINUS","LESSTHAN_LESSTHAN","GREATERTHAN_GREATERTHAN","GREATERTHAN_GREATERTHAN_GREATERTHAN","AMPERSAND","BAR","CARET","EXCLAMATION","TILDE","AMPERSAND_AMPERSAND","BAR_BAR","EQUALS","PLUS_EQUALS","MINUS_EQUALS","ASTERISK_EQUALS","ASTERISK_ASTERISK_EQUALS","SLASH_EQUALS","PERCENT_EQUALS","LESSTHAN_LESSTHAN_EQUALS","GREATERTHAN_GREATERTHAN_EQUALS","GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS","AMPERSAND_EQUALS","BAR_EQUALS","CARET_EQUALS","a","b","Tokenizer","tokenPos","nextToken","nextTokenPos","nextTokenOnNewLine","onComment","identifierHandling","unsafeNext","maxTokenLength","STRINGLITERAL","OPENPAREN","CLOSEPAREN","isDecimalDigit","FLOATLITERAL","DOT","commentStartPos","LINE","TRIPLE","closed","_0_expected","testInteger","INTEGERLITERAL","COLON","SEMICOLON","EQUALS_GREATERTHAN","QUESTION","OPENBRACKET","CLOSEBRACKET","OPENBRACE","CLOSEBRACE","AT","isIdentifierStart","isKeywordCharacter","posBefore","isIdentifierPart","keywordToken","ALWAYS","PREFER","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skipIdentifier","skip","skipIdentifierName","mark","state","reusableState","State","discard","reset","readIdentifier","quote","Unterminated_string_literal","readEscapeSequence","Unexpected_end_of_text","readExtendedUnicodeEscape","readUnicodeEscape","fromCharCode","readRegexpPattern","escaped","Unterminated_regular_expression_literal","readRegexpFlags","Invalid_regular_expression_flags","readInteger","readHexInteger","readBinaryInteger","readOctalInteger","isOctalDigit","Octal_literals_are_not_allowed_in_strict_mode","readDecimalInteger","i64_16","sepEnd","i64_add","i64_mul","Numeric_separators_are_not_allowed_here","Multiple_consecutive_numeric_separators_are_not_permitted","Hexadecimal_digit_expected","i64_10","Digit_expected","i64_8","Octal_digit_expected","i64_2","i64_1","Binary_digit_expected","readFloat","readDecimalFloat","parseFloat","readHexFloat","remain","value32","invalid","An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive","Unterminated_Unicode_escape_sequence","finish","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","resolveFunction","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","f32ModInstance","f64ModInstance","f32PowInstance","f64PowInstance","max","compile","startFunctionInstance","startFunctionBody","compileSource","funcRef","ensureFunctionType","i64_align","numPages","i64_shr_u","functionTableSize","functionTableExported","entries","compileSourceByPath","File_0_not_found","COMPILED","isGeneric","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","initExpr","resolvedType","compileExpressionRetainType","Type_0_is_not_assignable_to_type_1","nativeType","isConstant","MODULE_IMPORT","mangleImportName","initializeInStart","compileInlineConstant","compileExpression","precomputeExpressionRef","Compiling_constant_with_non_constant_initializer_as_mutable","mangleExportName","isTopLevel","compileEnum","previousValue","initInStart","valueDeclaration","AddI32","Cannot_export_a_mutable_global","compileFunctionUsingTypeArguments","compileFunction","resultType","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","isConstructor","stmts","compileStatements","unshift","nativeSizeType","makeConditionalAllocate","A_function_whose_declared_type_is_not_void_must_return_a_value","ensureTrampoline","ensureArgcSet","compileInterfaceDeclaration","compileNamespace","compileClassUsingTypeArguments","internalExportName","functionInstance","functionDeclaration","globalDeclaration","compileClass","staticMembers","setter","ctorInstance","getterName","setterName","addMemorySegment","alignment","ensureFunctionTableEntry","TRAMPOLINE","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileVoidStatement","compileWhileStatement","addDebugLocation","numStatements","Nop","A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement","A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement","condExpr","makeIsTrueish","terminated","repeatLabel","alwaysTrue","condPre","incrExpr","bodyExpr","usesContinue","breakBlock","repeatBlock","GENERIC_CONTEXT","condExprPrecomp","ifTrueFlow","ifTrueExpr","ifFalseExpr","ifFalseFlow","numCases","tempLocal","tempLocalIndex","breaks","breakIndex","defaultIndex","currentBlock","alwaysReturns","alwaysReturnsWrapped","alwaysThrows","alwaysAllocates","isLast","nextLabel","count","compileAbort","isKnownGlobal","numDeclarations","initializers","isInlined","_const_declarations_must_be_initialized","compileAssignmentWithValue","contextualType","retainType","mask","conversionKind","wrapMode","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileInstanceOfExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","ensureSmallIntegerWrap","precomputeExpression","Conversion_from_type_0_to_1_requires_an_explicit_cast","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","leftExpr","leftType","rightExpr","rightType","commonType","compound","compileBinaryOverload","Operator_0_cannot_be_applied_to_types_1_and_2","compileAssignment","AddI64","AddF32","AddF64","SubI32","SubI64","SubF32","SubF64","MulI64","MulF32","MulF64","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","ctor","Constructor_of_class_0_must_not_require_any_arguments","Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration","Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration","hasErrors","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","builtinsFile","Parser","backlog","seenlog","donelog","tryParseSignatureIsSignature","parseParametersThis","parseFile","indexOf","tn","parseTopLevelStatement","startPos","parseDecorator","skipStatement","exportStart","exportEnd","contextIsAmbient","A_declare_modifier_cannot_be_used_in_an_already_ambient_context","first","parseEnum","parseVariable","parseFunction","parseStatement","parseClassOrInterface","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","Decorators_are_not_valid_here","nextFile","clear","parseType","acceptParenthesized","suppressErrors","isNullableSignature","tryParseSignature","Unexpected_token","innerType","Identifier_expected","nullable","parameter","bracketStart","bracketRange","isSignature","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","Long","wasm","WebAssembly","Instance","low","high","unsigned","isLong","obj","__isLong__","INT_CACHE","UINT_CACHE","fromInt","cachedObj","cache","fromBits","fromNumber","isNaN","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","Math","pow","fromString","radix","RangeError","radixToPower","parseInt","power","mul","fromValue","TWO_PWR_16_DBL","TWO_PWR_24","ONE","UONE","NEG_ONE","LongPrototype","toInt","toNumber","isZero","isNegative","eq","radixLong","div","rem1","sub","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","equals","notEquals","neq","ne","lessThan","comp","lt","lessThanOrEqual","lte","le","greaterThan","gt","greaterThanOrEqual","gte","ge","compare","thisNeg","otherNeg","negate","not","addend","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","subtract","subtrahend","multiply","multiplier","get_high","b00","divide","divisor","approx","res","div_u","div_s","toUnsigned","shru","shr","shl","floor","log2","log","LN2","delta","approxRes","approxRem","modulo","rem_u","rem_s","mod","and","or","xor","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toSigned","toBytes","toBytesLE","toBytesBE","hi","lo","fromBytes","fromBytesLE","fromBytesBE","i64_div","i64_div_u","i64_rem","i64_rem_u","i64_xor","i64_shr","i64_eq","minSafeF32","MIN_SAFE_INTEGER","maxSafeF32","MAX_SAFE_INTEGER","minSafeF64","maxSafeF64","fround","f32_as_i32","i32_as_f32","f64_as_i64","i64_as_f64","readI32","readI64","readF32","readF64","valueI64","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","deferASM","deferASMCall","typeArgument","valueType","allocateInternalName","allocatePrototype","An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf","allocateInstance","abortInternalName","abortPrototype","abortInstance","messageArg","filenameArg","binaryen","Binaryen","_malloc","_free","move_memory","dest","src","_memmove","HEAPU8","emitText","emitAsmjs","globalScope","HEAP","HEAP_OFFSET","oldHeap","copyWithin","UnreachableError","captureStackTrace","stack","AssertionError","ASC_TARGET","defineProperties","writable","MIN_POSITIVE_VALUE","EPSILON","clz32","abs","trunc","round","sqrt","x","y","sign","isTrueish","undefined","fromCodePoint","Number","isInteger","isArray"],"mappings":"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ACtE,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,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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","file":"assemblyscript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"binaryen\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"binaryen\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"assemblyscript\"] = factory(require(\"binaryen\"));\n\telse\n\t\troot[\"assemblyscript\"] = factory(root[\"binaryen\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__24__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 29);\n","/**\r\n * Common constants.\r\n * @module common\r\n *//***/\r\n\r\n/** Indicates traits of a {@link Node} or {@link Element}. */\r\nexport enum CommonFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n\r\n // Basic modifiers\r\n\r\n /** Has an `import` modifier. */\r\n IMPORT = 1 << 0,\r\n /** Has an `export` modifier. */\r\n EXPORT = 1 << 1,\r\n /** Has a `declare` modifier. */\r\n DECLARE = 1 << 2,\r\n /** Has a `const` modifier. */\r\n CONST = 1 << 3,\r\n /** Has a `let` modifier. */\r\n LET = 1 << 4,\r\n /** Has a `static` modifier. */\r\n STATIC = 1 << 5,\r\n /** Has a `readonly` modifier. */\r\n READONLY = 1 << 6,\r\n /** Has an `abstract` modifier. */\r\n ABSTRACT = 1 << 7,\r\n /** Has a `public` modifier. */\r\n PUBLIC = 1 << 8,\r\n /** Has a `private` modifier. */\r\n PRIVATE = 1 << 9,\r\n /** Has a `protected` modifier. */\r\n PROTECTED = 1 << 10,\r\n /** Has a `get` modifier. */\r\n GET = 1 << 11,\r\n /** Has a `set` modifier. */\r\n SET = 1 << 12,\r\n\r\n // Extended modifiers usually derived from basic modifiers\r\n\r\n /** Is ambient, that is either declared or nested in a declared element. */\r\n AMBIENT = 1 << 13,\r\n /** Is generic. */\r\n GENERIC = 1 << 14,\r\n /** Is part of a generic context. */\r\n GENERIC_CONTEXT = 1 << 15,\r\n /** Is an instance member. */\r\n INSTANCE = 1 << 16,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 17,\r\n /** Is an arrow function. */\r\n ARROW = 1 << 18,\r\n /** Is a module export. */\r\n MODULE_EXPORT = 1 << 19,\r\n /** Is a module import. */\r\n MODULE_IMPORT = 1 << 20,\r\n\r\n // Compilation states\r\n\r\n /** Is a builtin. */\r\n BUILTIN = 1 << 21,\r\n /** Is compiled. */\r\n COMPILED = 1 << 22,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 23,\r\n /** Is scoped. */\r\n SCOPED = 1 << 24,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 25,\r\n /** Is a virtual method. */\r\n VIRTUAL = 1 << 26,\r\n /** Is the main function. */\r\n MAIN = 1 << 27,\r\n\r\n // Other\r\n\r\n QUOTED = 1 << 28\r\n}\r\n\r\n/** Path delimiter inserted between file system levels. */\r\nexport const PATH_DELIMITER = \"/\";\r\n/** Substitution used to indicate the parent directory. */\r\nexport const PARENT_SUBST = \"..\";\r\n/** Function name prefix used for getters. */\r\nexport const GETTER_PREFIX = \"get:\";\r\n/** Function name prefix used for setters. */\r\nexport const SETTER_PREFIX = \"set:\";\r\n/** Delimiter used between class names and instance members. */\r\nexport const INSTANCE_DELIMITER = \"#\";\r\n/** Delimiter used between class and namespace names and static members. */\r\nexport const STATIC_DELIMITER = \".\";\r\n/** Delimiter used between a function and its inner elements. */\r\nexport const INNER_DELIMITER = \"~\";\r\n/** Substitution used to indicate a library directory. */\r\nexport const LIBRARY_SUBST = \"~lib\";\r\n/** Library directory prefix. */\r\nexport const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER;\r\n/** Prefix used to indicate a filespace element. */\r\nexport const FILESPACE_PREFIX = \"file:\";\r\n","/**\r\n * Shared diagnostic handling inherited by the parser and the compiler.\r\n * @module diagnostics\r\n * @preferred\r\n *//***/\r\n\r\nimport {\r\n Range\r\n} from \"./ast\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nimport {\r\n isLineBreak\r\n} from \"./util\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\n/** Indicates the category of a {@link DiagnosticMessage}. */\r\nexport enum DiagnosticCategory {\r\n /** Informatory message. */\r\n INFO,\r\n /** Warning message. */\r\n WARNING,\r\n /** Error message. */\r\n ERROR\r\n}\r\n\r\n/** Returns the string representation of the specified diagnostic category. */\r\nexport function diagnosticCategoryToString(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return \"INFO\";\r\n case DiagnosticCategory.WARNING: return \"WARNING\";\r\n case DiagnosticCategory.ERROR: return \"ERROR\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** ANSI escape sequence for blue foreground. */\r\nexport const COLOR_BLUE: string = \"\\u001b[96m\";\r\n/** ANSI escape sequence for yellow foreground. */\r\nexport const COLOR_YELLOW: string = \"\\u001b[93m\";\r\n/** ANSI escape sequence for red foreground. */\r\nexport const COLOR_RED: string = \"\\u001b[91m\";\r\n/** ANSI escape sequence to reset the foreground color. */\r\nexport const COLOR_RESET: string = \"\\u001b[0m\";\r\n\r\n/** Returns the ANSI escape sequence for the specified category. */\r\nexport function diagnosticCategoryToColor(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return COLOR_BLUE;\r\n case DiagnosticCategory.WARNING: return COLOR_YELLOW;\r\n case DiagnosticCategory.ERROR: return COLOR_RED;\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** Represents a diagnostic message. */\r\nexport class DiagnosticMessage {\r\n\r\n /** Message code. */\r\n code: i32;\r\n /** Message category. */\r\n category: DiagnosticCategory;\r\n /** Message text. */\r\n message: string;\r\n /** Respective source range, if any. */\r\n range: Range | null = null;\r\n\r\n /** Constructs a new diagnostic message. */\r\n private constructor(code: i32, category: DiagnosticCategory, message: string) {\r\n this.code = code;\r\n this.category = category;\r\n this.message = message;\r\n }\r\n\r\n /** Creates a new diagnostic message of the specified category. */\r\n static create(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): DiagnosticMessage {\r\n var message = diagnosticCodeToString(code);\r\n if (arg0 != null) message = message.replace(\"{0}\", arg0);\r\n if (arg1 != null) message = message.replace(\"{1}\", arg1);\r\n if (arg2 != null) message = message.replace(\"{2}\", arg2);\r\n return new DiagnosticMessage(code, category, message);\r\n }\r\n\r\n /** Creates a new informatory diagnostic message. */\r\n static createInfo(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.INFO, arg0, arg1);\r\n }\r\n\r\n /** Creates a new warning diagnostic message. */\r\n static createWarning(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.WARNING, arg0, arg1);\r\n }\r\n\r\n /** Creates a new error diagnostic message. */\r\n static createError(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.ERROR, arg0, arg1);\r\n }\r\n\r\n /** Adds a source range to this message. */\r\n withRange(range: Range): this {\r\n this.range = range;\r\n return this;\r\n }\r\n\r\n /** Converts this message to a string. */\r\n toString(): string {\r\n if (this.range) {\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \\\"\" +\r\n this.message +\r\n \"\\\" in \" +\r\n this.range.source.normalizedPath +\r\n \":\" +\r\n this.range.line.toString(10) +\r\n \":\" +\r\n this.range.column.toString(10)\r\n );\r\n }\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \" +\r\n this.message\r\n );\r\n }\r\n}\r\n\r\n/** Formats a diagnostic message, optionally with terminal colors and source context. */\r\nexport function formatDiagnosticMessage(\r\n message: DiagnosticMessage,\r\n useColors: bool = false,\r\n showContext: bool = false\r\n): string {\r\n\r\n // general information\r\n var sb: string[] = [];\r\n if (useColors) sb.push(diagnosticCategoryToColor(message.category));\r\n sb.push(diagnosticCategoryToString(message.category));\r\n if (useColors) sb.push(COLOR_RESET);\r\n sb.push(message.code < 1000 ? \" AS\" : \" TS\");\r\n sb.push(message.code.toString(10));\r\n sb.push(\": \");\r\n sb.push(message.message);\r\n\r\n // include range information if available\r\n if (message.range) {\r\n\r\n // include context information if requested\r\n let range = message.range;\r\n if (showContext) {\r\n sb.push(\"\\n\");\r\n sb.push(formatDiagnosticContext(message.range, useColors));\r\n }\r\n\r\n sb.push(\"\\n\");\r\n sb.push(\" in \");\r\n sb.push(range.source.normalizedPath);\r\n sb.push(\"(\");\r\n sb.push(range.line.toString(10));\r\n sb.push(\",\");\r\n sb.push(range.column.toString(10));\r\n sb.push(\")\");\r\n }\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Formats the diagnostic context for the specified range, optionally with terminal colors. */\r\nexport function formatDiagnosticContext(range: Range, useColors: bool = false): string {\r\n var text = range.source.text;\r\n var len = text.length;\r\n var start = range.start;\r\n var end = range.end;\r\n while (start > 0 && !isLineBreak(text.charCodeAt(start - 1))) start--;\r\n while (end < len && !isLineBreak(text.charCodeAt(end))) end++;\r\n var sb: string[] = [\r\n \"\\n \",\r\n text.substring(start, end),\r\n \"\\n \"\r\n ];\r\n while (start < range.start) {\r\n sb.push(\" \");\r\n start++;\r\n }\r\n if (useColors) sb.push(COLOR_RED);\r\n if (range.start == range.end) {\r\n sb.push(\"^\");\r\n } else {\r\n while (start++ < range.end) sb.push(\"~\");\r\n }\r\n if (useColors) sb.push(COLOR_RESET);\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Base class of all diagnostic emitters. */\r\nexport abstract class DiagnosticEmitter {\r\n\r\n /** Diagnostic messages emitted so far. */\r\n diagnostics: DiagnosticMessage[];\r\n\r\n /** Initializes this diagnostic emitter. */\r\n protected constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n }\r\n\r\n /** Emits a diagnostic message of the specified category. */\r\n emitDiagnostic(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range);\r\n this.diagnostics.push(message);\r\n // console.log(formatDiagnosticMessage(message, true, true) + \"\\n\"); // temporary\r\n // console.log(new Error(\"stack\").stack);\r\n }\r\n\r\n /** Emits an informatory diagnostic message. */\r\n info(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.INFO, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits a warning diagnostic message. */\r\n warning(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.WARNING, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits an error diagnostic message. */\r\n error(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.ERROR, range, arg0, arg1, arg2);\r\n }\r\n}\r\n","/**\r\n * Abstract syntax tree representing a source file once parsed.\r\n * @module ast\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Token,\r\n Tokenizer,\r\n Range\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n normalizePath,\r\n resolvePath,\r\n CharCode\r\n} from \"./util\";\r\n\r\nexport { Token, Range };\r\n\r\n/** Indicates the kind of a node. */\r\nexport enum NodeKind {\r\n\r\n SOURCE,\r\n\r\n // types\r\n TYPE,\r\n TYPEPARAMETER,\r\n PARAMETER,\r\n SIGNATURE,\r\n\r\n // expressions\r\n IDENTIFIER,\r\n ASSERTION,\r\n BINARY,\r\n CALL,\r\n CLASS,\r\n COMMA,\r\n ELEMENTACCESS,\r\n FALSE,\r\n FUNCTION,\r\n INSTANCEOF,\r\n LITERAL,\r\n NEW,\r\n NULL,\r\n PARENTHESIZED,\r\n PROPERTYACCESS,\r\n TERNARY,\r\n SUPER,\r\n THIS,\r\n TRUE,\r\n CONSTRUCTOR,\r\n UNARYPOSTFIX,\r\n UNARYPREFIX,\r\n\r\n // statements\r\n BLOCK,\r\n BREAK,\r\n CONTINUE,\r\n DO,\r\n EMPTY,\r\n EXPORT,\r\n EXPORTIMPORT,\r\n EXPRESSION,\r\n FOR,\r\n IF,\r\n IMPORT,\r\n RETURN,\r\n SWITCH,\r\n THROW,\r\n TRY,\r\n VARIABLE,\r\n VOID,\r\n WHILE,\r\n\r\n // declaration statements\r\n CLASSDECLARATION,\r\n ENUMDECLARATION,\r\n ENUMVALUEDECLARATION,\r\n FIELDDECLARATION,\r\n FUNCTIONDECLARATION,\r\n IMPORTDECLARATION,\r\n INTERFACEDECLARATION,\r\n METHODDECLARATION,\r\n NAMESPACEDECLARATION,\r\n TYPEDECLARATION,\r\n VARIABLEDECLARATION,\r\n\r\n // special\r\n DECORATOR,\r\n EXPORTMEMBER,\r\n SWITCHCASE,\r\n COMMENT\r\n}\r\n\r\n/** Checks if a node represents a constant value. */\r\nexport function nodeIsConstantValue(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.LITERAL:\r\n case NodeKind.NULL:\r\n case NodeKind.TRUE:\r\n case NodeKind.FALSE: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable. */\r\nexport function nodeIsCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.CALL:\r\n case NodeKind.ELEMENTACCESS:\r\n case NodeKind.PROPERTYACCESS: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable with generic arguments. */\r\nexport function nodeIsGenericCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.PROPERTYACCESS: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all nodes. */\r\nexport abstract class Node {\r\n\r\n /** Node kind indicator. */\r\n kind: NodeKind;\r\n /** Source range. */\r\n range: Range;\r\n /** Parent node. */\r\n parent: Node | null = null;\r\n /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n\r\n /** Tests if this node has the specified flag or flags. */\r\n is(flag: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this node has one of the specified flags. */\r\n isAny(flag: CommonFlags): bool { return (this.flags & flag) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n\r\n // types\r\n\r\n static createType(\r\n name: IdentifierExpression,\r\n typeArguments: CommonTypeNode[] | null,\r\n isNullable: bool,\r\n range: Range\r\n ): TypeNode {\r\n var type = new TypeNode();\r\n type.range = range;\r\n type.name = name; name.parent = type;\r\n type.typeArguments = typeArguments; if (typeArguments) setParent(typeArguments, type);\r\n type.isNullable = isNullable;\r\n return type;\r\n }\r\n\r\n static createOmittedType(\r\n range: Range\r\n ): TypeNode {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"\", range),\r\n null,\r\n false,\r\n range\r\n );\r\n }\r\n\r\n static createTypeParameter(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n range: Range\r\n ): TypeParameterNode {\r\n var elem = new TypeParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.extendsType = extendsType; if (extendsType) extendsType.parent = elem;\r\n return elem;\r\n }\r\n\r\n static createParameter(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode,\r\n initializer: Expression | null,\r\n kind: ParameterKind,\r\n range: Range\r\n ): ParameterNode {\r\n var elem = new ParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.parameterKind = kind;\r\n return elem;\r\n }\r\n\r\n static createSignature(\r\n parameters: ParameterNode[],\r\n returnType: CommonTypeNode,\r\n explicitThisType: TypeNode | null,\r\n isNullable: bool,\r\n range: Range\r\n ): SignatureNode {\r\n var sig = new SignatureNode();\r\n sig.range = range;\r\n sig.parameters = parameters; setParent(parameters, sig);\r\n sig.returnType = returnType; returnType.parent = sig;\r\n sig.explicitThisType = explicitThisType; if (explicitThisType) explicitThisType.parent = sig;\r\n sig.isNullable = isNullable;\r\n return sig;\r\n }\r\n\r\n // special\r\n\r\n static createDecorator(\r\n name: Expression,\r\n args: Expression[] | null,\r\n range: Range\r\n ): DecoratorNode {\r\n var stmt = new DecoratorNode();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.arguments = args; if (args) setParent(args, stmt);\r\n stmt.decoratorKind = decoratorNameToKind(name);\r\n return stmt;\r\n }\r\n\r\n static createComment(\r\n text: string,\r\n kind: CommentKind,\r\n range: Range\r\n ): CommentNode {\r\n var node = new CommentNode();\r\n node.range = range;\r\n node.commentKind = kind;\r\n node.text = text;\r\n return node;\r\n }\r\n\r\n // expressions\r\n\r\n static createIdentifierExpression(\r\n name: string,\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = name;\r\n return expr;\r\n }\r\n\r\n static createEmptyIdentifierExpression(\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = \"\";\r\n return expr;\r\n }\r\n\r\n static createArrayLiteralExpression(\r\n elements: (Expression | null)[],\r\n range: Range\r\n ): ArrayLiteralExpression {\r\n var expr = new ArrayLiteralExpression();\r\n expr.range = range;\r\n expr.elementExpressions = elements; setParentIfNotNull(elements, expr);\r\n return expr;\r\n }\r\n\r\n static createAssertionExpression(\r\n assertionKind: AssertionKind,\r\n expression: Expression,\r\n toType: CommonTypeNode,\r\n range: Range\r\n ): AssertionExpression {\r\n var expr = new AssertionExpression();\r\n expr.range = range;\r\n expr.assertionKind = assertionKind;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.toType = toType; toType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createBinaryExpression(\r\n operator: Token,\r\n left: Expression,\r\n right: Expression,\r\n range: Range\r\n ): BinaryExpression {\r\n var expr = new BinaryExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.left = left; left.parent = expr;\r\n expr.right = right; right.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createCallExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): CallExpression {\r\n var expr = new CallExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createClassExpression(\r\n declaration: ClassDeclaration\r\n ): ClassExpression {\r\n var expr = new ClassExpression();\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createCommaExpression(\r\n expressions: Expression[],\r\n range: Range\r\n ): CommaExpression {\r\n var expr = new CommaExpression();\r\n expr.range = range;\r\n expr.expressions = expressions; setParent(expressions, expr);\r\n return expr;\r\n }\r\n\r\n static createConstructorExpression(\r\n range: Range\r\n ): ConstructorExpression {\r\n var expr = new ConstructorExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createElementAccessExpression(\r\n expression: Expression,\r\n element: Expression,\r\n range: Range\r\n ): ElementAccessExpression {\r\n var expr = new ElementAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.elementExpression = element; element.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createFalseExpression(\r\n range: Range\r\n ): FalseExpression {\r\n var expr = new FalseExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createFloatLiteralExpression(\r\n value: f64,\r\n range: Range\r\n ): FloatLiteralExpression {\r\n var expr = new FloatLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createFunctionExpression(\r\n declaration: FunctionDeclaration\r\n ): FunctionExpression {\r\n var expr = new FunctionExpression();\r\n expr.flags = declaration.flags & CommonFlags.ARROW;\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createInstanceOfExpression(\r\n expression: Expression,\r\n isType: CommonTypeNode,\r\n range: Range\r\n ): InstanceOfExpression {\r\n var expr = new InstanceOfExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.isType = isType; isType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createIntegerLiteralExpression(\r\n value: I64,\r\n range: Range\r\n ): IntegerLiteralExpression {\r\n var expr = new IntegerLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createNewExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): NewExpression {\r\n var expr = new NewExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createNullExpression(\r\n range: Range\r\n ): NullExpression {\r\n var expr = new NullExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createObjectLiteralExpression(\r\n names: IdentifierExpression[],\r\n values: Expression[],\r\n range: Range\r\n ): ObjectLiteralExpression {\r\n var expr = new ObjectLiteralExpression();\r\n expr.range = range;\r\n expr.names = names;\r\n expr.values = values;\r\n return expr;\r\n }\r\n\r\n static createParenthesizedExpression(\r\n expression: Expression,\r\n range: Range\r\n ): ParenthesizedExpression {\r\n var expr = new ParenthesizedExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createPropertyAccessExpression(\r\n expression: Expression,\r\n property: IdentifierExpression,\r\n range: Range\r\n ): PropertyAccessExpression {\r\n var expr = new PropertyAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.property = property; property.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createRegexpLiteralExpression(\r\n pattern: string,\r\n flags: string,\r\n range: Range\r\n ): RegexpLiteralExpression {\r\n var expr = new RegexpLiteralExpression();\r\n expr.range = range;\r\n expr.pattern = pattern;\r\n expr.patternFlags = flags;\r\n return expr;\r\n }\r\n\r\n static createTernaryExpression(\r\n condition: Expression,\r\n ifThen: Expression,\r\n ifElse: Expression,\r\n range: Range\r\n ): TernaryExpression {\r\n var expr = new TernaryExpression();\r\n expr.range = range;\r\n expr.condition = condition; condition.parent = expr;\r\n expr.ifThen = ifThen; ifThen.parent = expr;\r\n expr.ifElse = ifElse; ifElse.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createStringLiteralExpression(\r\n value: string,\r\n range: Range\r\n ): StringLiteralExpression {\r\n var expr = new StringLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createSuperExpression(\r\n range: Range\r\n ): SuperExpression {\r\n var expr = new SuperExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createThisExpression(\r\n range: Range\r\n ): ThisExpression {\r\n var expr = new ThisExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createTrueExpression(\r\n range: Range\r\n ): TrueExpression {\r\n var expr = new TrueExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createUnaryPostfixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPostfixExpression {\r\n var expr = new UnaryPostfixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createUnaryPrefixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPrefixExpression {\r\n var expr = new UnaryPrefixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n // statements\r\n\r\n static createBlockStatement(\r\n statements: Statement[],\r\n range: Range\r\n ): BlockStatement {\r\n var stmt = new BlockStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createBreakStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): BreakStatement {\r\n var stmt = new BreakStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createClassDeclaration(\r\n identifier: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n implementsTypes: TypeNode[] | null, // can't be functions\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ClassDeclaration {\r\n var stmt = new ClassDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = identifier; identifier.parent = stmt;\r\n stmt.typeParameters = typeParameters; setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.implementsTypes = implementsTypes; if (implementsTypes) setParent(implementsTypes, stmt);\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createContinueStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): ContinueStatement {\r\n var stmt = new ContinueStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createDoStatement(\r\n statement: Statement,\r\n condition: Expression,\r\n range: Range\r\n ): DoStatement {\r\n var stmt = new DoStatement();\r\n stmt.range = range;\r\n stmt.statement = statement; statement.parent = stmt;\r\n stmt.condition = condition; condition.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createEmptyStatement(\r\n range: Range\r\n ): EmptyStatement {\r\n var stmt = new EmptyStatement();\r\n stmt.range = range;\r\n return stmt;\r\n }\r\n\r\n static createEnumDeclaration(\r\n name: IdentifierExpression,\r\n members: EnumValueDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumDeclaration {\r\n var stmt = new EnumDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.values = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createEnumValueDeclaration(\r\n name: IdentifierExpression,\r\n value: Expression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumValueDeclaration {\r\n var stmt = new EnumValueDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportStatement(\r\n members: ExportMember[] | null,\r\n path: StringLiteralExpression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ExportStatement {\r\n var stmt = new ExportStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.members = members; if (members) setParent(members, stmt);\r\n stmt.path = path;\r\n if (path) {\r\n let normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n } else {\r\n stmt.normalizedPath = null;\r\n stmt.internalPath = null;\r\n }\r\n return stmt;\r\n }\r\n\r\n static createExportImportStatement(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression,\r\n range: Range\r\n ): ExportImportStatement {\r\n var stmt = new ExportImportStatement();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.externalName = externalName; externalName.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportMember(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression | null,\r\n range: Range\r\n ): ExportMember {\r\n var elem = new ExportMember();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n if (!externalName) {\r\n externalName = name;\r\n } else {\r\n externalName.parent = elem;\r\n }\r\n elem.externalName = externalName;\r\n return elem;\r\n }\r\n\r\n static createExpressionStatement(\r\n expression: Expression\r\n ): ExpressionStatement {\r\n var stmt = new ExpressionStatement();\r\n stmt.range = expression.range;\r\n stmt.expression = expression; expression.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createIfStatement(\r\n condition: Expression,\r\n ifTrue: Statement,\r\n ifFalse: Statement | null,\r\n range: Range\r\n ): IfStatement {\r\n var stmt = new IfStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.ifTrue = ifTrue; ifTrue.parent = stmt;\r\n stmt.ifFalse = ifFalse; if (ifFalse) ifFalse.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createImportStatement(\r\n decls: ImportDeclaration[] | null,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = decls; if (decls) setParent(decls, stmt);\r\n stmt.namespaceName = null;\r\n stmt.path = path;\r\n var normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative in project\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute in library\r\n if (!normalizedPath.startsWith(LIBRARY_PREFIX)) {\r\n normalizedPath = LIBRARY_PREFIX + normalizedPath;\r\n }\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportStatementWithWildcard(\r\n identifier: IdentifierExpression,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = null;\r\n stmt.namespaceName = identifier;\r\n stmt.path = path;\r\n stmt.normalizedPath = resolvePath(\r\n normalizePath(path.value),\r\n range.source.normalizedPath\r\n );\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportDeclaration(\r\n externalName: IdentifierExpression,\r\n name: IdentifierExpression | null,\r\n range: Range\r\n ): ImportDeclaration {\r\n var elem = new ImportDeclaration();\r\n elem.range = range;\r\n elem.externalName = externalName; externalName.parent = elem;\r\n if (!name) {\r\n name = externalName;\r\n } else {\r\n name.parent = elem;\r\n }\r\n elem.name = name;\r\n return elem;\r\n }\r\n\r\n static createInterfaceDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): InterfaceDeclaration {\r\n var stmt = new InterfaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createFieldDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FieldDeclaration {\r\n var stmt = new FieldDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.type = type; if (type) type.parent = stmt;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createForStatement(\r\n initializer: Statement | null,\r\n condition: Expression | null,\r\n incrementor: Expression | null,\r\n statement: Statement,\r\n range: Range\r\n ): ForStatement {\r\n var stmt = new ForStatement();\r\n stmt.range = range;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.condition = condition; if (condition) condition.parent = stmt;\r\n stmt.incrementor = incrementor; if (incrementor) incrementor.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FunctionDeclaration {\r\n var stmt = new FunctionDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createMethodDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): MethodDeclaration {\r\n var stmt = new MethodDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): NamespaceDeclaration {\r\n var stmt = new NamespaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createReturnStatement(\r\n value: Expression | null,\r\n range: Range\r\n ): ReturnStatement {\r\n var stmt = new ReturnStatement();\r\n stmt.range = range;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createSwitchStatement(\r\n condition: Expression,\r\n cases: SwitchCase[],\r\n range: Range\r\n ): SwitchStatement {\r\n var stmt = new SwitchStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.cases = cases; setParent(cases, stmt);\r\n return stmt;\r\n }\r\n\r\n static createSwitchCase(\r\n label: Expression | null,\r\n statements: Statement[],\r\n range: Range\r\n ): SwitchCase {\r\n var elem = new SwitchCase();\r\n elem.range = range;\r\n elem.label = label; if (label) label.parent = elem;\r\n elem.statements = statements; setParent(statements, elem);\r\n return elem;\r\n }\r\n\r\n static createThrowStatement(\r\n value: Expression,\r\n range: Range\r\n ): ThrowStatement {\r\n var stmt = new ThrowStatement();\r\n stmt.range = range;\r\n stmt.value = value; value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createTryStatement(\r\n statements: Statement[],\r\n catchVariable: IdentifierExpression | null,\r\n catchStatements: Statement[] | null,\r\n finallyStatements: Statement[] | null,\r\n range: Range\r\n ): TryStatement {\r\n var stmt = new TryStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n stmt.catchVariable = catchVariable;\r\n if (catchVariable) catchVariable.parent = stmt;\r\n stmt.catchStatements = catchStatements;\r\n if (catchStatements) setParent(catchStatements, stmt);\r\n stmt.finallyStatements = finallyStatements;\r\n if (finallyStatements) setParent(finallyStatements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createTypeDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n alias: CommonTypeNode,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): TypeDeclaration {\r\n var stmt = new TypeDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.type = alias; alias.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableStatement(\r\n declarations: VariableDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableStatement {\r\n var stmt = new VariableStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.declarations = declarations; setParent(declarations, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableDeclaration {\r\n var elem = new VariableDeclaration();\r\n elem.range = range;\r\n elem.flags = flags;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.decorators = decorators; // inherited\r\n return elem;\r\n }\r\n\r\n static createVoidStatement(\r\n expression: Expression,\r\n range: Range\r\n ): VoidStatement {\r\n var stmt = new VoidStatement();\r\n stmt.range = range;\r\n stmt.expression = expression;\r\n return stmt;\r\n }\r\n\r\n static createWhileStatement(\r\n condition: Expression,\r\n statement: Statement,\r\n range: Range\r\n ): WhileStatement {\r\n var stmt = new WhileStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n}\r\n\r\n// types\r\n\r\nexport abstract class CommonTypeNode extends Node {\r\n // kind varies\r\n\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type annotation. */\r\nexport class TypeNode extends CommonTypeNode {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: CommonTypeNode[] | null;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameterNode extends Node {\r\n kind = NodeKind.TYPEPARAMETER;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Extended type reference, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n}\r\n\r\n/** Represents the kind of a parameter. */\r\nexport enum ParameterKind {\r\n /** No specific flags. */\r\n DEFAULT,\r\n /** Is an optional parameter. */\r\n OPTIONAL,\r\n /** Is a rest parameter. */\r\n REST\r\n}\r\n\r\n/** Represents a function parameter. */\r\nexport class ParameterNode extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: CommonTypeNode;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n /** Implicit field declaration, if applicable. */\r\n implicitFieldDeclaration: FieldDeclaration | null = null;\r\n}\r\n\r\n/** Represents a function signature. */\r\nexport class SignatureNode extends CommonTypeNode {\r\n kind = NodeKind.SIGNATURE;\r\n\r\n /** Accepted parameters. */\r\n parameters: ParameterNode[];\r\n /** Return type. */\r\n returnType: CommonTypeNode;\r\n /** Explicitly provided this type, if any. */\r\n explicitThisType: TypeNode | null; // can't be a function\r\n}\r\n\r\n// special\r\n\r\n/** Built-in decorator kinds. */\r\nexport enum DecoratorKind {\r\n CUSTOM,\r\n GLOBAL,\r\n OPERATOR,\r\n OPERATOR_BINARY,\r\n OPERATOR_PREFIX,\r\n OPERATOR_POSTFIX,\r\n UNMANAGED,\r\n SEALED,\r\n INLINE,\r\n EXTERNAL\r\n}\r\n\r\n/** Returns the kind of the specified decorator. Defaults to {@link DecoratorKind.CUSTOM}. */\r\nexport function decoratorNameToKind(name: Expression): DecoratorKind {\r\n // @global, @inline, @operator, @sealed, @unmanaged\r\n if (name.kind == NodeKind.IDENTIFIER) {\r\n let nameStr = (name).text;\r\n assert(nameStr.length);\r\n switch (nameStr.charCodeAt(0)) {\r\n case CharCode.e: {\r\n if (nameStr == \"external\") return DecoratorKind.EXTERNAL;\r\n break;\r\n }\r\n case CharCode.g: {\r\n if (nameStr == \"global\") return DecoratorKind.GLOBAL;\r\n break;\r\n }\r\n case CharCode.i: {\r\n if (nameStr == \"inline\") return DecoratorKind.INLINE;\r\n break;\r\n }\r\n case CharCode.o: {\r\n if (nameStr == \"operator\") return DecoratorKind.OPERATOR;\r\n break;\r\n }\r\n case CharCode.s: {\r\n if (nameStr == \"sealed\") return DecoratorKind.SEALED;\r\n break;\r\n }\r\n case CharCode.u: {\r\n if (nameStr == \"unmanaged\") return DecoratorKind.UNMANAGED;\r\n break;\r\n }\r\n }\r\n } else if (\r\n name.kind == NodeKind.PROPERTYACCESS &&\r\n (name).expression.kind == NodeKind.IDENTIFIER\r\n ) {\r\n let nameStr = ((name).expression).text;\r\n assert(nameStr.length);\r\n let propStr = (name).property.text;\r\n assert(propStr.length);\r\n // @operator.binary, @operator.prefix, @operator.postfix\r\n if (nameStr == \"operator\") {\r\n switch (propStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (propStr == \"binary\") return DecoratorKind.OPERATOR_BINARY;\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (propStr) {\r\n case \"prefix\": return DecoratorKind.OPERATOR_PREFIX;\r\n case \"postfix\": return DecoratorKind.OPERATOR_POSTFIX;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return DecoratorKind.CUSTOM;\r\n}\r\n\r\n/** Represents a decorator. */\r\nexport class DecoratorNode extends Node {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n}\r\n\r\n/** Comment kinds. */\r\nexport enum CommentKind {\r\n /** Line comment. */\r\n LINE,\r\n /** Triple-slash comment. */\r\n TRIPLE,\r\n /** Block comment. */\r\n BLOCK\r\n}\r\n\r\n/** Represents a comment. */\r\nexport class CommentNode extends Node {\r\n kind = NodeKind.COMMENT;\r\n\r\n /** Comment kind. */\r\n commentKind: CommentKind;\r\n /** Comment text. */\r\n text: string;\r\n}\r\n\r\n// expressions\r\n\r\n/** Base class of all expression nodes. */\r\nexport abstract class Expression extends Node { }\r\n\r\n/** Represents an identifier expression. */\r\nexport class IdentifierExpression extends Expression {\r\n kind = NodeKind.IDENTIFIER;\r\n\r\n /** Textual name. */\r\n text: string;\r\n}\r\n\r\n/** Indicates the kind of a literal. */\r\nexport enum LiteralKind {\r\n FLOAT,\r\n INTEGER,\r\n STRING,\r\n REGEXP,\r\n ARRAY,\r\n OBJECT\r\n}\r\n\r\n/** Base class of all literal expressions. */\r\nexport abstract class LiteralExpression extends Expression {\r\n kind = NodeKind.LITERAL;\r\n\r\n /** Specific literal kind. */\r\n literalKind: LiteralKind;\r\n}\r\n\r\n/** Represents an `[]` literal expression. */\r\nexport class ArrayLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.ARRAY;\r\n\r\n /** Nested element expressions. */\r\n elementExpressions: (Expression | null)[];\r\n}\r\n\r\n/** Indicates the kind of an assertion. */\r\nexport enum AssertionKind {\r\n PREFIX,\r\n AS\r\n}\r\n\r\n/** Represents an assertion expression. */\r\nexport class AssertionExpression extends Expression {\r\n kind = NodeKind.ASSERTION;\r\n\r\n /** Specific kind of this assertion. */\r\n assertionKind: AssertionKind;\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Target type. */\r\n toType: CommonTypeNode;\r\n}\r\n\r\n/** Represents a binary expression. */\r\nexport class BinaryExpression extends Expression {\r\n kind = NodeKind.BINARY;\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Left-hand side expression */\r\n left: Expression;\r\n /** Right-hand side expression. */\r\n right: Expression;\r\n}\r\n\r\n/** Represents a call expression. */\r\nexport class CallExpression extends Expression {\r\n kind = NodeKind.CALL;\r\n\r\n /** Called expression. Usually an identifier or property access expression. */\r\n expression: Expression;\r\n /** Provided type arguments. */\r\n typeArguments: CommonTypeNode[] | null;\r\n /** Provided arguments. */\r\n arguments: Expression[];\r\n}\r\n\r\n/** Represents a class expression using the 'class' keyword. */\r\nexport class ClassExpression extends Expression {\r\n kind = NodeKind.CLASS;\r\n\r\n /** Inline class declaration. */\r\n declaration: ClassDeclaration;\r\n}\r\n\r\n/** Represents a comma expression composed of multiple expressions. */\r\nexport class CommaExpression extends Expression {\r\n kind = NodeKind.COMMA;\r\n\r\n /** Sequential expressions. */\r\n expressions: Expression[];\r\n}\r\n\r\n/** Represents a `constructor` expression. */\r\nexport class ConstructorExpression extends IdentifierExpression {\r\n kind = NodeKind.CONSTRUCTOR;\r\n text = \"constructor\";\r\n}\r\n\r\n/** Represents an element access expression, e.g., array access. */\r\nexport class ElementAccessExpression extends Expression {\r\n kind = NodeKind.ELEMENTACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Element of the expression being accessed. */\r\n elementExpression: Expression;\r\n}\r\n\r\n/** Represents a float literal expression. */\r\nexport class FloatLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.FLOAT;\r\n\r\n /** Float value. */\r\n value: f64;\r\n}\r\n\r\n/** Represents a function expression using the 'function' keyword. */\r\nexport class FunctionExpression extends Expression {\r\n kind = NodeKind.FUNCTION;\r\n\r\n /** Inline function declaration. */\r\n declaration: FunctionDeclaration;\r\n}\r\n\r\n/** Represents an `instanceof` expression. */\r\nexport class InstanceOfExpression extends Expression {\r\n kind = NodeKind.INSTANCEOF;\r\n\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Type to test for. */\r\n isType: CommonTypeNode;\r\n}\r\n\r\n/** Represents an integer literal expression. */\r\nexport class IntegerLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.INTEGER;\r\n\r\n /** Integer value. */\r\n value: I64;\r\n}\r\n\r\n/** Represents a `new` expression. Like a call but with its own kind. */\r\nexport class NewExpression extends CallExpression {\r\n kind = NodeKind.NEW;\r\n}\r\n\r\n/** Represents a `null` expression. */\r\nexport class NullExpression extends IdentifierExpression {\r\n kind = NodeKind.NULL;\r\n text = \"null\";\r\n}\r\n\r\n/** Represents an object literal expression. */\r\nexport class ObjectLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.OBJECT;\r\n\r\n /** Field names. */\r\n names: IdentifierExpression[];\r\n /** Field values. */\r\n values: Expression[];\r\n}\r\n\r\n/** Represents a parenthesized expression. */\r\nexport class ParenthesizedExpression extends Expression {\r\n kind = NodeKind.PARENTHESIZED;\r\n\r\n /** Expression in parenthesis. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a property access expression. */\r\nexport class PropertyAccessExpression extends Expression {\r\n kind = NodeKind.PROPERTYACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Property of the expression being accessed. */\r\n property: IdentifierExpression;\r\n}\r\n\r\n/** Represents a regular expression literal expression. */\r\nexport class RegexpLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.REGEXP;\r\n\r\n /** Regular expression pattern. */\r\n pattern: string;\r\n /** Regular expression flags. */\r\n patternFlags: string;\r\n}\r\n\r\n/** Represents a ternary expression, i.e., short if notation. */\r\nexport class TernaryExpression extends Expression {\r\n kind = NodeKind.TERNARY;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Expression executed when condition is `true`. */\r\n ifThen: Expression;\r\n /** Expression executed when condition is `false`. */\r\n ifElse: Expression;\r\n}\r\n\r\n/** Represents a string literal expression. */\r\nexport class StringLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.STRING;\r\n\r\n /** String value without quotes. */\r\n value: string;\r\n}\r\n\r\n/** Represents a `super` expression. */\r\nexport class SuperExpression extends IdentifierExpression {\r\n kind = NodeKind.SUPER;\r\n text = \"super\";\r\n}\r\n\r\n/** Represents a `this` expression. */\r\nexport class ThisExpression extends IdentifierExpression {\r\n kind = NodeKind.THIS;\r\n text = \"this\";\r\n}\r\n\r\n/** Represents a `true` expression. */\r\nexport class TrueExpression extends IdentifierExpression {\r\n kind = NodeKind.TRUE;\r\n text = \"true\";\r\n}\r\n\r\n/** Represents a `false` expression. */\r\nexport class FalseExpression extends IdentifierExpression {\r\n kind = NodeKind.FALSE;\r\n text = \"false\";\r\n}\r\n\r\n/** Base class of all unary expressions. */\r\nexport abstract class UnaryExpression extends Expression {\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Operand expression. */\r\n operand: Expression;\r\n}\r\n\r\n/** Represents a unary postfix expression, e.g. a postfix increment. */\r\nexport class UnaryPostfixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPOSTFIX;\r\n}\r\n\r\n/** Represents a unary prefix expression, e.g. a negation. */\r\nexport class UnaryPrefixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPREFIX;\r\n}\r\n\r\n// statements\r\n\r\nexport function isLastStatement(statement: Statement): bool {\r\n var parent = assert(statement.parent);\r\n if (parent.kind == NodeKind.BLOCK) {\r\n let statements = (parent).statements;\r\n if (statements[statements.length - 1] === statement) {\r\n switch (assert(parent.parent).kind) {\r\n case NodeKind.FUNCTIONDECLARATION:\r\n case NodeKind.METHODDECLARATION: return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all statement nodes. */\r\nexport abstract class Statement extends Node { }\r\n\r\n/** Indicates the specific kind of a source. */\r\nexport enum SourceKind {\r\n /** Default source. Usually imported from an entry file. */\r\n DEFAULT,\r\n /** Entry file. */\r\n ENTRY,\r\n /** Library file. */\r\n LIBRARY\r\n}\r\n\r\n/** A top-level source node. */\r\nexport class Source extends Node {\r\n kind = NodeKind.SOURCE;\r\n parent = null;\r\n\r\n /** Source kind. */\r\n sourceKind: SourceKind;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Path used internally. */\r\n internalPath: string;\r\n /** Simple path (last part without extension). */\r\n simplePath: string;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Full source text. */\r\n text: string;\r\n /** Tokenizer reference. */\r\n tokenizer: Tokenizer | null = null;\r\n /** Source map index. */\r\n debugInfoIndex: i32 = -1;\r\n /** Re-exported sources. */\r\n exportPaths: Set | null = null;\r\n\r\n /** Constructs a new source node. */\r\n constructor(normalizedPath: string, text: string, kind: SourceKind) {\r\n super();\r\n this.sourceKind = kind;\r\n this.normalizedPath = normalizedPath;\r\n var internalPath = mangleInternalPath(this.normalizedPath);\r\n this.internalPath = internalPath;\r\n var pos = internalPath.lastIndexOf(PATH_DELIMITER);\r\n this.simplePath = pos >= 0 ? internalPath.substring(pos + 1) : internalPath;\r\n this.statements = new Array();\r\n this.range = new Range(this, 0, text.length);\r\n this.text = text;\r\n }\r\n\r\n /** Tests if this source is an entry file. */\r\n get isEntry(): bool { return this.sourceKind == SourceKind.ENTRY; }\r\n /** Tests if this source is a stdlib file. */\r\n get isLibrary(): bool { return this.sourceKind == SourceKind.LIBRARY; }\r\n}\r\n\r\n/** Base class of all declaration statements. */\r\nexport abstract class DeclarationStatement extends Statement {\r\n\r\n /** Simple name being declared. */\r\n name: IdentifierExpression;\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null = null;\r\n\r\n protected cachedProgramLevelInternalName: string | null = null;\r\n protected cachedFileLevelInternalName: string | null = null;\r\n\r\n /** Gets the mangled program-level internal name of this declaration. */\r\n get programLevelInternalName(): string {\r\n if (!this.cachedProgramLevelInternalName) {\r\n this.cachedProgramLevelInternalName = mangleInternalName(this, true);\r\n }\r\n return this.cachedProgramLevelInternalName;\r\n }\r\n\r\n /** Gets the mangled file-level internal name of this declaration. */\r\n get fileLevelInternalName(): string {\r\n if (!this.cachedFileLevelInternalName) {\r\n this.cachedFileLevelInternalName = mangleInternalName(this, false);\r\n }\r\n return this.cachedFileLevelInternalName;\r\n }\r\n\r\n /** Tests if this is a top-level declaration within its source file. */\r\n get isTopLevel(): bool {\r\n var parent = this.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent)) {\r\n return false;\r\n }\r\n return parent.kind == NodeKind.SOURCE;\r\n }\r\n\r\n /** Tests if this declaration is a top-level export within its source file. */\r\n get isTopLevelExport(): bool {\r\n var parent = this.parent;\r\n if (!parent || (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent))) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.NAMESPACEDECLARATION) {\r\n return this.is(CommonFlags.EXPORT) && (parent).isTopLevelExport;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return this.is(CommonFlags.STATIC) && (parent).isTopLevelExport;\r\n }\r\n return parent.kind == NodeKind.SOURCE && this.is(CommonFlags.EXPORT);\r\n }\r\n\r\n /** Tests if this declaration needs an explicit export. */\r\n needsExplicitExport(member: ExportMember): bool {\r\n // This is necessary because module-level exports are automatically created\r\n // for top level declarations of all sorts. This function essentially tests\r\n // that there isn't a otherwise duplicate top-level export already.\r\n return (\r\n member.name.text != member.externalName.text || // if aliased\r\n this.range.source != member.range.source || // if a re-export\r\n !this.isTopLevelExport // if not top-level\r\n );\r\n }\r\n}\r\n\r\n/** Base class of all variable-like declaration statements. */\r\nexport abstract class VariableLikeDeclarationStatement extends DeclarationStatement {\r\n\r\n /** Variable type. */\r\n type: CommonTypeNode | null;\r\n /** Variable initializer. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a block statement. */\r\nexport class BlockStatement extends Statement {\r\n kind = NodeKind.BLOCK;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `break` statement. */\r\nexport class BreakStatement extends Statement {\r\n kind = NodeKind.BREAK;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `class` declaration. */\r\nexport class ClassDeclaration extends DeclarationStatement {\r\n kind = NodeKind.CLASSDECLARATION;\r\n\r\n /** Accepted type parameters. */\r\n typeParameters: TypeParameterNode[];\r\n /** Base class type being extended, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n /** Interface types being implemented, if any. */\r\n implementsTypes: TypeNode[] | null; // can't be functions\r\n /** Class member declarations. */\r\n members: DeclarationStatement[];\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents a `continue` statement. */\r\nexport class ContinueStatement extends Statement {\r\n kind = NodeKind.CONTINUE;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `do` statement. */\r\nexport class DoStatement extends Statement {\r\n kind = NodeKind.DO;\r\n\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n /** Condition when to repeat. */\r\n condition: Expression;\r\n}\r\n\r\n/** Represents an empty statement, i.e., a semicolon terminating nothing. */\r\nexport class EmptyStatement extends Statement {\r\n kind = NodeKind.EMPTY;\r\n}\r\n\r\n/** Represents an `enum` declaration. */\r\nexport class EnumDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMDECLARATION;\r\n\r\n /** Enum value declarations. */\r\n values: EnumValueDeclaration[];\r\n}\r\n\r\n/** Represents a value of an `enum` declaration. */\r\nexport class EnumValueDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMVALUEDECLARATION;\r\n // name is inherited\r\n\r\n /** Value expression. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents an `export import` statement of an interface. */\r\nexport class ExportImportStatement extends Node {\r\n kind = NodeKind.EXPORTIMPORT;\r\n\r\n /** Identifier being imported. */\r\n name: IdentifierExpression;\r\n /** Identifier being exported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents a member of an `export` statement. */\r\nexport class ExportMember extends Node {\r\n kind = NodeKind.EXPORTMEMBER;\r\n\r\n /** Identifier being exported. */\r\n name: IdentifierExpression;\r\n /** Identifier seen when imported again. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `export` statement. */\r\nexport class ExportStatement extends Statement {\r\n kind = NodeKind.EXPORT;\r\n\r\n /** Array of members if a set of named exports, or `null` if a filespace export. */\r\n members: ExportMember[] | null;\r\n /** Path being exported from, if applicable. */\r\n path: StringLiteralExpression | null;\r\n /** Normalized path, if `path` is set. */\r\n normalizedPath: string | null;\r\n /** Mangled internal path being referenced, if `path` is set. */\r\n internalPath: string | null;\r\n}\r\n\r\n/** Represents an expression that is used as a statement. */\r\nexport class ExpressionStatement extends Statement {\r\n kind = NodeKind.EXPRESSION;\r\n\r\n /** Expression being used as a statement.*/\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a field declaration within a `class`. */\r\nexport class FieldDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.FIELDDECLARATION;\r\n\r\n /** Parameter index within the constructor, if applicable. */\r\n parameterIndex: i32 = -1;\r\n}\r\n\r\n/** Represents a `for` statement. */\r\nexport class ForStatement extends Statement {\r\n kind = NodeKind.FOR;\r\n\r\n /**\r\n * Initializer statement, if present.\r\n * Either a {@link VariableStatement} or {@link ExpressionStatement}.\r\n */\r\n initializer: Statement | null;\r\n /** Condition expression, if present. */\r\n condition: Expression | null;\r\n /** Incrementor expression, if present. */\r\n incrementor: Expression | null;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Represents a `function` declaration. */\r\nexport class FunctionDeclaration extends DeclarationStatement {\r\n kind = NodeKind.FUNCTIONDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Function signature. */\r\n signature: SignatureNode;\r\n /** Body statement. Usually a block. */\r\n body: Statement | null;\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents an `if` statement. */\r\nexport class IfStatement extends Statement {\r\n kind = NodeKind.IF;\r\n\r\n /** Condition. */\r\n condition: Expression;\r\n /** Statement executed when condition is `true`. */\r\n ifTrue: Statement;\r\n /** Statement executed when condition is `false`. */\r\n ifFalse: Statement | null;\r\n}\r\n\r\n/** Represents an `import` declaration part of an {@link ImportStatement}. */\r\nexport class ImportDeclaration extends DeclarationStatement {\r\n kind = NodeKind.IMPORTDECLARATION;\r\n\r\n /** Identifier being imported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `import` statement. */\r\nexport class ImportStatement extends Statement {\r\n kind = NodeKind.IMPORT;\r\n\r\n /** Array of member declarations or `null` if an asterisk import. */\r\n declarations: ImportDeclaration[] | null;\r\n /** Name of the local namespace, if an asterisk import. */\r\n namespaceName: IdentifierExpression | null;\r\n /** Path being imported from. */\r\n path: StringLiteralExpression;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Mangled internal path being referenced. */\r\n internalPath: string;\r\n}\r\n\r\n/** Represents an `interfarce` declaration. */\r\nexport class InterfaceDeclaration extends ClassDeclaration {\r\n kind = NodeKind.INTERFACEDECLARATION;\r\n}\r\n\r\n/** Represents a method declaration within a `class`. */\r\nexport class MethodDeclaration extends FunctionDeclaration {\r\n kind = NodeKind.METHODDECLARATION;\r\n}\r\n\r\n/** Represents a `namespace` declaration. */\r\nexport class NamespaceDeclaration extends DeclarationStatement {\r\n kind = NodeKind.NAMESPACEDECLARATION;\r\n\r\n /** Array of namespace members. */\r\n members: Statement[];\r\n}\r\n\r\n/** Represents a `return` statement. */\r\nexport class ReturnStatement extends Statement {\r\n kind = NodeKind.RETURN;\r\n\r\n /** Value expression being returned, if present. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents a single `case` within a `switch` statement. */\r\nexport class SwitchCase extends Node {\r\n kind = NodeKind.SWITCHCASE;\r\n\r\n /** Label expression. `null` indicates the default case. */\r\n label: Expression | null;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `switch` statement. */\r\nexport class SwitchStatement extends Statement {\r\n kind = NodeKind.SWITCH;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Contained cases. */\r\n cases: SwitchCase[];\r\n}\r\n\r\n/** Represents a `throw` statement. */\r\nexport class ThrowStatement extends Statement {\r\n kind = NodeKind.THROW;\r\n\r\n /** Value expression being thrown. */\r\n value: Expression;\r\n}\r\n\r\n/** Represents a `try` statement. */\r\nexport class TryStatement extends Statement {\r\n kind = NodeKind.TRY;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Exception variable name, if a `catch` clause is present. */\r\n catchVariable: IdentifierExpression | null;\r\n /** Statements being executed on catch, if a `catch` clause is present. */\r\n catchStatements: Statement[] | null;\r\n /** Statements being executed afterwards, if a `finally` clause is present. */\r\n finallyStatements: Statement[] | null;\r\n}\r\n\r\n/** Represents a `type` declaration. */\r\nexport class TypeDeclaration extends DeclarationStatement {\r\n kind = NodeKind.TYPEDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Type being aliased. */\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents a variable declaration part of a {@link VariableStatement}. */\r\nexport class VariableDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.VARIABLEDECLARATION;\r\n}\r\n\r\n/** Represents a variable statement wrapping {@link VariableDeclaration}s. */\r\nexport class VariableStatement extends Statement {\r\n kind = NodeKind.VARIABLE;\r\n\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null;\r\n /** Array of member declarations. */\r\n declarations: VariableDeclaration[];\r\n}\r\n\r\n/** Represents a void statement dropping an expression's value. */\r\nexport class VoidStatement extends Statement {\r\n kind = NodeKind.VOID;\r\n\r\n /** Expression being dropped. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a `while` statement. */\r\nexport class WhileStatement extends Statement {\r\n kind = NodeKind.WHILE;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Finds the first decorator matching the specified kind. */\r\nexport function findDecorator(kind: DecoratorKind, decorators: DecoratorNode[] | null): DecoratorNode | null {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n if (decorator.decoratorKind == kind) return decorator;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Mangles a declaration's name to an internal name. */\r\nexport function mangleInternalName(declaration: DeclarationStatement, asGlobal: bool = false): string {\r\n var name = declaration.name.text;\r\n var parent = declaration.parent;\r\n if (!parent) return name;\r\n if (\r\n declaration.kind == NodeKind.VARIABLEDECLARATION &&\r\n parent.kind == NodeKind.VARIABLE\r\n ) { // skip over\r\n if (!(parent = parent.parent)) return name;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) + (\r\n declaration.is(CommonFlags.STATIC)\r\n ? STATIC_DELIMITER\r\n : INSTANCE_DELIMITER\r\n ) + name;\r\n }\r\n if (\r\n parent.kind == NodeKind.NAMESPACEDECLARATION ||\r\n parent.kind == NodeKind.ENUMDECLARATION\r\n ) {\r\n return mangleInternalName(parent, asGlobal) +\r\n STATIC_DELIMITER + name;\r\n }\r\n return asGlobal\r\n ? name\r\n : declaration.range.source.internalPath + PATH_DELIMITER + name;\r\n}\r\n\r\n/** Mangles an external to an internal path. */\r\nexport function mangleInternalPath(path: string): string {\r\n if (path.endsWith(\".ts\")) path = path.substring(0, path.length - 3);\r\n return path;\r\n}\r\n\r\n// Helpers\r\n\r\n/** Sets the parent node on an array of nodes. */\r\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\n/** Sets the parent node on an array of nullable nodes. */\r\nfunction setParentIfNotNull(nodes: (Node | null)[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n let node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\r\n}\r\n","/**\r\n * Various compiler utilities.\r\n * @module util\r\n * @preferred\r\n *//***/\r\n\r\nexport * from \"./charcode\";\r\nexport * from \"./path\";\r\nexport * from \"./text\";\r\nexport * from \"./binary\";\r\n","/**\r\n * A thin wrapper around Binaryen's C-API.\r\n * @module module\r\n *//***/\r\n\r\nimport {\r\n Target\r\n} from \"./compiler\";\r\n\r\nexport type ModuleRef = usize;\r\nexport type FunctionTypeRef = usize;\r\nexport type FunctionRef = usize;\r\nexport type ExpressionRef = usize;\r\nexport type GlobalRef = usize;\r\nexport type ImportRef = usize;\r\nexport type ExportRef = usize;\r\nexport type Index = u32;\r\n\r\nexport enum NativeType {\r\n None = _BinaryenTypeNone(),\r\n I32 = _BinaryenTypeInt32(),\r\n I64 = _BinaryenTypeInt64(),\r\n F32 = _BinaryenTypeFloat32(),\r\n F64 = _BinaryenTypeFloat64(),\r\n Unreachable = _BinaryenTypeUnreachable(),\r\n Auto = _BinaryenTypeAuto()\r\n}\r\n\r\nexport enum ExpressionId {\r\n Invalid = _BinaryenInvalidId(),\r\n Block = _BinaryenBlockId(),\r\n If = _BinaryenIfId(),\r\n Loop = _BinaryenLoopId(),\r\n Break = _BinaryenBreakId(),\r\n Switch = _BinaryenSwitchId(),\r\n Call = _BinaryenCallId(),\r\n CallImport = _BinaryenCallImportId(),\r\n CallIndirect = _BinaryenCallIndirectId(),\r\n GetLocal = _BinaryenGetLocalId(),\r\n SetLocal = _BinaryenSetLocalId(),\r\n GetGlobal = _BinaryenGetGlobalId(),\r\n SetGlobal = _BinaryenSetGlobalId(),\r\n Load = _BinaryenLoadId(),\r\n Store = _BinaryenStoreId(),\r\n Const = _BinaryenConstId(),\r\n Unary = _BinaryenUnaryId(),\r\n Binary = _BinaryenBinaryId(),\r\n Select = _BinaryenSelectId(),\r\n Drop = _BinaryenDropId(),\r\n Return = _BinaryenReturnId(),\r\n Host = _BinaryenHostId(),\r\n Nop = _BinaryenNopId(),\r\n Unreachable = _BinaryenUnreachableId(),\r\n AtomicCmpxchg = _BinaryenAtomicCmpxchgId(),\r\n AtomicRMW = _BinaryenAtomicRMWId(),\r\n AtomicWait = _BinaryenAtomicWaitId(),\r\n AtomicWake = _BinaryenAtomicWakeId()\r\n}\r\n\r\nexport enum UnaryOp {\r\n ClzI32 = _BinaryenClzInt32(),\r\n CtzI32 = _BinaryenCtzInt32(),\r\n PopcntI32 = _BinaryenPopcntInt32(),\r\n NegF32 = _BinaryenNegFloat32(),\r\n AbsF32 = _BinaryenAbsFloat32(),\r\n CeilF32 = _BinaryenCeilFloat32(),\r\n FloorF32 = _BinaryenFloorFloat32(),\r\n TruncF32 = _BinaryenTruncFloat32(),\r\n NearestF32 = _BinaryenNearestFloat32(),\r\n SqrtF32 = _BinaryenSqrtFloat32(),\r\n EqzI32 = _BinaryenEqZInt32(),\r\n ClzI64 = _BinaryenClzInt64(),\r\n CtzI64 = _BinaryenCtzInt64(),\r\n PopcntI64 = _BinaryenPopcntInt64(),\r\n NegF64 = _BinaryenNegFloat64(),\r\n AbsF64 = _BinaryenAbsFloat64(),\r\n CeilF64 = _BinaryenCeilFloat64(),\r\n FloorF64 = _BinaryenFloorFloat64(),\r\n TruncF64 = _BinaryenTruncFloat64(),\r\n NearestF64 = _BinaryenNearestFloat64(),\r\n SqrtF64 = _BinaryenSqrtFloat64(),\r\n EqzI64 = _BinaryenEqZInt64(),\r\n ExtendI32 = _BinaryenExtendSInt32(),\r\n ExtendU32 = _BinaryenExtendUInt32(),\r\n WrapI64 = _BinaryenWrapInt64(),\r\n TruncF32ToI32 = _BinaryenTruncSFloat32ToInt32(),\r\n TruncF32ToI64 = _BinaryenTruncSFloat32ToInt64(),\r\n TruncF32ToU32 = _BinaryenTruncUFloat32ToInt32(),\r\n TruncF32ToU64 = _BinaryenTruncUFloat32ToInt64(),\r\n TruncF64ToI32 = _BinaryenTruncSFloat64ToInt32(),\r\n TruncF64ToI64 = _BinaryenTruncSFloat64ToInt64(),\r\n TruncF64ToU32 = _BinaryenTruncUFloat64ToInt32(),\r\n TruncF64ToU64 = _BinaryenTruncUFloat64ToInt64(),\r\n ReinterpretF32 = _BinaryenReinterpretFloat32(),\r\n ReinterpretF64 = _BinaryenReinterpretFloat64(),\r\n ConvertI32ToF32 = _BinaryenConvertSInt32ToFloat32(),\r\n ConvertI32ToF64 = _BinaryenConvertSInt32ToFloat64(),\r\n ConvertU32ToF32 = _BinaryenConvertUInt32ToFloat32(),\r\n ConvertU32ToF64 = _BinaryenConvertUInt32ToFloat64(),\r\n ConvertI64ToF32 = _BinaryenConvertSInt64ToFloat32(),\r\n ConvertI64ToF64 = _BinaryenConvertSInt64ToFloat64(),\r\n ConvertU64ToF32 = _BinaryenConvertUInt64ToFloat32(),\r\n ConvertU64ToF64 = _BinaryenConvertUInt64ToFloat64(),\r\n PromoteF32 = _BinaryenPromoteFloat32(),\r\n DemoteF64 = _BinaryenDemoteFloat64(),\r\n ReinterpretI32 = _BinaryenReinterpretInt32(),\r\n ReinterpretI64 = _BinaryenReinterpretInt64(),\r\n\r\n // see: https://github.com/WebAssembly/sign-extension-ops\r\n ExtendI8ToI32 = _BinaryenExtendS8Int32(),\r\n ExtendI16ToI32 = _BinaryenExtendS16Int32(),\r\n ExtendI8ToI64 = _BinaryenExtendS8Int64(),\r\n ExtendI16ToI64 = _BinaryenExtendS16Int64(),\r\n ExtendI32ToI64 = _BinaryenExtendS32Int64()\r\n\r\n // see: https://github.com/WebAssembly/nontrapping-float-to-int-conversions\r\n // TruncF32ToI32Sat\r\n // TruncF32ToU32Sat\r\n // TruncF64ToI32Sat\r\n // TruncF64ToU32Sat\r\n // TruncF32ToI64Sat\r\n // TruncF32ToU64Sat\r\n // TruncF64ToI64Sat\r\n // TruncF64ToU64Sat\r\n}\r\n\r\nexport enum BinaryOp {\r\n AddI32 = _BinaryenAddInt32(),\r\n SubI32 = _BinaryenSubInt32(),\r\n MulI32 = _BinaryenMulInt32(),\r\n DivI32 = _BinaryenDivSInt32(),\r\n DivU32 = _BinaryenDivUInt32(),\r\n RemI32 = _BinaryenRemSInt32(),\r\n RemU32 = _BinaryenRemUInt32(),\r\n AndI32 = _BinaryenAndInt32(),\r\n OrI32 = _BinaryenOrInt32(),\r\n XorI32 = _BinaryenXorInt32(),\r\n ShlI32 = _BinaryenShlInt32(),\r\n ShrU32 = _BinaryenShrUInt32(),\r\n ShrI32 = _BinaryenShrSInt32(),\r\n RotlI32 = _BinaryenRotLInt32(),\r\n RotrI32 = _BinaryenRotRInt32(),\r\n EqI32 = _BinaryenEqInt32(),\r\n NeI32 = _BinaryenNeInt32(),\r\n LtI32 = _BinaryenLtSInt32(),\r\n LtU32 = _BinaryenLtUInt32(),\r\n LeI32 = _BinaryenLeSInt32(),\r\n LeU32 = _BinaryenLeUInt32(),\r\n GtI32 = _BinaryenGtSInt32(),\r\n GtU32 = _BinaryenGtUInt32(),\r\n GeI32 = _BinaryenGeSInt32(),\r\n GeU32 = _BinaryenGeUInt32(),\r\n AddI64 = _BinaryenAddInt64(),\r\n SubI64 = _BinaryenSubInt64(),\r\n MulI64 = _BinaryenMulInt64(),\r\n DivI64 = _BinaryenDivSInt64(),\r\n DivU64 = _BinaryenDivUInt64(),\r\n RemI64 = _BinaryenRemSInt64(),\r\n RemU64 = _BinaryenRemUInt64(),\r\n AndI64 = _BinaryenAndInt64(),\r\n OrI64 = _BinaryenOrInt64(),\r\n XorI64 = _BinaryenXorInt64(),\r\n ShlI64 = _BinaryenShlInt64(),\r\n ShrU64 = _BinaryenShrUInt64(),\r\n ShrI64 = _BinaryenShrSInt64(),\r\n RotlI64 = _BinaryenRotLInt64(),\r\n RotrI64 = _BinaryenRotRInt64(),\r\n EqI64 = _BinaryenEqInt64(),\r\n NeI64 = _BinaryenNeInt64(),\r\n LtI64 = _BinaryenLtSInt64(),\r\n LtU64 = _BinaryenLtUInt64(),\r\n LeI64 = _BinaryenLeSInt64(),\r\n LeU64 = _BinaryenLeUInt64(),\r\n GtI64 = _BinaryenGtSInt64(),\r\n GtU64 = _BinaryenGtUInt64(),\r\n GeI64 = _BinaryenGeSInt64(),\r\n GeU64 = _BinaryenGeUInt64(),\r\n AddF32 = _BinaryenAddFloat32(),\r\n SubF32 = _BinaryenSubFloat32(),\r\n MulF32 = _BinaryenMulFloat32(),\r\n DivF32 = _BinaryenDivFloat32(),\r\n CopysignF32 = _BinaryenCopySignFloat32(),\r\n MinF32 = _BinaryenMinFloat32(),\r\n MaxF32 = _BinaryenMaxFloat32(),\r\n EqF32 = _BinaryenEqFloat32(),\r\n NeF32 = _BinaryenNeFloat32(),\r\n LtF32 = _BinaryenLtFloat32(),\r\n LeF32 = _BinaryenLeFloat32(),\r\n GtF32 = _BinaryenGtFloat32(),\r\n GeF32 = _BinaryenGeFloat32(),\r\n AddF64 = _BinaryenAddFloat64(),\r\n SubF64 = _BinaryenSubFloat64(),\r\n MulF64 = _BinaryenMulFloat64(),\r\n DivF64 = _BinaryenDivFloat64(),\r\n CopysignF64 = _BinaryenCopySignFloat64(),\r\n MinF64 = _BinaryenMinFloat64(),\r\n MaxF64 = _BinaryenMaxFloat64(),\r\n EqF64 = _BinaryenEqFloat64(),\r\n NeF64 = _BinaryenNeFloat64(),\r\n LtF64 = _BinaryenLtFloat64(),\r\n LeF64 = _BinaryenLeFloat64(),\r\n GtF64 = _BinaryenGtFloat64(),\r\n GeF64 = _BinaryenGeFloat64()\r\n}\r\n\r\nexport enum HostOp {\r\n PageSize = _BinaryenPageSize(),\r\n CurrentMemory = _BinaryenCurrentMemory(),\r\n GrowMemory = _BinaryenGrowMemory(),\r\n HasFeature = _BinaryenHasFeature(),\r\n\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n // MoveMemory\r\n // SetMemory\r\n}\r\n\r\nexport enum AtomicRMWOp {\r\n Add = _BinaryenAtomicRMWAdd(),\r\n Sub = _BinaryenAtomicRMWSub(),\r\n And = _BinaryenAtomicRMWAnd(),\r\n Or = _BinaryenAtomicRMWOr(),\r\n Xor = _BinaryenAtomicRMWXor(),\r\n Xchg = _BinaryenAtomicRMWXchg()\r\n}\r\n\r\nexport class MemorySegment {\r\n\r\n buffer: Uint8Array;\r\n offset: I64;\r\n\r\n static create(buffer: Uint8Array, offset: I64): MemorySegment {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n }\r\n}\r\n\r\nexport class Module {\r\n\r\n ref: ModuleRef;\r\n\r\n private cachedByValue: usize;\r\n\r\n /** Maximum number of pages when targeting WASM32. */\r\n static readonly MAX_MEMORY_WASM32: Index = 0xffff;\r\n\r\n /** Maximum number of pages when targeting WASM64. */\r\n static readonly MAX_MEMORY_WASM64: Index = 0xffff; // TODO\r\n\r\n static create(): Module {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.cachedByValue = allocate_memory(16);\r\n return module;\r\n }\r\n\r\n static createFrom(buffer: Uint8Array): Module {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.cachedByValue = allocate_memory(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n free_memory(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeFunctionType(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunctionType(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocPtrArray(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, numNames, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) free_memory(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallImport(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCallImport(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocPtrArray(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[] | null,\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes ? varTypes.length : 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n private cachedTemporaryName: usize = 0;\r\n private hasTemporaryFunction: bool = false;\r\n\r\n addTemporaryFunction(result: NativeType, paramTypes: NativeType[] | null, body: ExpressionRef): FunctionRef {\r\n this.hasTemporaryFunction = assert(!this.hasTemporaryFunction);\r\n var tempName = this.cachedTemporaryName;\r\n if (!tempName) this.cachedTemporaryName = tempName = allocString(\"\"); // works because strings are interned\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n let typeRef = _BinaryenAddFunctionType(this.ref, tempName, result, cArr, paramTypes ? paramTypes.length : 0);\r\n return _BinaryenAddFunction(this.ref, tempName, typeRef, 0, 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeTemporaryFunction(): void {\r\n this.hasTemporaryFunction = !assert(this.hasTemporaryFunction);\r\n var tempName = assert(this.cachedTemporaryName);\r\n _BinaryenRemoveFunction(this.ref, tempName);\r\n _BinaryenRemoveFunctionType(this.ref, tempName);\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeImport(internalName: string): void {\r\n var cStr = allocString(internalName);\r\n try {\r\n _BinaryenRemoveImport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n free_memory(cArr3);\r\n free_memory(cArr2);\r\n free_memory(cArr1);\r\n for (let i = k - 1; i >= 0; --i) free_memory(segs[i]);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(funcs: FunctionRef[]): void {\r\n var cArr = allocPtrArray(funcs);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, funcs.length);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n free_memory(cArr);\r\n for (let i = numNames; i >= 0; --i) {\r\n free_memory(names[i]);\r\n }\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0;\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeFunction(func: FunctionRef): void {\r\n var names = this.cachedPrecomputeNames;\r\n if (!names) {\r\n let name = allocString(\"precompute\");\r\n this.cachedPrecomputeName = name;\r\n this.cachedPrecomputeNames = names = allocI32Array([ name ]);\r\n }\r\n _BinaryenFunctionRunPasses(func, this.ref, names, 1);\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): BinaryModule {\r\n var out = this.cachedByValue;\r\n var cStr = allocString(sourceMapUrl);\r\n var binaryPtr: usize = 0;\r\n var sourceMapPtr: usize = 0;\r\n try {\r\n _BinaryenModuleAllocateAndWrite(out, this.ref, cStr);\r\n binaryPtr = readInt(out);\r\n let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let ret = new BinaryModule();\r\n ret.output = readBuffer(binaryPtr, binaryBytes);\r\n ret.sourceMap = readString(sourceMapPtr);\r\n return ret;\r\n } finally {\r\n if (cStr) free_memory(cStr);\r\n if (binaryPtr) free_memory(binaryPtr);\r\n if (sourceMapPtr) free_memory(sourceMapPtr);\r\n }\r\n }\r\n\r\n toText(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n toAsmjs(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n dispose(): void {\r\n assert(this.ref);\r\n free_memory(this.cachedByValue);\r\n free_memory(this.cachedTemporaryName);\r\n free_memory(this.cachedPrecomputeName);\r\n free_memory(this.cachedPrecomputeNames);\r\n _BinaryenModuleDispose(this.ref);\r\n this.ref = 0;\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(\r\n expr: ExpressionRef,\r\n noSideEffects: bool = false,\r\n maxDepth: i32 = i32.MAX_VALUE\r\n ): ExpressionRef { // currently supports side effect free expressions only\r\n if (maxDepth < 0) return 0;\r\n maxDepth -= 1;\r\n\r\n var nested1: ExpressionRef,\r\n nested2: ExpressionRef;\r\n\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n }\r\n case ExpressionId.GetLocal: {\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n }\r\n case ExpressionId.GetGlobal: {\r\n let globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n }\r\n case ExpressionId.Load: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return (\r\n _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n );\r\n }\r\n case ExpressionId.Unary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n }\r\n case ExpressionId.Binary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\n// expressions\r\n\r\nexport function getExpressionId(expr: ExpressionRef): ExpressionId {\r\n return _BinaryenExpressionGetId(expr);\r\n}\r\n\r\nexport function getExpressionType(expr: ExpressionRef): NativeType {\r\n return _BinaryenExpressionGetType(expr);\r\n}\r\n\r\nexport function getConstValueI32(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI32(expr);\r\n}\r\n\r\nexport function getConstValueI64Low(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64Low(expr);\r\n}\r\n\r\nexport function getConstValueI64High(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64High(expr);\r\n}\r\n\r\nexport function getConstValueF32(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF32(expr);\r\n}\r\n\r\nexport function getConstValueF64(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF64(expr);\r\n}\r\n\r\nexport function getGetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenGetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenSetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSetLocalGetValue(expr);\r\n}\r\n\r\nexport function isTeeLocal(expr: ExpressionRef): bool {\r\n return _BinaryenSetLocalIsTee(expr);\r\n}\r\n\r\nexport function getBinaryOp(expr: ExpressionRef): BinaryOp {\r\n return _BinaryenBinaryGetOp(expr);\r\n}\r\n\r\nexport function getBinaryLeft(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetLeft(expr);\r\n}\r\n\r\nexport function getBinaryRight(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetRight(expr);\r\n}\r\n\r\nexport function getUnaryOp(expr: ExpressionRef): UnaryOp {\r\n return _BinaryenUnaryGetOp(expr);\r\n}\r\n\r\nexport function getUnaryValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenUnaryGetValue(expr);\r\n}\r\n\r\nexport function getLoadBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetBytes(expr);\r\n}\r\n\r\nexport function getLoadOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetOffset(expr);\r\n}\r\n\r\nexport function getLoadPtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoadGetPtr(expr);\r\n}\r\n\r\nexport function isLoadSigned(expr: ExpressionRef): bool {\r\n return _BinaryenLoadIsSigned(expr);\r\n}\r\n\r\nexport function getStoreBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetBytes(expr);\r\n}\r\n\r\nexport function getStoreOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetOffset(expr);\r\n}\r\n\r\nexport function getStorePtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetPtr(expr);\r\n}\r\n\r\nexport function getStoreValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetValue(expr);\r\n}\r\n\r\nexport function getBlockName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBlockGetName(expr));\r\n}\r\n\r\nexport function getBlockChildCount(expr: ExpressionRef): Index {\r\n return _BinaryenBlockGetNumChildren(expr);\r\n}\r\n\r\nexport function getBlockChild(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenBlockGetChild(expr, index);\r\n}\r\n\r\nexport function getIfCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetCondition(expr);\r\n}\r\n\r\nexport function getIfTrue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfTrue(expr);\r\n}\r\n\r\nexport function getIfFalse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfFalse(expr);\r\n}\r\n\r\nexport function getLoopName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenLoopGetName(expr));\r\n}\r\n\r\nexport function getLoopBody(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoopGetBody(expr);\r\n}\r\n\r\nexport function getBreakName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBreakGetName(expr));\r\n}\r\n\r\nexport function getBreakCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBreakGetCondition(expr);\r\n}\r\n\r\nexport function getSelectThen(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfTrue(expr);\r\n}\r\n\r\nexport function getSelectElse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfFalse(expr);\r\n}\r\n\r\nexport function getSelectCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetCondition(expr);\r\n}\r\n\r\nexport function getDropValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenDropGetValue(expr);\r\n}\r\n\r\nexport function getReturnValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenReturnGetValue(expr);\r\n}\r\n\r\nexport function getCallTarget(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenCallGetTarget(expr));\r\n}\r\n\r\nexport function getHostOp(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenHostGetOp(expr);\r\n}\r\n\r\nexport function getHostOperandCount(expr: ExpressionRef): Index {\r\n return _BinaryenHostGetNumOperands(expr);\r\n}\r\n\r\nexport function getHostOperand(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenHostGetOperand(expr, index);\r\n}\r\n\r\nexport function getHostName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenHostGetNameOperand(expr));\r\n}\r\n\r\n// functions\r\n\r\nexport function getFunctionBody(func: FunctionRef): ExpressionRef {\r\n return _BinaryenFunctionGetBody(func);\r\n}\r\n\r\nexport function getFunctionName(func: FunctionRef): string | null {\r\n return readString(_BinaryenFunctionGetName(func));\r\n}\r\n\r\nexport function getFunctionParamCount(func: FunctionRef): Index {\r\n return _BinaryenFunctionGetNumParams(func);\r\n}\r\n\r\nexport function getFunctionParamType(func: FunctionRef, index: Index): NativeType {\r\n return _BinaryenFunctionGetParam(func, index);\r\n}\r\n\r\nexport function getFunctionResultType(func: FunctionRef): NativeType {\r\n return _BinaryenFunctionGetResult(func);\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n }\r\n\r\n private constructor() {}\r\n\r\n addBlock(code: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlock(this.ref, code);\r\n }\r\n\r\n addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void {\r\n _RelooperAddBranch(from, to, condition, code);\r\n }\r\n\r\n addBlockWithSwitch(code: ExpressionRef, condition: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n }\r\n\r\n addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n }\r\n}\r\n\r\n// export function hasSideEffects(expr: ExpressionRef): bool {\r\n// switch (_BinaryenExpressionGetId(expr = getPtr(expr))) {\r\n// case ExpressionId.GetLocal:\r\n// case ExpressionId.GetGlobal:\r\n// case ExpressionId.Const:\r\n// case ExpressionId.Nop:\r\n// case ExpressionId.Unreachable: {\r\n// return false;\r\n// }\r\n// case ExpressionId.Block: {\r\n// for (let i = 0, k = _BinaryenBlockGetNumChildren(expr); i < k; ++i) {\r\n// if (hasSideEffects(_BinaryenBlockGetChild(expr, i))) return true;\r\n// }\r\n// return false;\r\n// }\r\n// case ExpressionId.If: {\r\n// return hasSideEffects(_BinaryenIfGetCondition(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfFalse(expr));\r\n// }\r\n// case ExpressionId.Unary: {\r\n// return hasSideEffects(_BinaryenUnaryGetValue(expr));\r\n// }\r\n// case ExpressionId.Binary: {\r\n// return hasSideEffects(_BinaryenBinaryGetLeft(expr))\r\n// || hasSideEffects(_BinaryenBinaryGetRight(expr));\r\n// }\r\n// case ExpressionId.Drop: {\r\n// return hasSideEffects(_BinaryenDropGetValue(expr));\r\n// }\r\n// case ExpressionId.Select: {\r\n// return hasSideEffects(_BinaryenSelectGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenSelectGetIfFalse(expr))\r\n// || hasSideEffects(_BinaryenSelectGetCondition(expr));\r\n// }\r\n// }\r\n// return true;\r\n// }\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var numValues = u8s.length;\r\n var ptr = allocate_memory(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = allocate_memory(i32s.length << 2);\r\n var idx = ptr;\r\n for (let i = 0, k = i32s.length; i < k; ++i) {\r\n let val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocPtrArray(ptrs: usize[] | null): usize {\r\n return allocI32Array(ptrs); // TODO: WASM64 one day\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = allocate_memory(stringLengthUTF8(str) + 1);\r\n // the following is based on Emscripten's stringToUTF8Array\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\nfunction readInt(ptr: usize): i32 {\r\n return (\r\n load(ptr ) |\r\n (load(ptr + 1) << 8) |\r\n (load(ptr + 2) << 16) |\r\n (load(ptr + 3) << 24)\r\n );\r\n}\r\n\r\nfunction readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (let i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n arr.push(cp);\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\nexport class BinaryModule {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n","/**\r\n * AssemblyScript's intermediate representation describing a program's elements.\r\n * @module program\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX,\r\n GETTER_PREFIX,\r\n SETTER_PREFIX,\r\n FILESPACE_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Options,\r\n Feature\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n Signature\r\n} from \"./types\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n CommonTypeNode,\r\n TypeParameterNode,\r\n DecoratorNode,\r\n DecoratorKind,\r\n\r\n Expression,\r\n IdentifierExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n StringLiteralExpression,\r\n\r\n ClassDeclaration,\r\n DeclarationStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportMember,\r\n ExportStatement,\r\n FieldDeclaration,\r\n FunctionDeclaration,\r\n ImportDeclaration,\r\n ImportStatement,\r\n InterfaceDeclaration,\r\n MethodDeclaration,\r\n NamespaceDeclaration,\r\n TypeDeclaration,\r\n VariableDeclaration,\r\n VariableLikeDeclarationStatement,\r\n VariableStatement,\r\n\r\n decoratorNameToKind\r\n} from \"./ast\";\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionRef,\r\n ExpressionId,\r\n BinaryOp,\r\n UnaryOp,\r\n\r\n getExpressionId,\r\n getGetLocalIndex,\r\n isTeeLocal,\r\n getSetLocalValue,\r\n getBinaryOp,\r\n getConstValueI32,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getUnaryOp,\r\n getExpressionType,\r\n getLoadBytes,\r\n isLoadSigned,\r\n getIfTrue,\r\n getIfFalse,\r\n getSelectThen,\r\n getSelectElse,\r\n getCallTarget,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getConstValueI64Low\r\n} from \"./module\";\r\n\r\nimport {\r\n CharCode\r\n} from \"./util\";\r\n\r\nimport {\r\n Resolver\r\n} from \"./resolver\";\r\n\r\n/** Represents a yet unresolved import. */\r\nclass QueuedImport {\r\n localName: string;\r\n externalName: string;\r\n externalNameAlt: string;\r\n declaration: ImportDeclaration | null; // not set if a filespace\r\n}\r\n\r\n/** Represents a yet unresolved export. */\r\nclass QueuedExport {\r\n externalName: string;\r\n isReExport: bool;\r\n member: ExportMember;\r\n}\r\n\r\n/** Represents a type alias. */\r\nclass TypeAlias {\r\n typeParameters: TypeParameterNode[] | null;\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents the kind of an operator overload. */\r\nexport enum OperatorKind {\r\n INVALID,\r\n\r\n // indexed access\r\n INDEXED_GET, // a[]\r\n INDEXED_SET, // a[]=b\r\n UNCHECKED_INDEXED_GET, // unchecked(a[])\r\n UNCHECKED_INDEXED_SET, // unchecked(a[]=b)\r\n\r\n // binary\r\n ADD, // a + b\r\n SUB, // a - b\r\n MUL, // a * b\r\n DIV, // a / b\r\n REM, // a % b\r\n POW, // a ** b\r\n BITWISE_AND, // a & b\r\n BITWISE_OR, // a | b\r\n BITWISE_XOR, // a ^ b\r\n BITWISE_SHL, // a << b\r\n BITWISE_SHR, // a >> b\r\n BITWISE_SHR_U, // a >>> b\r\n EQ, // a == b\r\n NE, // a != b\r\n GT, // a > b\r\n GE, // a >= b\r\n LT, // a < b\r\n LE, // a <= b\r\n\r\n // unary prefix\r\n PLUS, // +a\r\n MINUS, // -a\r\n NOT, // !a\r\n BITWISE_NOT, // ~a\r\n PREFIX_INC, // ++a\r\n PREFIX_DEC, // --a\r\n\r\n // unary postfix\r\n POSTFIX_INC, // a++\r\n POSTFIX_DEC // a--\r\n\r\n // not overridable:\r\n // IDENTITY // a === b\r\n // LOGICAL_AND // a && b\r\n // LOGICAL_OR // a || b\r\n}\r\n\r\n/** Returns the operator kind represented by the specified decorator and string argument. */\r\nfunction operatorKindFromDecorator(decoratorKind: DecoratorKind, arg: string): OperatorKind {\r\n assert(arg.length);\r\n switch (decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.OPENBRACKET: {\r\n if (arg == \"[]\") return OperatorKind.INDEXED_GET;\r\n if (arg == \"[]=\") return OperatorKind.INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.OPENBRACE: {\r\n if (arg == \"{}\") return OperatorKind.UNCHECKED_INDEXED_GET;\r\n if (arg == \"{}=\") return OperatorKind.UNCHECKED_INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.ADD;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.SUB;\r\n break;\r\n }\r\n case CharCode.ASTERISK: {\r\n if (arg == \"*\") return OperatorKind.MUL;\r\n if (arg == \"**\") return OperatorKind.POW;\r\n break;\r\n }\r\n case CharCode.SLASH: {\r\n if (arg == \"/\") return OperatorKind.DIV;\r\n break;\r\n }\r\n case CharCode.PERCENT: {\r\n if (arg == \"%\") return OperatorKind.REM;\r\n break;\r\n }\r\n case CharCode.AMPERSAND: {\r\n if (arg == \"&\") return OperatorKind.BITWISE_AND;\r\n break;\r\n }\r\n case CharCode.BAR: {\r\n if (arg == \"|\") return OperatorKind.BITWISE_OR;\r\n break;\r\n }\r\n case CharCode.CARET: {\r\n if (arg == \"^\") return OperatorKind.BITWISE_XOR;\r\n break;\r\n }\r\n case CharCode.EQUALS: {\r\n if (arg == \"==\") return OperatorKind.EQ;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!=\") return OperatorKind.NE;\r\n break;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n if (arg == \">\") return OperatorKind.GT;\r\n if (arg == \">=\") return OperatorKind.GE;\r\n if (arg == \">>\") return OperatorKind.BITWISE_SHR;\r\n if (arg == \">>>\") return OperatorKind.BITWISE_SHR_U;\r\n break;\r\n }\r\n case CharCode.LESSTHAN: {\r\n if (arg == \"<\") return OperatorKind.LT;\r\n if (arg == \"<=\") return OperatorKind.LE;\r\n if (arg == \"<<\") return OperatorKind.BITWISE_SHL;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_PREFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.PLUS;\r\n if (arg == \"++\") return OperatorKind.PREFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.MINUS;\r\n if (arg == \"--\") return OperatorKind.PREFIX_DEC;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!\") return OperatorKind.NOT;\r\n break;\r\n }\r\n case CharCode.TILDE: {\r\n if (arg == \"~\") return OperatorKind.BITWISE_NOT;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"++\") return OperatorKind.POSTFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"--\") return OperatorKind.POSTFIX_DEC;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n return OperatorKind.INVALID;\r\n}\r\n\r\nconst noTypesYet = new Map();\r\n\r\n/** Represents an AssemblyScript program. */\r\nexport class Program extends DiagnosticEmitter {\r\n\r\n /** Array of source files. */\r\n sources: Source[];\r\n /** Resolver instance. */\r\n resolver: Resolver;\r\n /** Diagnostic offset used where successively obtaining the next diagnostic. */\r\n diagnosticsOffset: i32 = 0;\r\n /** Compiler options. */\r\n options: Options;\r\n\r\n /** Elements by internal name. */\r\n elementsLookup: Map = new Map();\r\n /** Class and function instances by internal name. */\r\n instancesLookup: Map = new Map();\r\n /** Types by internal name. */\r\n typesLookup: Map = noTypesYet;\r\n /** Declared type aliases. */\r\n typeAliases: Map = new Map();\r\n /** File-level exports by exported name. */\r\n fileLevelExports: Map = new Map();\r\n /** Module-level exports by exported name. */\r\n moduleLevelExports: Map = new Map();\r\n\r\n /** Array prototype reference. */\r\n arrayPrototype: ClassPrototype | null = null;\r\n /** String instance reference. */\r\n stringInstance: Class | null = null;\r\n /** Start function reference. */\r\n startFunction: FunctionPrototype;\r\n /** Main function reference, if present. */\r\n mainFunction: FunctionPrototype | null = null;\r\n\r\n /** Currently processing filespace. */\r\n currentFilespace: Filespace;\r\n\r\n /** Constructs a new program, optionally inheriting parser diagnostics. */\r\n constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.resolver = new Resolver(this);\r\n this.sources = [];\r\n }\r\n\r\n /** Gets a source by its exact path. */\r\n getSource(normalizedPath: string): Source | null {\r\n var sources = this.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n let source = sources[i];\r\n if (source.normalizedPath == normalizedPath) return source;\r\n }\r\n return null;\r\n }\r\n\r\n /** Looks up the source for the specified possibly ambiguous path. */\r\n lookupSourceByPath(normalizedPathWithoutExtension: string): Source | null {\r\n var tmp: string;\r\n return (\r\n this.getSource(normalizedPathWithoutExtension + \".ts\") ||\r\n this.getSource(normalizedPathWithoutExtension + \"/index.ts\") ||\r\n this.getSource((tmp = LIBRARY_PREFIX + normalizedPathWithoutExtension) + \".ts\") ||\r\n this.getSource( tmp + \"/index.ts\")\r\n );\r\n }\r\n\r\n /** Initializes the program and its elements prior to compilation. */\r\n initialize(options: Options): void {\r\n this.options = options;\r\n\r\n // add built-in types\r\n this.typesLookup = new Map([\r\n [\"i8\", Type.i8],\r\n [\"i16\", Type.i16],\r\n [\"i32\", Type.i32],\r\n [\"i64\", Type.i64],\r\n [\"isize\", options.isizeType],\r\n [\"u8\", Type.u8],\r\n [\"u16\", Type.u16],\r\n [\"u32\", Type.u32],\r\n [\"u64\", Type.u64],\r\n [\"usize\", options.usizeType],\r\n [\"bool\", Type.bool],\r\n [\"f32\", Type.f32],\r\n [\"f64\", Type.f64],\r\n [\"void\", Type.void],\r\n [\"number\", Type.f64],\r\n [\"boolean\", Type.bool]\r\n ]);\r\n\r\n // add compiler hints\r\n this.setConstantInteger(\"ASC_TARGET\", Type.i32,\r\n i64_new(options.isWasm64 ? 2 : 1));\r\n this.setConstantInteger(\"ASC_NO_TREESHAKING\", Type.bool,\r\n i64_new(options.noTreeShaking ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_NO_ASSERT\", Type.bool,\r\n i64_new(options.noAssert ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_MEMORY_BASE\", Type.i32,\r\n i64_new(options.memoryBase, 0));\r\n this.setConstantInteger(\"ASC_OPTIMIZE_LEVEL\", Type.i32,\r\n i64_new(options.optimizeLevelHint, 0));\r\n this.setConstantInteger(\"ASC_SHRINK_LEVEL\", Type.i32,\r\n i64_new(options.shrinkLevelHint, 0));\r\n this.setConstantInteger(\"ASC_FEATURE_MUTABLE_GLOBAL\", Type.bool,\r\n i64_new(options.hasFeature(Feature.MUTABLE_GLOBAL) ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_FEATURE_SIGN_EXTENSION\", Type.bool,\r\n i64_new(options.hasFeature(Feature.SIGN_EXTENSION) ? 1 : 0, 0));\r\n\r\n // remember deferred elements\r\n var queuedImports = new Array();\r\n var queuedExports = new Map();\r\n var queuedExtends = new Array();\r\n var queuedImplements = new Array();\r\n\r\n // build initial lookup maps of internal names to declarations\r\n for (let i = 0, k = this.sources.length; i < k; ++i) {\r\n let source = this.sources[i];\r\n\r\n // create one filespace per source\r\n let filespace = new Filespace(this, source);\r\n this.elementsLookup.set(filespace.internalName, filespace);\r\n this.currentFilespace = filespace;\r\n\r\n // process this source's statements\r\n let statements = source.statements;\r\n for (let j = 0, l = statements.length; j < l; ++j) {\r\n let statement = statements[j];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(statement, queuedExtends, queuedImplements);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(statement);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n this.initializeExports(statement, queuedExports);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(statement);\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.initializeImports(statement, queuedExports, queuedImports);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(statement);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(statement, queuedExtends, queuedImplements);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n this.initializeTypeAlias(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(statement);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // queued imports should be resolvable now through traversing exports and queued exports\r\n for (let i = 0; i < queuedImports.length;) {\r\n let queuedImport = queuedImports[i];\r\n let declaration = queuedImport.declaration;\r\n if (declaration) { // named\r\n let element = this.tryLocateImport(queuedImport.externalName, queuedExports);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.tryLocateImport(queuedImport.externalNameAlt, queuedExports)) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Module_0_has_no_exported_member_1,\r\n declaration.range,\r\n (declaration.parent).path.value,\r\n declaration.externalName.text\r\n );\r\n ++i;\r\n }\r\n }\r\n } else { // filespace\r\n let element = this.elementsLookup.get(queuedImport.externalName);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.elementsLookup.get(queuedImport.externalNameAlt)) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n assert(false); // already reported by the parser not finding the file\r\n ++i;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // queued exports should be resolvable now that imports are finalized\r\n for (let [exportName, queuedExport] of queuedExports) {\r\n let currentExport: QueuedExport | null = queuedExport; // nullable below\r\n let element: Element | null;\r\n do {\r\n if (currentExport.isReExport) {\r\n if (element = this.fileLevelExports.get(currentExport.externalName)) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n currentExport.member.externalName\r\n );\r\n break;\r\n }\r\n currentExport = queuedExports.get(currentExport.externalName);\r\n if (!currentExport) {\r\n this.error(\r\n DiagnosticCode.Module_0_has_no_exported_member_1,\r\n queuedExport.member.externalName.range,\r\n ((queuedExport.member.parent).path).value,\r\n queuedExport.member.externalName.text\r\n );\r\n }\r\n } else {\r\n if (\r\n // normal export\r\n (element = this.elementsLookup.get(currentExport.externalName)) ||\r\n // library re-export\r\n (element = this.elementsLookup.get(currentExport.member.name.text))\r\n ) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n currentExport.member.externalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n queuedExport.member.range, queuedExport.member.name.text\r\n );\r\n }\r\n break;\r\n }\r\n } while (currentExport);\r\n }\r\n\r\n // resolve base prototypes of derived classes\r\n var resolver = this.resolver;\r\n for (let i = 0, k = queuedExtends.length; i < k; ++i) {\r\n let derivedPrototype = queuedExtends[i];\r\n let derivedDeclaration = derivedPrototype.declaration;\r\n let derivedType = assert(derivedDeclaration.extendsType);\r\n let baseElement = resolver.resolveIdentifier(derivedType.name, null); // reports\r\n if (!baseElement) continue;\r\n if (baseElement.kind == ElementKind.CLASS_PROTOTYPE) {\r\n let basePrototype = baseElement;\r\n derivedPrototype.basePrototype = basePrototype;\r\n } else {\r\n this.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n derivedType.range\r\n );\r\n }\r\n }\r\n\r\n // set up global aliases\r\n var globalAliases = options.globalAliases;\r\n if (globalAliases) {\r\n for (let [alias, name] of globalAliases) {\r\n if (!name.length) continue; // explicitly disabled\r\n let element = this.elementsLookup.get(name);\r\n if (element) this.elementsLookup.set(alias, element);\r\n else throw new Error(\"element not found: \" + name);\r\n }\r\n }\r\n\r\n // register 'Array'\r\n var arrayPrototype = this.elementsLookup.get(\"Array\");\r\n if (arrayPrototype) {\r\n assert(arrayPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayPrototype = arrayPrototype;\r\n }\r\n\r\n // register 'String'\r\n var stringPrototype = this.elementsLookup.get(\"String\");\r\n if (stringPrototype) {\r\n assert(stringPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n let stringInstance = resolver.resolveClass(stringPrototype, null);\r\n if (stringInstance) {\r\n if (this.typesLookup.has(\"string\")) {\r\n let declaration = (stringPrototype).declaration;\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n } else {\r\n this.stringInstance = stringInstance;\r\n this.typesLookup.set(\"string\", stringInstance.type);\r\n }\r\n }\r\n }\r\n\r\n // register 'start'\r\n {\r\n let element = assert(this.elementsLookup.get(\"start\"));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.startFunction = element;\r\n }\r\n\r\n // register 'main' if present\r\n if (this.moduleLevelExports.has(\"main\")) {\r\n let element = this.moduleLevelExports.get(\"main\");\r\n if (\r\n element.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n !(element).isAny(CommonFlags.GENERIC | CommonFlags.AMBIENT)\r\n ) {\r\n (element).set(CommonFlags.MAIN);\r\n this.mainFunction = element;\r\n }\r\n }\r\n }\r\n\r\n /** Sets a constant integer value. */\r\n setConstantInteger(globalName: string, type: Type, value: I64): void {\r\n assert(type.is(TypeFlags.INTEGER));\r\n this.elementsLookup.set(globalName,\r\n new Global(this, globalName, globalName, type, null, DecoratorFlags.NONE)\r\n .withConstantIntegerValue(value)\r\n );\r\n }\r\n\r\n /** Sets a constant float value. */\r\n setConstantFloat(globalName: string, type: Type, value: f64): void {\r\n assert(type.is(TypeFlags.FLOAT));\r\n this.elementsLookup.set(globalName,\r\n new Global(this, globalName, globalName, type, null, DecoratorFlags.NONE)\r\n .withConstantFloatValue(value)\r\n );\r\n }\r\n\r\n /** Tries to locate an import by traversing exports and queued exports. */\r\n private tryLocateImport(\r\n externalName: string,\r\n queuedNamedExports: Map\r\n ): Element | null {\r\n var element: Element | null;\r\n var fileLevelExports = this.fileLevelExports;\r\n do {\r\n if (element = fileLevelExports.get(externalName)) return element;\r\n let queuedExport = queuedNamedExports.get(externalName);\r\n if (!queuedExport) break;\r\n if (queuedExport.isReExport) {\r\n externalName = queuedExport.externalName;\r\n continue;\r\n }\r\n return this.elementsLookup.get(queuedExport.externalName);\r\n } while (true);\r\n return null;\r\n }\r\n\r\n /** Checks that only supported decorators are present. */\r\n private checkDecorators(\r\n decorators: DecoratorNode[],\r\n acceptedFlags: DecoratorFlags\r\n ): DecoratorFlags {\r\n var presentFlags = DecoratorFlags.NONE;\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n let kind = decoratorNameToKind(decorator.name);\r\n let flag = decoratorKindToFlag(kind);\r\n if (flag) {\r\n if (!(acceptedFlags & flag)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else if (presentFlags & flag) {\r\n this.error(\r\n DiagnosticCode.Duplicate_decorator,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else {\r\n presentFlags |= flag;\r\n }\r\n }\r\n }\r\n return presentFlags;\r\n }\r\n\r\n /** Checks and sets up global options of an element. */\r\n private checkGlobal(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var parentNode = declaration.parent;\r\n // alias the element globally if it is ...\r\n if (\r\n // explicitly annotated with @global - or -\r\n (element.hasDecorator(DecoratorFlags.GLOBAL)) ||\r\n // part of the special builtins library file - or -\r\n (declaration.range.source.is(CommonFlags.BUILTIN)) ||\r\n // exported from a top-level library file\r\n (\r\n declaration.range.source.isLibrary &&\r\n element.is(CommonFlags.EXPORT) &&\r\n (\r\n assert(parentNode).kind == NodeKind.SOURCE ||\r\n (\r\n parentNode).kind == NodeKind.VARIABLE &&\r\n assert((parentNode).parent).kind == NodeKind.SOURCE\r\n )\r\n )\r\n ) {\r\n let globalName = declaration.programLevelInternalName;\r\n if (this.elementsLookup.has(globalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, element.internalName\r\n );\r\n } else {\r\n this.elementsLookup.set(globalName, element);\r\n // builtins can use the global name directly instead of being just an alias\r\n if (element.is(CommonFlags.BUILTIN)) element.internalName = globalName;\r\n }\r\n }\r\n }\r\n\r\n /** Initializes a class declaration. */\r\n private initializeClass(\r\n declaration: ClassDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new ClassPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.SEALED |\r\n DecoratorFlags.UNMANAGED\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n var implementsTypes = declaration.implementsTypes;\r\n if (implementsTypes) {\r\n let numImplementsTypes = implementsTypes.length;\r\n if (prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (numImplementsTypes) {\r\n this.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_implement_interfaces,\r\n Range.join(\r\n declaration.name.range,\r\n implementsTypes[numImplementsTypes - 1].range\r\n )\r\n );\r\n }\r\n\r\n // remember classes that implement interfaces\r\n } else if (numImplementsTypes) {\r\n for (let i = 0; i < numImplementsTypes; ++i) {\r\n this.warning( // TODO\r\n DiagnosticCode.Operation_not_supported,\r\n implementsTypes[i].range\r\n );\r\n }\r\n queuedImplements.push(prototype);\r\n }\r\n }\r\n\r\n // remember classes that extend another one\r\n if (declaration.extendsType) queuedExtends.push(prototype);\r\n\r\n // add as namespace member if applicable\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // otherwise add to file-level exports if exported\r\n } else if (prototype.is(CommonFlags.EXPORT)) {\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (prototype.is(CommonFlags.EXPORT) && declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, prototype);\r\n }\r\n }\r\n\r\n // initialize members\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false); // should have been reported while parsing\r\n return;\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n /** Initializes a field of a class or interface. */\r\n private initializeField(\r\n declaration: FieldDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var decorators = declaration.decorators;\r\n var isInterface = classPrototype.kind == ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n // static fields become global variables\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n if (isInterface) {\r\n // should have been reported while parsing\r\n assert(false);\r\n }\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n let staticField = new Global(\r\n this,\r\n name,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators, DecoratorFlags.NONE)\r\n : DecoratorFlags.NONE\r\n );\r\n staticField.parent = classPrototype;\r\n classPrototype.members.set(name, staticField);\r\n this.elementsLookup.set(internalName, staticField);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n staticField.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance fields are remembered until resolved\r\n } else {\r\n if (isInterface) {\r\n // should have been reported while parsing\r\n assert(!declaration.isAny(CommonFlags.ABSTRACT | CommonFlags.GET | CommonFlags.SET));\r\n }\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instanceField = new FieldPrototype(\r\n classPrototype,\r\n name,\r\n internalName,\r\n declaration\r\n );\r\n if (decorators) this.checkDecorators(decorators, DecoratorFlags.NONE);\r\n classPrototype.instanceMembers.set(name, instanceField);\r\n }\r\n }\r\n\r\n /** Initializes a method of a class or interface. */\r\n private initializeMethod(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var prototype: FunctionPrototype | null = null;\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.checkDecorators(decorators,\r\n DecoratorFlags.OPERATOR_BINARY |\r\n DecoratorFlags.OPERATOR_PREFIX |\r\n DecoratorFlags.OPERATOR_POSTFIX |\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n // static methods become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n assert(declaration.name.kind != NodeKind.CONSTRUCTOR);\r\n\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0, declaration.name.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n classPrototype.members.set(simpleName, prototype);\r\n this.elementsLookup.set(internalName, prototype);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance methods are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n // if (classPrototype.isUnmanaged && instancePrototype.isAbstract) {\r\n // this.error( Unmanaged classes cannot declare abstract methods. );\r\n // }\r\n if (declaration.name.kind == NodeKind.CONSTRUCTOR) {\r\n if (classPrototype.constructorPrototype) {\r\n this.error(\r\n DiagnosticCode.Multiple_constructor_implementations_are_not_allowed,\r\n declaration.name.range\r\n );\r\n } else {\r\n prototype.set(CommonFlags.CONSTRUCTOR);\r\n classPrototype.constructorPrototype = prototype;\r\n }\r\n } else {\r\n classPrototype.instanceMembers.set(simpleName, prototype);\r\n }\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n this.checkOperatorOverloads(declaration.decorators, prototype, classPrototype);\r\n }\r\n\r\n private checkOperatorOverloads(\r\n decorators: DecoratorNode[] | null,\r\n prototype: FunctionPrototype,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n switch (decorator.decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY:\r\n case DecoratorKind.OPERATOR_PREFIX:\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n let numArgs = decorator.arguments && decorator.arguments.length || 0;\r\n if (numArgs == 1) {\r\n let firstArg = (decorator.arguments)[0];\r\n if (\r\n firstArg.kind == NodeKind.LITERAL &&\r\n (firstArg).literalKind == LiteralKind.STRING\r\n ) {\r\n let kind = operatorKindFromDecorator(\r\n decorator.decoratorKind,\r\n (firstArg).value\r\n );\r\n if (kind == OperatorKind.INVALID) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n firstArg.range\r\n );\r\n } else {\r\n let overloads = classPrototype.overloadPrototypes;\r\n if (overloads.has(kind)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_function_implementation,\r\n firstArg.range\r\n );\r\n } else {\r\n prototype.operatorKind = kind;\r\n overloads.set(kind, prototype);\r\n }\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n firstArg.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"1\", numArgs.toString(0)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeAccessor(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalPropertyName = declaration.fileLevelInternalName;\r\n var propertyElement = this.elementsLookup.get(internalPropertyName);\r\n var isGetter = declaration.is(CommonFlags.GET);\r\n var isNew = false;\r\n if (propertyElement) {\r\n if (\r\n propertyElement.kind != ElementKind.PROPERTY ||\r\n (isGetter\r\n ? (propertyElement).getterPrototype\r\n : (propertyElement).setterPrototype\r\n ) != null\r\n ) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n propertyElement = new Property(\r\n this,\r\n simpleName,\r\n internalPropertyName,\r\n classPrototype\r\n );\r\n isNew = true;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.checkDecorators(decorators,\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n var baseName = (isGetter ? GETTER_PREFIX : SETTER_PREFIX) + simpleName;\r\n\r\n // static accessors become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n let staticName = classPrototype.internalName + STATIC_DELIMITER + baseName;\r\n if (this.elementsLookup.has(staticName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n let staticPrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n staticName,\r\n declaration,\r\n null,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = staticPrototype;\r\n } else {\r\n (propertyElement).setterPrototype = staticPrototype;\r\n }\r\n if (isNew) {\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n classPrototype.members.set(simpleName, propertyElement); // check above\r\n } else {\r\n assert(classPrototype.members && classPrototype.members.has(simpleName));\r\n }\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance accessors are remembered until resolved\r\n } else {\r\n let instanceName = classPrototype.internalName + INSTANCE_DELIMITER + baseName;\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(baseName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instancePrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n instanceName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = instancePrototype;\r\n } else {\r\n (propertyElement).setterPrototype = instancePrototype;\r\n }\r\n classPrototype.instanceMembers.set(baseName, propertyElement);\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n instancePrototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n }\r\n\r\n private initializeEnum(\r\n declaration: EnumDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var element = new Enum(this, simpleName, internalName, declaration);\r\n element.parent = namespace;\r\n this.elementsLookup.set(internalName, element);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, element);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && element.is(CommonFlags.EXPORT)) {\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (element.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, element);\r\n this.currentFilespace.members.set(simpleName, element);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, element);\r\n }\r\n }\r\n\r\n var values = declaration.values;\r\n for (let i = 0, k = values.length; i < k; ++i) {\r\n this.initializeEnumValue(values[i], element);\r\n }\r\n\r\n this.checkGlobal(element, declaration);\r\n }\r\n\r\n private initializeEnumValue(\r\n declaration: EnumValueDeclaration,\r\n enm: Enum\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n if (enm.members) {\r\n if (enm.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n enm.members = new Map();\r\n }\r\n var value = new EnumValue(enm, this, name, internalName, declaration);\r\n enm.members.set(name, value);\r\n if (enm.is(CommonFlags.MODULE_EXPORT)) {\r\n value.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n private initializeExports(\r\n statement: ExportStatement,\r\n queuedExports: Map\r\n ): void {\r\n var members = statement.members;\r\n if (members) { // named\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n this.initializeExport(members[i], statement.internalPath, queuedExports);\r\n }\r\n } else { // TODO: filespace\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n }\r\n }\r\n\r\n private setExportAndCheckLibrary(\r\n internalName: string,\r\n element: Element,\r\n identifier: IdentifierExpression\r\n ): void {\r\n // add to file-level exports\r\n this.fileLevelExports.set(internalName, element);\r\n\r\n // add to filespace\r\n var internalPath = identifier.range.source.internalPath;\r\n var prefix = FILESPACE_PREFIX + internalPath;\r\n var filespace = this.elementsLookup.get(prefix);\r\n if (!filespace) filespace = assert(this.elementsLookup.get(prefix + PATH_DELIMITER + \"index\"));\r\n assert(filespace.kind == ElementKind.FILESPACE);\r\n var simpleName = identifier.text;\r\n (filespace).members.set(simpleName, element);\r\n\r\n // add global alias if from a library file\r\n if (identifier.range.source.isLibrary) {\r\n if (this.elementsLookup.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n identifier.range, simpleName\r\n );\r\n } else {\r\n element.internalName = simpleName;\r\n this.elementsLookup.set(simpleName, element);\r\n }\r\n }\r\n }\r\n\r\n private initializeExport(\r\n member: ExportMember,\r\n internalPath: string | null,\r\n queuedExports: Map\r\n ): void {\r\n var externalName = member.range.source.internalPath + PATH_DELIMITER + member.externalName.text;\r\n if (this.fileLevelExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n var referencedName: string;\r\n var referencedElement: Element | null;\r\n var queuedExport: QueuedExport | null;\r\n\r\n // export local element\r\n if (internalPath == null) {\r\n referencedName = member.range.source.internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the element exists\r\n if (referencedElement = this.elementsLookup.get(referencedName)) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = false;\r\n queuedExport.externalName = referencedName; // -> here: local name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n\r\n // export external element\r\n } else {\r\n referencedName = internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the export exists\r\n referencedElement = this.elementsLookup.get(referencedName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // walk already known queued exports\r\n let seen = new Set();\r\n while (queuedExport = queuedExports.get(referencedName)) {\r\n if (queuedExport.isReExport) {\r\n referencedElement = this.fileLevelExports.get(queuedExport.externalName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n referencedName = queuedExport.externalName;\r\n if (seen.has(queuedExport)) break;\r\n seen.add(queuedExport);\r\n } else {\r\n referencedElement = this.elementsLookup.get(queuedExport.externalName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = true;\r\n queuedExport.externalName = referencedName; // -> here: external name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n }\r\n }\r\n\r\n private initializeFunction(\r\n declaration: FunctionDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var decorators = declaration.decorators;\r\n var prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n null,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE |\r\n DecoratorFlags.EXTERNAL\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.parent = namespace;\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, prototype);\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n private initializeImports(\r\n statement: ImportStatement,\r\n queuedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var declarations = statement.declarations;\r\n if (declarations) {\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n this.initializeImport(\r\n declarations[i],\r\n statement.internalPath,\r\n queuedExports, queuedImports\r\n );\r\n }\r\n } else if (statement.namespaceName) { // import * as simpleName from \"file\"\r\n let simpleName = statement.namespaceName.text;\r\n let internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n simpleName\r\n );\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n statement.namespaceName.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n\r\n // resolve right away if the exact filespace exists\r\n let filespace = this.elementsLookup.get(statement.internalPath);\r\n if (filespace) {\r\n this.elementsLookup.set(internalName, filespace);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n let queuedImport = new QueuedImport();\r\n queuedImport.localName = internalName;\r\n let externalName = FILESPACE_PREFIX + statement.internalPath;\r\n queuedImport.externalName = externalName;\r\n queuedImport.externalNameAlt = externalName + PATH_DELIMITER + \"index\";\r\n queuedImport.declaration = null; // filespace\r\n queuedImports.push(queuedImport);\r\n }\r\n }\r\n\r\n private initializeImport(\r\n declaration: ImportDeclaration,\r\n internalPath: string,\r\n queuedNamedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var localName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(localName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, localName\r\n );\r\n return;\r\n }\r\n\r\n var externalName = internalPath + PATH_DELIMITER + declaration.externalName.text;\r\n\r\n // resolve right away if the exact export exists\r\n var element: Element | null;\r\n if (element = this.fileLevelExports.get(externalName)) {\r\n this.elementsLookup.set(localName, element);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n const indexPart = PATH_DELIMITER + \"index\";\r\n var queuedImport = new QueuedImport();\r\n queuedImport.localName = localName;\r\n if (internalPath.endsWith(indexPart)) {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath.substring(0, internalPath.length - indexPart.length + 1) +\r\n declaration.externalName.text\r\n );\r\n } else {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath +\r\n indexPart +\r\n PATH_DELIMITER +\r\n declaration.externalName.text\r\n );\r\n }\r\n queuedImport.declaration = declaration; // named\r\n queuedImports.push(queuedImport);\r\n }\r\n\r\n private initializeInterface(declaration: InterfaceDeclaration, namespace: Element | null = null): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new InterfacePrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators, DecoratorFlags.GLOBAL)\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(prototype.internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(prototype.internalName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, prototype);\r\n }\r\n }\r\n\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"interface member expected\");\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n private initializeNamespace(\r\n declaration: NamespaceDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n parentNamespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n var simpleName = declaration.name.text;\r\n var namespace = this.elementsLookup.get(internalName);\r\n if (!namespace) {\r\n namespace = new Namespace(this, simpleName, internalName, declaration);\r\n namespace.parent = parentNamespace;\r\n this.elementsLookup.set(internalName, namespace);\r\n this.checkGlobal(namespace, declaration);\r\n }\r\n\r\n if (parentNamespace) {\r\n if (parentNamespace.members) {\r\n if (parentNamespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n parentNamespace.members = new Map();\r\n }\r\n parentNamespace.members.set(simpleName, namespace);\r\n if (parentNamespace.is(CommonFlags.MODULE_EXPORT) && namespace.is(CommonFlags.EXPORT)) {\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (namespace.is(CommonFlags.EXPORT)) { // no parent namespace\r\n let existingExport = this.fileLevelExports.get(internalName);\r\n if (existingExport) {\r\n if (!existingExport.is(CommonFlags.EXPORT)) {\r\n this.error(\r\n DiagnosticCode.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local,\r\n declaration.name.range, namespace.internalName\r\n ); // recoverable\r\n }\r\n namespace = existingExport; // join\r\n } else {\r\n this.fileLevelExports.set(internalName, namespace);\r\n }\r\n this.currentFilespace.members.set(simpleName, namespace);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n if (this.moduleLevelExports.get(simpleName) !== namespace) { // not merged\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n this.moduleLevelExports.set(simpleName, namespace);\r\n }\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n var members = declaration.members;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n switch (members[i].kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(members[i], queuedExtends, queuedImplements, namespace);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(members[i], queuedExtends, queuedImplements, namespace);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // this.initializeTypeAlias(members[i], namespace);\r\n // TODO: what about namespaced types?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n members[i].range\r\n );\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(members[i], namespace);\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"namespace member expected\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeTypeAlias(declaration: TypeDeclaration, namespace: Element | null = null): void {\r\n // type aliases are program globals\r\n // TODO: what about namespaced types?\r\n var name = declaration.name.text;\r\n if (this.typesLookup.has(name) || this.typeAliases.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return;\r\n }\r\n var alias = new TypeAlias();\r\n alias.typeParameters = declaration.typeParameters;\r\n alias.type = declaration.type;\r\n this.typeAliases.set(name, alias);\r\n }\r\n\r\n private initializeVariables(statement: VariableStatement, namespace: Element | null = null): void {\r\n var declarations = statement.declarations;\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n let declaration = declarations[i];\r\n let decorators = declaration.decorators;\r\n let internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n let simpleName = declaration.name.text;\r\n let global = new Global(\r\n this,\r\n simpleName,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.EXTERNAL\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n global.parent = namespace;\r\n this.elementsLookup.set(internalName, global);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, global);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && global.is(CommonFlags.EXPORT)) {\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (global.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n } else {\r\n this.fileLevelExports.set(internalName, global);\r\n }\r\n this.currentFilespace.members.set(simpleName, global);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, (this.moduleLevelExports.get(simpleName)).internalName\r\n );\r\n continue;\r\n }\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, global);\r\n }\r\n }\r\n this.checkGlobal(global, declaration);\r\n }\r\n }\r\n}\r\n\r\n/** Indicates the specific kind of an {@link Element}. */\r\nexport enum ElementKind {\r\n /** A {@link Global}. */\r\n GLOBAL,\r\n /** A {@link Local}. */\r\n LOCAL,\r\n /** An {@link Enum}. */\r\n ENUM,\r\n /** An {@link EnumValue}. */\r\n ENUMVALUE,\r\n /** A {@link FunctionPrototype}. */\r\n FUNCTION_PROTOTYPE,\r\n /** A {@link Function}. */\r\n FUNCTION,\r\n /** A {@link FunctionTarget}. */\r\n FUNCTION_TARGET,\r\n /** A {@link ClassPrototype}. */\r\n CLASS_PROTOTYPE,\r\n /** A {@link Class}. */\r\n CLASS,\r\n /** An {@link InterfacePrototype}. */\r\n INTERFACE_PROTOTYPE,\r\n /** An {@link Interface}. */\r\n INTERFACE,\r\n /** A {@link FieldPrototype}. */\r\n FIELD_PROTOTYPE,\r\n /** A {@link Field}. */\r\n FIELD,\r\n /** A {@link Property}. */\r\n PROPERTY,\r\n /** A {@link Namespace}. */\r\n NAMESPACE,\r\n /** A {@link Filespace}. */\r\n FILESPACE,\r\n}\r\n\r\nexport enum DecoratorFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n /** Is a program global. */\r\n GLOBAL = 1 << 0,\r\n /** Is a binary operator overload. */\r\n OPERATOR_BINARY = 1 << 1,\r\n /** Is a unary prefix operator overload. */\r\n OPERATOR_PREFIX = 1 << 2,\r\n /** Is a unary postfix operator overload. */\r\n OPERATOR_POSTFIX = 1 << 3,\r\n /** Is an unmanaged class. */\r\n UNMANAGED = 1 << 4,\r\n /** Is a sealed class. */\r\n SEALED = 1 << 5,\r\n /** Is always inlined. */\r\n INLINE = 1 << 6,\r\n /** Is using a different external name. */\r\n EXTERNAL = 1 << 7\r\n}\r\n\r\nexport function decoratorKindToFlag(kind: DecoratorKind): DecoratorFlags {\r\n switch (kind) {\r\n case DecoratorKind.GLOBAL: return DecoratorFlags.GLOBAL;\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY: return DecoratorFlags.OPERATOR_BINARY;\r\n case DecoratorKind.OPERATOR_PREFIX: return DecoratorFlags.OPERATOR_PREFIX;\r\n case DecoratorKind.OPERATOR_POSTFIX: return DecoratorFlags.OPERATOR_POSTFIX;\r\n case DecoratorKind.UNMANAGED: return DecoratorFlags.UNMANAGED;\r\n case DecoratorKind.SEALED: return DecoratorFlags.SEALED;\r\n case DecoratorKind.INLINE: return DecoratorFlags.INLINE;\r\n case DecoratorKind.EXTERNAL: return DecoratorFlags.EXTERNAL;\r\n default: return DecoratorFlags.NONE;\r\n }\r\n}\r\n\r\n/** Base class of all program elements. */\r\nexport abstract class Element {\r\n\r\n /** Specific element kind. */\r\n kind: ElementKind;\r\n /** Containing {@link Program}. */\r\n program: Program;\r\n /** Simple name. */\r\n simpleName: string;\r\n /** Internal name referring to this element. */\r\n internalName: string;\r\n /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n /** Decorator flags indicating annotated traits. */\r\n decoratorFlags: DecoratorFlags = DecoratorFlags.NONE;\r\n /** Namespaced member elements. */\r\n members: Map | null = null;\r\n /** Parent element, if applicable. */\r\n parent: Element | null = null;\r\n\r\n /** Constructs a new element, linking it to its containing {@link Program}. */\r\n protected constructor(program: Program, simpleName: string, internalName: string) {\r\n this.program = program;\r\n this.simpleName = simpleName;\r\n this.internalName = internalName;\r\n }\r\n\r\n /** Tests if this element has a specific flag or flags. */\r\n is(flag: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this element has any of the specified flags. */\r\n isAny(flags: CommonFlags): bool { return (this.flags & flags) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n /** Tests if this element has a specific decorator flag or flags. */\r\n hasDecorator(flag: DecoratorFlags): bool { return (this.decoratorFlags & flag) == flag; }\r\n}\r\n\r\n/** A filespace representing the implicit top-level namespace of a source. */\r\nexport class Filespace extends Element {\r\n\r\n kind = ElementKind.FILESPACE;\r\n\r\n /** File members (externally visible only). */\r\n members: Map; // more specific\r\n\r\n /** Constructs a new filespace. */\r\n constructor(\r\n program: Program,\r\n source: Source\r\n ) {\r\n super(program, source.internalPath, FILESPACE_PREFIX + source.internalPath);\r\n this.members = new Map();\r\n }\r\n}\r\n\r\n/** A namespace that differs from a filespace in being user-declared with a name. */\r\nexport class Namespace extends Element {\r\n\r\n // All elements have namespace semantics. This is an explicitly declared one.\r\n kind = ElementKind.NAMESPACE;\r\n\r\n /** Declaration reference. */\r\n declaration: NamespaceDeclaration; // more specific\r\n\r\n /** Constructs a new namespace. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: NamespaceDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** An enum. */\r\nexport class Enum extends Element {\r\n\r\n kind = ElementKind.ENUM;\r\n\r\n /** Declaration reference. */\r\n declaration: EnumDeclaration;\r\n\r\n /** Constructs a new enum. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: EnumDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** An enum value. */\r\nexport class EnumValue extends Element {\r\n\r\n kind = ElementKind.ENUMVALUE;\r\n\r\n /** Declaration reference. */\r\n declaration: EnumValueDeclaration;\r\n /** Constant value, if applicable. */\r\n constantValue: i32 = 0;\r\n\r\n constructor(\r\n enm: Enum,\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: EnumValueDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = enm;\r\n this.declaration = declaration;\r\n }\r\n}\r\n\r\nexport const enum ConstantValueKind {\r\n NONE,\r\n INTEGER,\r\n FLOAT\r\n}\r\n\r\nexport class VariableLikeElement extends Element {\r\n\r\n // kind varies\r\n\r\n /** Declaration reference. */\r\n declaration: VariableLikeDeclarationStatement | null;\r\n /** Variable type. Is {@link Type.void} for type-inferred {@link Global}s before compilation. */\r\n type: Type;\r\n /** Constant value kind. */\r\n constantValueKind: ConstantValueKind = ConstantValueKind.NONE;\r\n /** Constant integer value, if applicable. */\r\n constantIntegerValue: I64;\r\n /** Constant float value, if applicable. */\r\n constantFloatValue: f64;\r\n\r\n protected constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.type = type;\r\n this.declaration = declaration;\r\n }\r\n\r\n withConstantIntegerValue(value: I64): this {\r\n this.constantValueKind = ConstantValueKind.INTEGER;\r\n this.constantIntegerValue = value;\r\n this.set(CommonFlags.CONST | CommonFlags.INLINED);\r\n return this;\r\n }\r\n\r\n withConstantFloatValue(value: f64): this {\r\n this.constantValueKind = ConstantValueKind.FLOAT;\r\n this.constantFloatValue = value;\r\n this.set(CommonFlags.CONST | CommonFlags.INLINED);\r\n return this;\r\n }\r\n}\r\n\r\n/** A global variable. */\r\nexport class Global extends VariableLikeElement {\r\n\r\n kind = ElementKind.GLOBAL;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, type, declaration);\r\n this.flags = declaration ? declaration.flags : CommonFlags.NONE;\r\n this.decoratorFlags = decoratorFlags;\r\n this.type = type; // resolved later if `void`\r\n }\r\n}\r\n\r\n/** A function parameter. */\r\nexport class Parameter {\r\n\r\n // not an Element on its own\r\n\r\n /** Parameter name. */\r\n name: string;\r\n /** Parameter type. */\r\n type: Type;\r\n /** Parameter initializer. */\r\n initializer: Expression | null;\r\n\r\n /** Constructs a new function parameter. */\r\n constructor(name: string, type: Type, initializer: Expression | null = null) {\r\n this.name = name;\r\n this.type = type;\r\n this.initializer = initializer;\r\n }\r\n}\r\n\r\n/** A function local. */\r\nexport class Local extends VariableLikeElement {\r\n\r\n kind = ElementKind.LOCAL;\r\n\r\n /** Local index. */\r\n index: i32;\r\n /** Respective scoped global, if any. */\r\n scopedGlobal: Global | null = null;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n index: i32,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null = null\r\n ) {\r\n super(program, simpleName, simpleName, type, declaration);\r\n this.index = index;\r\n }\r\n}\r\n\r\n/** A yet unresolved function prototype. */\r\nexport class FunctionPrototype extends Element {\r\n\r\n kind = ElementKind.FUNCTION_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FunctionDeclaration;\r\n /** If an instance method, the class prototype reference. */\r\n classPrototype: ClassPrototype | null;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Class type arguments, if a partially resolved method of a generic class. Not set otherwise. */\r\n classTypeArguments: Type[] | null = null;\r\n /** Operator kind, if an overload. */\r\n operatorKind: OperatorKind = OperatorKind.INVALID;\r\n\r\n /** Constructs a new function prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FunctionDeclaration,\r\n classPrototype: ClassPrototype | null = null,\r\n decoratorFlags: DecoratorFlags = DecoratorFlags.NONE\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.classPrototype = classPrototype;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n toString(): string { return this.simpleName; }\r\n}\r\n\r\n/** A resolved function. */\r\nexport class Function extends Element {\r\n\r\n kind = ElementKind.FUNCTION;\r\n\r\n /** Prototype reference. */\r\n prototype: FunctionPrototype;\r\n /** Function signature. */\r\n signature: Signature;\r\n /** Map of locals by name. */\r\n localsByName: Map = new Map();\r\n /** Array of locals by index. */\r\n localsByIndex: Local[] = [];\r\n /** List of additional non-parameter locals. */\r\n additionalLocals: Type[] = [];\r\n /** Current break context label. */\r\n breakContext: string | null = null;\r\n /** Contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Current control flow. */\r\n flow: Flow;\r\n /** Remembered debug locations. */\r\n debugLocations: Range[] = [];\r\n /** Function reference, if compiled. */\r\n ref: FunctionRef = 0;\r\n /** Function table index, if any. */\r\n functionTableIndex: i32 = -1;\r\n /** Trampoline function for calling with omitted arguments. */\r\n trampoline: Function | null = null;\r\n /** The outer scope, if a function expression. */\r\n outerScope: Flow | null = null;\r\n\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\r\n nextInlineId: i32 = 0;\r\n\r\n /** Constructs a new concrete function. */\r\n constructor(\r\n prototype: FunctionPrototype,\r\n internalName: string,\r\n signature: Signature,\r\n parent: Element | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.signature = signature;\r\n this.parent = parent;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.contextualTypeArguments = contextualTypeArguments;\r\n if (!(prototype.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN) || prototype.is(CommonFlags.DECLARE))) {\r\n let localIndex = 0;\r\n if (parent && parent.kind == ElementKind.CLASS) {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let local = new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n );\r\n this.localsByName.set(\"this\", local);\r\n this.localsByIndex[local.index] = local;\r\n let inheritedTypeArguments = (parent).contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments.has(inheritedName)) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n }\r\n } else {\r\n assert(!this.is(CommonFlags.INSTANCE)); // internal error\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n let parameterType = parameterTypes[i];\r\n let parameterName = signature.getParameterName(i);\r\n let local = new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n // FIXME: declaration?\r\n );\r\n this.localsByName.set(parameterName, local);\r\n this.localsByIndex[local.index] = local;\r\n }\r\n }\r\n this.flow = Flow.create(this);\r\n }\r\n\r\n /** Adds a local of the specified type, with an optional name. */\r\n addLocal(type: Type, name: string | null = null, declaration: VariableDeclaration | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = this.signature.parameterTypes.length + this.additionalLocals.length;\r\n if (this.is(CommonFlags.INSTANCE)) ++localIndex;\r\n var local = new Local(\r\n this.prototype.program,\r\n name\r\n ? name\r\n : \"var$\" + localIndex.toString(10),\r\n localIndex,\r\n type,\r\n declaration\r\n );\r\n if (name) {\r\n if (this.localsByName.has(name)) throw new Error(\"duplicate local name\");\r\n this.localsByName.set(name, local);\r\n }\r\n this.localsByIndex[local.index] = local;\r\n this.additionalLocals.push(type);\r\n return local;\r\n }\r\n\r\n private tempI32s: Local[] | null = null;\r\n private tempI64s: Local[] | null = null;\r\n private tempF32s: Local[] | null = null;\r\n private tempF64s: Local[] | null = null;\r\n\r\n /** Gets a free temporary local of the specified type. */\r\n getTempLocal(type: Type, wrapped: bool = false): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s;\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps && temps.length) {\r\n local = temps.pop();\r\n local.type = type;\r\n local.flags = CommonFlags.NONE;\r\n } else {\r\n local = this.addLocal(type);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n if (local.is(CommonFlags.INLINED)) return;\r\n assert(local.index >= 0);\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n assert(local.index >= 0);\r\n temps.push(local);\r\n }\r\n\r\n /** Gets and immediately frees a temporary local of the specified type. */\r\n getAndFreeTempLocal(type: Type, wrapped: bool): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps.length) {\r\n local = temps[temps.length - 1];\r\n local.type = type;\r\n } else {\r\n local = this.addLocal(type);\r\n temps.push(local);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Enters a(nother) break context. */\r\n enterBreakContext(): string {\r\n var id = this.nextBreakId++;\r\n if (!this.breakStack) this.breakStack = [ id ];\r\n else this.breakStack.push(id);\r\n return this.breakContext = id.toString(10);\r\n }\r\n\r\n /** Leaves the current break context. */\r\n leaveBreakContext(): void {\r\n assert(this.breakStack != null);\r\n var length = (this.breakStack).length;\r\n assert(length > 0);\r\n (this.breakStack).pop();\r\n if (length > 1) {\r\n this.breakContext = (this.breakStack)[length - 2].toString(10);\r\n } else {\r\n this.breakContext = null;\r\n this.breakStack = null;\r\n }\r\n }\r\n\r\n /** Finalizes the function once compiled, releasing no longer needed resources. */\r\n finalize(module: Module, ref: FunctionRef): void {\r\n this.ref = ref;\r\n assert(!this.breakStack || !this.breakStack.length); // internal error\r\n this.breakStack = null;\r\n this.breakContext = null;\r\n this.tempI32s = this.tempI64s = this.tempF32s = this.tempF64s = null;\r\n if (this.program.options.sourceMap) {\r\n let debugLocations = this.debugLocations;\r\n for (let i = 0, k = debugLocations.length; i < k; ++i) {\r\n let debugLocation = debugLocations[i];\r\n module.setDebugLocation(\r\n ref,\r\n debugLocation.debugInfoRef,\r\n debugLocation.source.debugInfoIndex,\r\n debugLocation.line,\r\n debugLocation.column\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n}\r\n\r\n/** A resolved function target, that is a function called indirectly by an index and signature. */\r\nexport class FunctionTarget extends Element {\r\n\r\n kind = ElementKind.FUNCTION_TARGET;\r\n\r\n /** Underlying signature. */\r\n signature: Signature;\r\n /** Function type. */\r\n type: Type;\r\n\r\n /** Constructs a new function target. */\r\n constructor(program: Program, signature: Signature) {\r\n super(program, \"\", \"\");\r\n var simpleName = signature.toSignatureString();\r\n this.simpleName = simpleName;\r\n this.internalName = simpleName;\r\n this.signature = signature;\r\n this.type = Type.u32.asFunction(signature);\r\n }\r\n}\r\n\r\n/** A yet unresolved instance field prototype. */\r\nexport class FieldPrototype extends Element {\r\n\r\n kind = ElementKind.FIELD_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FieldDeclaration;\r\n /** Parent class prototype. */\r\n classPrototype: ClassPrototype;\r\n\r\n /** Constructs a new field prototype. */\r\n constructor(\r\n classPrototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FieldDeclaration\r\n ) {\r\n super(classPrototype.program, simpleName, internalName);\r\n this.classPrototype = classPrototype;\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** A resolved instance field. */\r\nexport class Field extends VariableLikeElement {\r\n\r\n kind = ElementKind.FIELD;\r\n\r\n /** Field prototype reference. */\r\n prototype: FieldPrototype;\r\n /** Field memory offset, if an instance field. */\r\n memoryOffset: i32 = -1;\r\n\r\n /** Constructs a new field. */\r\n constructor(\r\n prototype: FieldPrototype,\r\n internalName: string,\r\n type: Type,\r\n declaration: FieldDeclaration,\r\n parent: Class\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName, type, declaration);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.type = type;\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A property comprised of a getter and a setter function. */\r\nexport class Property extends Element {\r\n\r\n kind = ElementKind.PROPERTY;\r\n\r\n /** Parent class prototype. */\r\n parent: ClassPrototype;\r\n /** Getter prototype. */\r\n getterPrototype: FunctionPrototype | null = null;\r\n /** Setter prototype. */\r\n setterPrototype: FunctionPrototype | null = null;\r\n\r\n /** Constructs a new property prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n parent: ClassPrototype\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A yet unresolved class prototype. */\r\nexport class ClassPrototype extends Element {\r\n\r\n kind = ElementKind.CLASS_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: ClassDeclaration;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Instance member prototypes. */\r\n instanceMembers: Map | null = null;\r\n /** Base class prototype, if applicable. */\r\n basePrototype: ClassPrototype | null = null; // set in Program#initialize\r\n /** Constructor prototype. */\r\n constructorPrototype: FunctionPrototype | null = null;\r\n /** Operator overload prototypes. */\r\n overloadPrototypes: Map = new Map();\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A resolved class. */\r\nexport class Class extends Element {\r\n\r\n kind = ElementKind.CLASS;\r\n\r\n /** Prototype reference. */\r\n prototype: ClassPrototype;\r\n /** Resolved type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Resolved class type. */\r\n type: Type;\r\n /** Base class, if applicable. */\r\n base: Class | null;\r\n /** Contextual type arguments for fields and methods. */\r\n contextualTypeArguments: Map | null = null;\r\n /** Current member memory offset. */\r\n currentMemoryOffset: u32 = 0;\r\n /** Constructor instance. */\r\n constructorInstance: Function | null = null;\r\n /** Operator overloads. */\r\n overloads: Map | null = null;\r\n\r\n /** Constructs a new class. */\r\n constructor(\r\n prototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] | null = null,\r\n base: Class | null = null\r\n ) {\r\n super(prototype.program, simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.typeArguments = typeArguments;\r\n this.type = prototype.program.options.usizeType.asClass(this);\r\n this.base = base;\r\n\r\n // inherit static members and contextual type arguments from base class\r\n if (base) {\r\n let inheritedTypeArguments = base.contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [baseName, baseType] of inheritedTypeArguments) {\r\n this.contextualTypeArguments.set(baseName, baseType);\r\n }\r\n }\r\n }\r\n\r\n // apply instance-specific contextual type arguments\r\n var declaration = this.prototype.declaration;\r\n var i: i32, k: i32;\r\n if (declaration) { // irrelevant for built-ins\r\n let typeParameters = declaration.typeParameters;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n if (k) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (i = 0; i < k; ++i) {\r\n this.contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n }\r\n } else if (typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n }\r\n }\r\n\r\n /** Tests if a value of this class type is assignable to a target of the specified class type. */\r\n isAssignableTo(target: Class): bool {\r\n var current: Class | null = this;\r\n do if (current == target) return true;\r\n while (current = current.base);\r\n return false;\r\n }\r\n\r\n /** Looks up the operator overload of the specified kind. */\r\n lookupOverload(kind: OperatorKind, unchecked: bool = false): Function | null {\r\n if (unchecked) {\r\n switch (kind) {\r\n case OperatorKind.INDEXED_GET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_GET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n case OperatorKind.INDEXED_SET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_SET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n var instance: Class | null = this;\r\n do {\r\n let overloads = instance.overloads;\r\n if (overloads) {\r\n let overload = overloads.get(kind);\r\n if (overload) return overload;\r\n }\r\n } while (instance = instance.base);\r\n return null;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A yet unresolved interface. */\r\nexport class InterfacePrototype extends ClassPrototype {\r\n\r\n kind = ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: InterfaceDeclaration; // more specific\r\n\r\n /** Constructs a new interface prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: InterfaceDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, declaration, decoratorFlags);\r\n }\r\n}\r\n\r\n/** A resolved interface. */\r\nexport class Interface extends Class {\r\n\r\n kind = ElementKind.INTERFACE;\r\n\r\n /** Prototype reference. */\r\n prototype: InterfacePrototype; // more specific\r\n /** Base interface, if applcable. */\r\n base: Interface | null; // more specific\r\n\r\n /** Constructs a new interface. */\r\n constructor(\r\n prototype: InterfacePrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, simpleName, internalName, typeArguments, base);\r\n }\r\n}\r\n\r\n/** Control flow flags indicating specific conditions. */\r\nexport const enum FlowFlags {\r\n /** No specific conditions. */\r\n NONE = 0,\r\n\r\n // categorical\r\n\r\n /** This branch always returns. */\r\n RETURNS = 1 << 0,\r\n /** This branch always returns a wrapped value. */\r\n RETURNS_WRAPPED = 1 << 1,\r\n /** This branch always throws. */\r\n THROWS = 1 << 2,\r\n /** This branch always breaks. */\r\n BREAKS = 1 << 3,\r\n /** This branch always continues. */\r\n CONTINUES = 1 << 4,\r\n /** This branch always allocates. Constructors only. */\r\n ALLOCATES = 1 << 5,\r\n\r\n // conditional\r\n\r\n /** This branch conditionally returns in a child branch. */\r\n CONDITIONALLY_RETURNS = 1 << 6,\r\n /** This branch conditionally throws in a child branch. */\r\n CONDITIONALLY_THROWS = 1 << 7,\r\n /** This branch conditionally breaks in a child branch. */\r\n CONDITIONALLY_BREAKS = 1 << 8,\r\n /** This branch conditionally continues in a child branch. */\r\n CONDITIONALLY_CONTINUES = 1 << 9,\r\n /** This branch conditionally allocates in a child branch. Constructors only. */\r\n CONDITIONALLY_ALLOCATES = 1 << 10,\r\n\r\n // special\r\n\r\n /** This branch is part of inlining a function. */\r\n INLINE_CONTEXT = 1 << 11,\r\n /** This branch explicitly requests no bounds checking. */\r\n UNCHECKED_CONTEXT = 1 << 12,\r\n\r\n // masks\r\n\r\n /** Any terminating flag. */\r\n ANY_TERMINATING = FlowFlags.RETURNS\r\n | FlowFlags.THROWS\r\n | FlowFlags.BREAKS\r\n | FlowFlags.CONTINUES,\r\n\r\n /** Any categorical flag. */\r\n ANY_CATEGORICAL = FlowFlags.RETURNS\r\n | FlowFlags.RETURNS_WRAPPED\r\n | FlowFlags.THROWS\r\n | FlowFlags.BREAKS\r\n | FlowFlags.CONTINUES\r\n | FlowFlags.ALLOCATES,\r\n\r\n /** Any conditional flag. */\r\n ANY_CONDITIONAL = FlowFlags.CONDITIONALLY_RETURNS\r\n | FlowFlags.CONDITIONALLY_THROWS\r\n | FlowFlags.CONDITIONALLY_BREAKS\r\n | FlowFlags.CONDITIONALLY_CONTINUES\r\n | FlowFlags.CONDITIONALLY_ALLOCATES\r\n}\r\n\r\n/** A control flow evaluator. */\r\nexport class Flow {\r\n\r\n /** Parent flow. */\r\n parent: Flow | null;\r\n /** Flow flags indicating specific conditions. */\r\n flags: FlowFlags;\r\n /** Function this flow belongs to. */\r\n currentFunction: Function;\r\n /** The label we break to when encountering a continue statement. */\r\n continueLabel: string | null;\r\n /** The label we break to when encountering a break statement. */\r\n breakLabel: string | null;\r\n /** The label we break to when encountering a return statement, when inlining. */\r\n returnLabel: string | null;\r\n /** The current return type. */\r\n returnType: Type;\r\n /** The current contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Scoped local variables. */\r\n scopedLocals: Map | null = null;\r\n /** Local variable wrap states for the first 64 locals. */\r\n wrappedLocals: I64;\r\n /** Local variable wrap states for locals with index >= 64. */\r\n wrappedLocalsExt: I64[] | null;\r\n\r\n /** Creates the parent flow of the specified function. */\r\n static create(currentFunction: Function): Flow {\r\n var parentFlow = new Flow();\r\n parentFlow.parent = null;\r\n parentFlow.flags = FlowFlags.NONE;\r\n parentFlow.currentFunction = currentFunction;\r\n parentFlow.continueLabel = null;\r\n parentFlow.breakLabel = null;\r\n parentFlow.returnLabel = null;\r\n parentFlow.returnType = currentFunction.signature.returnType;\r\n parentFlow.contextualTypeArguments = currentFunction.contextualTypeArguments;\r\n parentFlow.wrappedLocals = i64_new(0);\r\n parentFlow.wrappedLocalsExt = null;\r\n return parentFlow;\r\n }\r\n\r\n private constructor() { }\r\n\r\n /** Tests if this flow has the specified flag or flags. */\r\n is(flag: FlowFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this flow has one of the specified flags. */\r\n isAny(flag: FlowFlags): bool { return (this.flags & flag) != 0; }\r\n /** Sets the specified flag or flags. */\r\n set(flag: FlowFlags): void { this.flags |= flag; }\r\n /** Unsets the specified flag or flags. */\r\n unset(flag: FlowFlags): void { this.flags &= ~flag; }\r\n\r\n /** Forks this flow to a child flow. */\r\n fork(): Flow {\r\n var branch = new Flow();\r\n branch.parent = this;\r\n branch.flags = this.flags;\r\n branch.currentFunction = this.currentFunction;\r\n branch.continueLabel = this.continueLabel;\r\n branch.breakLabel = this.breakLabel;\r\n branch.returnLabel = this.returnLabel;\r\n branch.returnType = this.returnType;\r\n branch.contextualTypeArguments = this.contextualTypeArguments;\r\n branch.wrappedLocals = this.wrappedLocals;\r\n branch.wrappedLocalsExt = this.wrappedLocalsExt ? this.wrappedLocalsExt.slice() : null;\r\n return branch;\r\n }\r\n\r\n /** Frees this flow's scoped variables. */\r\n free(): Flow {\r\n var parent = assert(this.parent);\r\n if (this.scopedLocals) { // free block-scoped locals\r\n for (let scopedLocal of this.scopedLocals.values()) {\r\n if (scopedLocal.is(CommonFlags.SCOPED)) { // otherwise an alias\r\n this.currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n }\r\n this.scopedLocals = null;\r\n }\r\n return parent;\r\n }\r\n\r\n /** Adds a new scoped local of the specified name. */\r\n addScopedLocal(type: Type, name: string, wrapped: bool, declaration?: VariableDeclaration): Local {\r\n var scopedLocal = this.currentFunction.getTempLocal(type, false);\r\n if (!this.scopedLocals) this.scopedLocals = new Map();\r\n else {\r\n let existingLocal = this.scopedLocals.get(name);\r\n if (existingLocal) {\r\n if (declaration) {\r\n this.currentFunction.program.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range\r\n );\r\n } else assert(false);\r\n return existingLocal;\r\n }\r\n }\r\n scopedLocal.set(CommonFlags.SCOPED);\r\n this.scopedLocals.set(name, scopedLocal);\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.setLocalWrapped(scopedLocal.index, wrapped);\r\n }\r\n return scopedLocal;\r\n }\r\n\r\n /** Adds a new scoped alias for the specified local. */\r\n addScopedLocalAlias(index: i32, type: Type, name: string): Local {\r\n if (!this.scopedLocals) this.scopedLocals = new Map();\r\n else {\r\n let existingLocal = this.scopedLocals.get(name);\r\n if (existingLocal) {\r\n let declaration = existingLocal.declaration;\r\n if (declaration) {\r\n this.currentFunction.program.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range\r\n );\r\n } else assert(false);\r\n return existingLocal;\r\n }\r\n }\r\n assert(index < this.currentFunction.localsByIndex.length);\r\n var scopedAlias = new Local( // not SCOPED as an indicator that it isn't automatically free'd\r\n this.currentFunction.program,\r\n name,\r\n index,\r\n type,\r\n null\r\n );\r\n this.scopedLocals.set(name, scopedAlias);\r\n return scopedAlias;\r\n }\r\n\r\n /** Gets the local of the specified name in the current scope. */\r\n getScopedLocal(name: string): Local | null {\r\n var local: Local | null;\r\n var current: Flow | null = this;\r\n do {\r\n if (current.scopedLocals && (local = current.scopedLocals.get(name))) {\r\n return local;\r\n }\r\n } while (current = current.parent);\r\n return this.currentFunction.localsByName.get(name);\r\n }\r\n\r\n /** Tests if the local with the specified index is considered wrapped. */\r\n isLocalWrapped(index: i32): bool {\r\n var map: I64;\r\n var ext: I64[] | null;\r\n if (index < 64) {\r\n if (index < 0) return true; // inlined constant\r\n map = this.wrappedLocals;\r\n } else if (ext = this.wrappedLocalsExt) {\r\n let i = ((index - 64) / 64) | 0;\r\n if (i >= ext.length) return false;\r\n map = ext[i];\r\n index -= (i + 1) * 64;\r\n } else {\r\n return false;\r\n }\r\n return i64_ne(\r\n i64_and(\r\n map,\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n ),\r\n i64_zero\r\n );\r\n }\r\n\r\n /** Sets if the local with the specified index is considered wrapped. */\r\n setLocalWrapped(index: i32, wrapped: bool): void {\r\n var map: I64;\r\n var off: i32 = -1;\r\n if (index < 64) {\r\n if (index < 0) return; // inlined constant\r\n map = this.wrappedLocals;\r\n } else {\r\n let ext = this.wrappedLocalsExt;\r\n off = ((index - 64) / 64) | 0;\r\n if (!ext) {\r\n this.wrappedLocalsExt = ext = new Array(off + 1);\r\n ext.length = 0;\r\n }\r\n while (ext.length <= off) ext.push(i64_new(0));\r\n map = ext[off];\r\n index -= (off + 1) * 64;\r\n }\r\n map = wrapped\r\n ? i64_or(\r\n map,\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n )\r\n : i64_and(\r\n map,\r\n i64_not(\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n )\r\n );\r\n if (off >= 0) (this.wrappedLocalsExt)[off] = map;\r\n else this.wrappedLocals = map;\r\n }\r\n\r\n /** Inherits flags and local wrap states from the specified flow (e.g. blocks). */\r\n inherit(other: Flow): void {\r\n this.flags |= other.flags & (FlowFlags.ANY_CATEGORICAL | FlowFlags.ANY_CONDITIONAL);\r\n this.wrappedLocals = other.wrappedLocals;\r\n this.wrappedLocalsExt = other.wrappedLocalsExt; // no need to slice because other flow is finished\r\n }\r\n\r\n /** Inherits categorical flags as conditional flags from the specified flow (e.g. then without else). */\r\n inheritConditional(other: Flow): void {\r\n if (other.is(FlowFlags.RETURNS)) {\r\n this.set(FlowFlags.CONDITIONALLY_RETURNS);\r\n }\r\n if (other.is(FlowFlags.THROWS)) {\r\n this.set(FlowFlags.CONDITIONALLY_THROWS);\r\n }\r\n if (other.is(FlowFlags.BREAKS) && other.breakLabel == this.breakLabel) {\r\n this.set(FlowFlags.CONDITIONALLY_BREAKS);\r\n }\r\n if (other.is(FlowFlags.CONTINUES) && other.continueLabel == this.continueLabel) {\r\n this.set(FlowFlags.CONDITIONALLY_CONTINUES);\r\n }\r\n if (other.is(FlowFlags.ALLOCATES)) {\r\n this.set(FlowFlags.CONDITIONALLY_ALLOCATES);\r\n }\r\n }\r\n\r\n /** Inherits mutual flags and local wrap states from the specified flows (e.g. then with else). */\r\n inheritMutual(left: Flow, right: Flow): void {\r\n // categorical flags set in both arms\r\n this.flags |= left.flags & right.flags & FlowFlags.ANY_CATEGORICAL;\r\n\r\n // conditional flags set in at least one arm\r\n this.flags |= left.flags & FlowFlags.ANY_CONDITIONAL;\r\n this.flags |= right.flags & FlowFlags.ANY_CONDITIONAL;\r\n\r\n // locals wrapped in both arms\r\n this.wrappedLocals = i64_and(left.wrappedLocals, right.wrappedLocals);\r\n var leftExt = left.wrappedLocalsExt;\r\n var rightExt = right.wrappedLocalsExt;\r\n if (leftExt != null && rightExt != null) {\r\n let thisExt = this.wrappedLocalsExt;\r\n let minLength = min(leftExt.length, rightExt.length);\r\n if (minLength) {\r\n if (!thisExt) thisExt = new Array(minLength);\r\n else while (thisExt.length < minLength) thisExt.push(i64_new(0));\r\n for (let i = 0; i < minLength; ++i) {\r\n thisExt[i] = i64_and(\r\n leftExt[i],\r\n rightExt[i]\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Tests if an expression can possibly overflow in the context of this flow. Assumes that the\r\n * expression might already have overflown and returns `false` only if the operation neglects\r\n * any possibly combination of garbage bits being present.\r\n */\r\n canOverflow(expr: ExpressionRef, type: Type): bool {\r\n // TODO: the following catches most common and a few uncommon cases, but there are additional\r\n // opportunities here, obviously.\r\n assert(type != Type.void);\r\n\r\n // types other than i8, u8, i16, u16 and bool do not overflow\r\n if (!type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) return false;\r\n\r\n var operand: ExpressionRef;\r\n switch (getExpressionId(expr)) {\r\n\r\n // overflows if the local isn't wrapped or the conversion does\r\n case ExpressionId.GetLocal: {\r\n let currentFunction = this.currentFunction;\r\n let local = currentFunction.localsByIndex[getGetLocalIndex(expr)];\r\n return !currentFunction.flow.isLocalWrapped(local.index)\r\n || canConversionOverflow(local.type, type);\r\n }\r\n\r\n // overflows if the value does\r\n case ExpressionId.SetLocal: {\r\n assert(isTeeLocal(expr));\r\n return this.canOverflow(getSetLocalValue(expr), type);\r\n }\r\n\r\n // never overflows because globals are wrapped on set\r\n case ExpressionId.GetGlobal: return false;\r\n\r\n case ExpressionId.Binary: {\r\n switch (getBinaryOp(expr)) {\r\n\r\n // comparisons do not overflow (result is 0 or 1)\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64:\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64:\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtU32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtU64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64:\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeU32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeU64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64:\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtU32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtU64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64:\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeU32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeU64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: return false;\r\n\r\n // result won't overflow if one side is 0 or if one side is 1 and the other wrapped\r\n case BinaryOp.MulI32: {\r\n return !(\r\n (\r\n getExpressionId(operand = getBinaryLeft(expr)) == ExpressionId.Const &&\r\n (\r\n getConstValueI32(operand) == 0 ||\r\n (\r\n getConstValueI32(operand) == 1 &&\r\n !this.canOverflow(getBinaryRight(expr), type)\r\n )\r\n )\r\n ) || (\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n (\r\n getConstValueI32(operand) == 0 ||\r\n (\r\n getConstValueI32(operand) == 1 &&\r\n !this.canOverflow(getBinaryLeft(expr), type)\r\n )\r\n )\r\n )\r\n );\r\n }\r\n\r\n // result won't overflow if one side is a constant less than this type's mask or one side\r\n // is wrapped\r\n case BinaryOp.AndI32: {\r\n // note that computeSmallIntegerMask returns the mask minus the MSB for signed types\r\n // because signed value garbage bits must be guaranteed to be equal to the MSB.\r\n return !(\r\n (\r\n (\r\n getExpressionId(operand = getBinaryLeft(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) <= type.computeSmallIntegerMask(Type.i32)\r\n ) || !this.canOverflow(operand, type)\r\n ) || (\r\n (\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) <= type.computeSmallIntegerMask(Type.i32)\r\n ) || !this.canOverflow(operand, type)\r\n )\r\n );\r\n }\r\n\r\n // overflows if the shift doesn't clear potential garbage bits\r\n case BinaryOp.ShlI32: {\r\n let shift = 32 - type.size;\r\n return getExpressionId(operand = getBinaryRight(expr)) != ExpressionId.Const\r\n || getConstValueI32(operand) < shift;\r\n }\r\n\r\n // overflows if the value does and the shift doesn't clear potential garbage bits\r\n case BinaryOp.ShrI32: {\r\n let shift = 32 - type.size;\r\n return this.canOverflow(getBinaryLeft(expr), type) && (\r\n getExpressionId(operand = getBinaryRight(expr)) != ExpressionId.Const ||\r\n getConstValueI32(operand) < shift\r\n );\r\n }\r\n\r\n // overflows if the shift does not clear potential garbage bits. if an unsigned value is\r\n // wrapped, it can't overflow.\r\n case BinaryOp.ShrU32: {\r\n let shift = 32 - type.size;\r\n return type.is(TypeFlags.SIGNED)\r\n ? !(\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) > shift // must clear MSB\r\n )\r\n : this.canOverflow(getBinaryLeft(expr), type) && !(\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) >= shift // can leave MSB\r\n );\r\n }\r\n\r\n // overflows if any side does\r\n case BinaryOp.DivU32:\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemU32: {\r\n return this.canOverflow(getBinaryLeft(expr), type)\r\n || this.canOverflow(getBinaryRight(expr), type);\r\n }\r\n }\r\n break;\r\n }\r\n\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n\r\n // comparisons do not overflow (result is 0 or 1)\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: return false;\r\n\r\n // overflow if the maximum result (32) cannot be represented in the target type\r\n case UnaryOp.ClzI32:\r\n case UnaryOp.CtzI32:\r\n case UnaryOp.PopcntI32: return type.size < 7;\r\n }\r\n break;\r\n }\r\n\r\n // overflows if the value cannot be represented in the target type\r\n case ExpressionId.Const: {\r\n let value: i32 = 0;\r\n switch (getExpressionType(expr)) {\r\n case NativeType.I32: { value = getConstValueI32(expr); break; }\r\n case NativeType.I64: { value = getConstValueI64Low(expr); break; } // discards upper bits\r\n case NativeType.F32: { value = i32(getConstValueF32(expr)); break; }\r\n case NativeType.F64: { value = i32(getConstValueF64(expr)); break; }\r\n default: assert(false);\r\n }\r\n switch (type.kind) {\r\n case TypeKind.I8: return value < i8.MIN_VALUE || value > i8.MAX_VALUE;\r\n case TypeKind.I16: return value < i16.MIN_VALUE || value > i16.MAX_VALUE;\r\n case TypeKind.U8: return value < 0 || value > u8.MAX_VALUE;\r\n case TypeKind.U16: return value < 0 || value > u16.MAX_VALUE;\r\n case TypeKind.BOOL: return (value & ~1) != 0;\r\n }\r\n break;\r\n }\r\n\r\n // overflows if the conversion does\r\n case ExpressionId.Load: {\r\n let fromType: Type;\r\n switch (getLoadBytes(expr)) {\r\n case 1: { fromType = isLoadSigned(expr) ? Type.i8 : Type.u8; break; }\r\n case 2: { fromType = isLoadSigned(expr) ? Type.i16 : Type.u16; break; }\r\n default: { fromType = isLoadSigned(expr) ? Type.i32 : Type.u32; break; }\r\n }\r\n return canConversionOverflow(fromType, type);\r\n }\r\n\r\n // overflows if the result does, which is either\r\n // - the last expression of the block, by contract, if the block doesn't have a label\r\n // - the last expression or the value of an inner br if the block has a label (TODO)\r\n case ExpressionId.Block: {\r\n if (!getBlockName(expr)) {\r\n let size = assert(getBlockChildCount(expr));\r\n let last = getBlockChild(expr, size - 1);\r\n return this.canOverflow(last, type);\r\n }\r\n // actually, brs with a value that'd be handled here is not emitted atm\r\n break;\r\n }\r\n\r\n // overflows if either side does\r\n case ExpressionId.If: {\r\n return this.canOverflow(getIfTrue(expr), type)\r\n || this.canOverflow(assert(getIfFalse(expr)), type);\r\n }\r\n\r\n // overflows if either side does\r\n case ExpressionId.Select: {\r\n return this.canOverflow(getSelectThen(expr), type)\r\n || this.canOverflow(getSelectElse(expr), type);\r\n }\r\n\r\n // overflows if the call does not return a wrapped value or the conversion does\r\n case ExpressionId.Call: {\r\n let program = this.currentFunction.program;\r\n let instance = assert(program.instancesLookup.get(assert(getCallTarget(expr))));\r\n assert(instance.kind == ElementKind.FUNCTION);\r\n let returnType = (instance).signature.returnType;\r\n return !(instance).flow.is(FlowFlags.RETURNS_WRAPPED)\r\n || canConversionOverflow(returnType, type);\r\n }\r\n\r\n // doesn't technically overflow\r\n case ExpressionId.Unreachable: return false;\r\n }\r\n return true;\r\n }\r\n\r\n /** Finalizes this flow. Must be the topmost parent flow of the function. */\r\n finalize(): void {\r\n assert(this.parent == null); // must be the topmost parent flow\r\n this.continueLabel = null;\r\n this.breakLabel = null;\r\n this.returnLabel = null;\r\n this.contextualTypeArguments = null;\r\n }\r\n}\r\n\r\n/** Tests if a conversion from one type to another can technically overflow. */\r\nfunction canConversionOverflow(fromType: Type, toType: Type): bool {\r\n var fromSize = fromType.byteSize;\r\n var toSize = toType.byteSize;\r\n return !fromType.is(TypeFlags.INTEGER) // non-i32 locals or returns\r\n || fromSize > toSize\r\n || fromType.is(TypeFlags.SIGNED) != toType.is(TypeFlags.SIGNED);\r\n}\r\n","/**\r\n * Mappings from AssemblyScript types to WebAssembly types.\r\n * @module types\r\n *//***/\r\n\r\nimport {\r\n Class,\r\n FunctionTarget\r\n} from \"./program\";\r\n\r\nimport {\r\n NativeType,\r\n ExpressionRef,\r\n Module\r\n} from \"./module\";\r\n\r\n/** Indicates the kind of a type. */\r\nexport const enum TypeKind {\r\n\r\n // signed integers\r\n\r\n /** An 8-bit signed integer. */\r\n I8,\r\n /** A 16-bit signed integer. */\r\n I16,\r\n /** A 32-bit signed integer. */\r\n I32,\r\n /** A 64-bit signed integer. */\r\n I64,\r\n /** A 32-bit/64-bit signed integer, depending on the target. */\r\n ISIZE,\r\n\r\n // unsigned integers\r\n\r\n /** An 8-bit unsigned integer. */\r\n U8,\r\n /** A 16-bit unsigned integer. */\r\n U16,\r\n /** A 32-bit unsigned integer. Also the base of function types. */\r\n U32,\r\n /** A 64-bit unsigned integer. */\r\n U64,\r\n /** A 32-bit/64-bit unsigned integer, depending on the target. Also the base of class types. */\r\n USIZE,\r\n /** A 1-bit unsigned integer. */\r\n BOOL, // sic\r\n\r\n // floats\r\n\r\n /** A 32-bit float. */\r\n F32,\r\n /** A 64-bit double. */\r\n F64,\r\n\r\n // other\r\n\r\n /** No return type. */\r\n VOID\r\n}\r\n\r\n/** Indicates capabilities of a type. */\r\nexport const enum TypeFlags {\r\n NONE = 0,\r\n /** Is a signed type that can represent negative values. */\r\n SIGNED = 1 << 0,\r\n /** Is an unsigned type that cannot represent negative values. */\r\n UNSIGNED = 1 << 1,\r\n /** Is an integer type. */\r\n INTEGER = 1 << 2,\r\n /** Is a floating point type. */\r\n FLOAT = 1 << 3,\r\n /** Is a pointer type. */\r\n POINTER = 1 << 4,\r\n /** Is smaller than 32-bits. */\r\n SHORT = 1 << 5,\r\n /** Is larger than 32-bits. */\r\n LONG = 1 << 6,\r\n /** Is a value type. */\r\n VALUE = 1 << 7,\r\n /** Is a reference type. */\r\n REFERENCE = 1 << 8,\r\n /** Is a nullable type. */\r\n NULLABLE = 1 << 9\r\n}\r\n\r\n/** Represents a resolved type. */\r\nexport class Type {\r\n\r\n /** Type kind. */\r\n kind: TypeKind;\r\n /** Type flags. */\r\n flags: TypeFlags;\r\n /** Size in bits. */\r\n size: u32;\r\n /** Size in bytes. */\r\n byteSize: i32;\r\n /** Underlying class reference, if a class type. */\r\n classReference: Class | null;\r\n /** Underlying signature reference, if a function type. */\r\n signatureReference: Signature | null;\r\n /** Respective non-nullable type, if nullable. */\r\n nonNullableType: Type;\r\n /** Cached nullable type, if non-nullable. */\r\n private cachedNullableType: Type | null = null;\r\n\r\n /** Constructs a new resolved type. */\r\n constructor(kind: TypeKind, flags: TypeFlags, size: u32) {\r\n this.kind = kind;\r\n this.flags = flags;\r\n this.size = size;\r\n this.byteSize = ceil(size / 8);\r\n this.classReference = null;\r\n this.signatureReference = null;\r\n this.nonNullableType = this;\r\n }\r\n\r\n /** Returns the closest int type representing this type. */\r\n get intType(): Type {\r\n switch (this.kind) {\r\n case TypeKind.I8: return Type.i8;\r\n case TypeKind.I16: return Type.i16;\r\n case TypeKind.F32:\r\n case TypeKind.I32: return Type.i32;\r\n case TypeKind.F64:\r\n case TypeKind.I64: return Type.i64;\r\n case TypeKind.ISIZE: return this.size == 64 ? Type.isize64 : Type.isize32;\r\n case TypeKind.U8: return Type.u8;\r\n case TypeKind.U16: return Type.u16;\r\n case TypeKind.U32: return Type.u32;\r\n case TypeKind.U64: return Type.u64;\r\n case TypeKind.USIZE: return this.size == 64 ? Type.usize64 : Type.usize32;\r\n case TypeKind.BOOL:\r\n default: return Type.i32;\r\n }\r\n }\r\n\r\n /** Computes the sign-extending shift in the target type. */\r\n computeSmallIntegerShift(targetType: Type): u32 {\r\n return targetType.size - this.size;\r\n }\r\n\r\n /** Computes the truncating mask in the target type. */\r\n computeSmallIntegerMask(targetType: Type): u32 {\r\n var size = this.is(TypeFlags.UNSIGNED) ? this.size : this.size - 1;\r\n return ~0 >>> (targetType.size - size);\r\n }\r\n\r\n /** Tests if this type has (all of) the specified flags. */\r\n is(flags: TypeFlags): bool { return (this.flags & flags) == flags; }\r\n /** Tests if this type has any of the specified flags. */\r\n isAny(flags: TypeFlags): bool { return (this.flags & flags) != 0; }\r\n\r\n /** Composes a class type from this type and a class. */\r\n asClass(classType: Class): Type {\r\n assert(this.kind == TypeKind.USIZE && !this.classReference);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.classReference = classType;\r\n return ret;\r\n }\r\n\r\n /** Composes a function type from this type and a function. */\r\n asFunction(signature: Signature): Type {\r\n assert(this.kind == TypeKind.U32 && !this.signatureReference);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.signatureReference = signature;\r\n return ret;\r\n }\r\n\r\n /** Composes the respective nullable type of this type. */\r\n asNullable(): Type {\r\n assert(this.is(TypeFlags.REFERENCE));\r\n if (!this.cachedNullableType) {\r\n assert(!this.is(TypeFlags.NULLABLE));\r\n this.cachedNullableType = new Type(this.kind, this.flags | TypeFlags.NULLABLE, this.size);\r\n this.cachedNullableType.nonNullableType = this;\r\n this.cachedNullableType.classReference = this.classReference; // either a class reference\r\n this.cachedNullableType.signatureReference = this.signatureReference; // or a function reference\r\n }\r\n return this.cachedNullableType;\r\n }\r\n\r\n /** Tests if a value of this type is assignable to a target of the specified type. */\r\n isAssignableTo(target: Type, signednessIsRelevant: bool = false): bool {\r\n var currentClass: Class | null;\r\n var targetClass: Class | null;\r\n var currentFunction: Signature | null;\r\n var targetFunction: Signature | null;\r\n if (this.is(TypeFlags.REFERENCE)) {\r\n if (target.is(TypeFlags.REFERENCE)) {\r\n if (!this.is(TypeFlags.NULLABLE) || target.is(TypeFlags.NULLABLE)) {\r\n if (currentClass = this.classReference) {\r\n if (targetClass = target.classReference) {\r\n return currentClass.isAssignableTo(targetClass);\r\n }\r\n } else if (currentFunction = this.signatureReference) {\r\n if (targetFunction = target.signatureReference) {\r\n return currentFunction.isAssignableTo(targetFunction);\r\n }\r\n }\r\n }\r\n }\r\n } else if (!target.is(TypeFlags.REFERENCE)) {\r\n if (this.is(TypeFlags.INTEGER)) {\r\n if (target.is(TypeFlags.INTEGER)) {\r\n if (!signednessIsRelevant || this.is(TypeFlags.SIGNED) == target.is(TypeFlags.SIGNED)) {\r\n return this.size <= target.size;\r\n }\r\n } else if (target.kind == TypeKind.F32) {\r\n return this.size <= 23; // mantissa bits\r\n } else if (target.kind == TypeKind.F64) {\r\n return this.size <= 52; // ^\r\n }\r\n } else if (this.is(TypeFlags.FLOAT)) {\r\n if (target.is(TypeFlags.FLOAT)) {\r\n return this.size <= target.size;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** Determines the common compatible type of two types, if any. */\r\n static commonCompatible(left: Type, right: Type, signednessIsImportant: bool): Type | null {\r\n if (right.isAssignableTo(left, signednessIsImportant)) return left;\r\n else if (left.isAssignableTo(right, signednessIsImportant)) return right;\r\n return null;\r\n }\r\n\r\n /** Converts this type to its TypeScript representation. */\r\n toString(kindOnly: bool = false): string {\r\n if (!kindOnly && this.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.classReference;\r\n if (classReference) {\r\n return this.is(TypeFlags.NULLABLE)\r\n ? classReference.toString() + \" | null\"\r\n : classReference.toString();\r\n }\r\n let signatureReference = this.signatureReference;\r\n if (signatureReference) {\r\n return this.is(TypeFlags.NULLABLE)\r\n ? \"(\" + signatureReference.toString(true) + \") | null\"\r\n : signatureReference.toString(true);\r\n }\r\n assert(false);\r\n }\r\n switch (this.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"i64\";\r\n case TypeKind.ISIZE: return \"isize\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE: return \"usize\";\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n default: assert(false);\r\n case TypeKind.VOID: return \"void\";\r\n }\r\n }\r\n\r\n // Binaryen specific\r\n\r\n /** Converts this type to its respective native type. */\r\n toNativeType(): NativeType {\r\n switch (this.kind) {\r\n default: return NativeType.I32;\r\n case TypeKind.I64:\r\n case TypeKind.U64: return NativeType.I64;\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? NativeType.I64 : NativeType.I32;\r\n case TypeKind.F32: return NativeType.F32;\r\n case TypeKind.F64: return NativeType.F64;\r\n case TypeKind.VOID: return NativeType.None;\r\n }\r\n }\r\n\r\n /** Converts this type to its native `0` value. */\r\n toNativeZero(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(0);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(0);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(0);\r\n case TypeKind.F32: return module.createF32(0);\r\n case TypeKind.F64: return module.createF64(0);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `1` value. */\r\n toNativeOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(1);\r\n case TypeKind.F32: return module.createF32(1);\r\n case TypeKind.F64: return module.createF64(1);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `-1` value. */\r\n toNativeNegOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(-1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(-1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(-1, -1);\r\n case TypeKind.F32: return module.createF32(-1);\r\n case TypeKind.F64: return module.createF64(-1);\r\n }\r\n }\r\n\r\n /** Converts this type to its signature string. */\r\n toSignatureString(): string {\r\n switch (this.kind) {\r\n default: return \"i\";\r\n case TypeKind.I64:\r\n case TypeKind.U64: return \"I\";\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? \"I\" : \"i\";\r\n case TypeKind.F32: return \"f\";\r\n case TypeKind.F64: return \"F\";\r\n case TypeKind.VOID: return \"v\";\r\n }\r\n }\r\n\r\n // Types\r\n\r\n /** An 8-bit signed integer. */\r\n static readonly i8: Type = new Type(TypeKind.I8,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit signed integer. */\r\n static readonly i16: Type = new Type(TypeKind.I16,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit signed integer. */\r\n static readonly i32: Type = new Type(TypeKind.I32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed integer. */\r\n static readonly i64: Type = new Type(TypeKind.I64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit signed size. WASM32 only. */\r\n static readonly isize32: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed size. WASM64 only. */\r\n static readonly isize64: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** An 8-bit unsigned integer. */\r\n static readonly u8: Type = new Type(TypeKind.U8,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit unsigned integer. */\r\n static readonly u16: Type = new Type(TypeKind.U16,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit unsigned integer. */\r\n static readonly u32: Type = new Type(TypeKind.U32,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned integer. */\r\n static readonly u64: Type = new Type(TypeKind.U64,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit unsigned size. WASM32 only. */\r\n static readonly usize32: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned size. WASM64 only. */\r\n static readonly usize64: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 1-bit unsigned integer. */\r\n static readonly bool: Type = new Type(TypeKind.BOOL,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 1\r\n );\r\n\r\n /** A 32-bit float. */\r\n static readonly f32: Type = new Type(TypeKind.F32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit float. */\r\n static readonly f64: Type = new Type(TypeKind.F64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** No return type. */\r\n static readonly void: Type = new Type(TypeKind.VOID, TypeFlags.NONE, 0);\r\n}\r\n\r\n/** Converts an array of types to an array of native types. */\r\nexport function typesToNativeTypes(types: Type[]): NativeType[] {\r\n var numTypes = types.length;\r\n var ret = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) ret[i] = types[i].toNativeType();\r\n return ret;\r\n}\r\n\r\n/** Converts an array of types to its combined string representation. */\r\nexport function typesToString(types: Type[]): string {\r\n var numTypes = types.length;\r\n if (!numTypes) return \"\";\r\n var sb = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) sb[i] = types[i].toString();\r\n return sb.join(\",\");\r\n}\r\n\r\n/** Represents a fully resolved function signature. */\r\nexport class Signature {\r\n\r\n /** Parameter types, if any, excluding `this`. */\r\n parameterTypes: Type[];\r\n /** Parameter names, if known, excluding `this`. */\r\n parameterNames: string[] | null;\r\n /** Number of required parameters excluding `this`. Other parameters are considered optional. */\r\n requiredParameters: i32;\r\n /** Return type. */\r\n returnType: Type;\r\n /** This type, if an instance signature. */\r\n thisType: Type | null;\r\n /** Whether the last parameter is a rest parameter. */\r\n hasRest: bool;\r\n /** Cached {@link FunctionTarget}. */\r\n cachedFunctionTarget: FunctionTarget | null = null;\r\n /** Respective function type. */\r\n type: Type;\r\n\r\n /** Constructs a new signature. */\r\n constructor(\r\n parameterTypes: Type[] | null = null,\r\n returnType: Type | null = null,\r\n thisType: Type | null = null\r\n ) {\r\n this.parameterTypes = parameterTypes ? parameterTypes : [];\r\n this.parameterNames = null;\r\n this.requiredParameters = 0;\r\n this.returnType = returnType ? returnType : Type.void;\r\n this.thisType = thisType;\r\n this.hasRest = false;\r\n this.type = Type.u32.asFunction(this);\r\n }\r\n\r\n /** Gets the known or, alternatively, generic parameter name at the specified index. */\r\n getParameterName(index: i32): string {\r\n var parameterNames = this.parameterNames;\r\n return parameterNames && parameterNames.length > index\r\n ? parameterNames[index]\r\n : getDefaultParameterName(index);\r\n }\r\n\r\n /** Tests if a value of this function type is assignable to a target of the specified function type. */\r\n isAssignableTo(target: Signature): bool {\r\n // TODO: maybe cache results?\r\n\r\n // check `this` type\r\n var thisThisType = this.thisType;\r\n var targetThisType = target.thisType;\r\n if (thisThisType) {\r\n if (!(targetThisType && thisThisType.isAssignableTo(targetThisType))) return false;\r\n } else if (targetThisType) {\r\n return false;\r\n }\r\n\r\n // check rest parameter\r\n if (this.hasRest != target.hasRest) return false; // TODO\r\n\r\n // check parameter types\r\n var thisParameterTypes = this.parameterTypes;\r\n var targetParameterTypes = target.parameterTypes;\r\n var numParameters = thisParameterTypes.length;\r\n if (numParameters != targetParameterTypes.length) return false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let thisParameterType = thisParameterTypes[i];\r\n let targetParameterType = targetParameterTypes[i];\r\n if (!thisParameterType.isAssignableTo(targetParameterType)) return false;\r\n }\r\n\r\n // check return type\r\n var thisReturnType = this.returnType;\r\n var targetReturnType = target.returnType;\r\n return thisReturnType == targetReturnType || thisReturnType.isAssignableTo(targetReturnType);\r\n }\r\n\r\n /** Converts a signature to a function type string. */\r\n static makeSignatureString(parameterTypes: Type[] | null, returnType: Type, thisType: Type | null = null): string {\r\n var sb = [];\r\n if (thisType) sb.push(thisType.toSignatureString());\r\n if (parameterTypes) {\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) sb.push(parameterTypes[i].toSignatureString());\r\n }\r\n sb.push(returnType.toSignatureString());\r\n return sb.join(\"\");\r\n }\r\n\r\n /** Converts this signature to a function type string. */\r\n toSignatureString(): string {\r\n return Signature.makeSignatureString(this.parameterTypes, this.returnType, this.thisType);\r\n }\r\n\r\n /** Converts this signature to a string. */\r\n toString(includeThis: bool = false): string {\r\n var sb = new Array();\r\n sb.push(\"(\");\r\n var index = 0;\r\n var thisType = this.thisType;\r\n if (thisType) {\r\n if (includeThis) {\r\n sb.push(\"this: \");\r\n sb.push(thisType.toString());\r\n index = 1;\r\n }\r\n }\r\n var parameters = this.parameterTypes;\r\n var numParameters = parameters.length;\r\n if (numParameters) {\r\n let names = this.parameterNames;\r\n let numNames = names ? names.length : 0;\r\n let optionalStart = this.requiredParameters;\r\n let restIndex = this.hasRest ? numParameters - 1 : -1;\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n if (index) sb.push(\", \");\r\n if (i == restIndex) sb.push(\"...\");\r\n if (i < numNames) sb.push((names)[i]);\r\n else sb.push(getDefaultParameterName(i));\r\n if (i >= optionalStart && i != restIndex) sb.push(\"?: \");\r\n else sb.push(\": \");\r\n sb.push(parameters[i].toString());\r\n }\r\n }\r\n sb.push(\") => \");\r\n sb.push(this.returnType.toString());\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n// Cached default parameter names used where names are unknown.\r\nvar cachedDefaultParameterNames: string[] | null = null;\r\n\r\n/** Gets the cached default parameter name for the specified index. */\r\nexport function getDefaultParameterName(index: i32): string {\r\n if (!cachedDefaultParameterNames) cachedDefaultParameterNames = [];\r\n for (let i = cachedDefaultParameterNames.length; i <= index; ++i) {\r\n cachedDefaultParameterNames.push(\"arg$\" + i.toString(10));\r\n }\r\n return cachedDefaultParameterNames[index - 1];\r\n}\r\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\r\n * A TypeScript tokenizer modified for AssemblyScript.\r\n *\r\n * Skips over trivia and provides a general mark/reset mechanism for the parser to utilize on\r\n * ambiguous tokens.\r\n *\r\n * @module tokenizer\r\n *//***/\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Source,\r\n CommentKind\r\n} from \"./ast\";\r\n\r\nimport {\r\n CharCode,\r\n isLineBreak,\r\n isWhiteSpace,\r\n isIdentifierStart,\r\n isIdentifierPart,\r\n isDecimalDigit,\r\n isOctalDigit,\r\n isKeywordCharacter\r\n} from \"./util\";\r\n\r\n/** Named token types. */\r\nexport enum Token {\r\n\r\n // keywords\r\n // discarded: ANY, BOOLEAN, NEVER, NUMBER, STRING, SYMBOL, UNDEFINED, LESSTHAN_SLASH\r\n\r\n ABSTRACT,\r\n AS,\r\n ASYNC,\r\n AWAIT, // ES2017\r\n BREAK, // ES2017\r\n CASE, // ES2017\r\n CATCH, // ES2017\r\n CLASS, // ES2017\r\n CONST, // ES2017\r\n CONTINUE, // ES2017\r\n CONSTRUCTOR,\r\n DEBUGGER, // ES2017\r\n DECLARE,\r\n DEFAULT, // ES2017\r\n DELETE, // ES2017\r\n DO, // ES2017\r\n ELSE, // ES2017\r\n ENUM, // ES2017 future\r\n EXPORT, // ES2017\r\n EXTENDS, // ES2017\r\n FALSE, // ES\r\n FINALLY, // ES2017\r\n FOR, // ES2017\r\n FROM, // AS possible identifier\r\n FUNCTION, // ES2017\r\n GET,\r\n IF, // ES2017\r\n IMPLEMENTS, // ES2017 non-lexical\r\n IMPORT, // ES2017\r\n IN, // ES2017\r\n INSTANCEOF, // ES2017\r\n INTERFACE, // ES2017 non-lexical\r\n IS,\r\n KEYOF,\r\n LET, // ES2017 non-lexical\r\n MODULE, // AS possible identifier\r\n NAMESPACE, // AS possible identifier\r\n NEW, // ES2017\r\n NULL, // ES\r\n OF,\r\n PACKAGE, // ES2017 non-lexical\r\n PRIVATE, // ES2017 non-lexical\r\n PROTECTED, // ES2017 non-lexical\r\n PUBLIC, // ES2017 non-lexical\r\n READONLY,\r\n RETURN, // ES2017\r\n SET,\r\n STATIC, // ES2017 non-lexical\r\n SUPER, // ES2017\r\n SWITCH, // ES2017\r\n THIS, // ES2017\r\n THROW, // ES2017\r\n TRUE, // ES\r\n TRY, // ES2017\r\n TYPE, // AS possible identifier\r\n TYPEOF, // ES2017\r\n VAR, // ES2017\r\n VOID, // ES2017\r\n WHILE, // ES2017\r\n WITH, // ES2017\r\n YIELD, // ES2017\r\n\r\n // punctuation\r\n\r\n OPENBRACE,\r\n CLOSEBRACE,\r\n OPENPAREN,\r\n CLOSEPAREN,\r\n OPENBRACKET,\r\n CLOSEBRACKET,\r\n DOT,\r\n DOT_DOT_DOT,\r\n SEMICOLON,\r\n COMMA,\r\n LESSTHAN,\r\n GREATERTHAN,\r\n LESSTHAN_EQUALS,\r\n GREATERTHAN_EQUALS,\r\n EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS,\r\n EQUALS_EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS_EQUALS,\r\n EQUALS_GREATERTHAN,\r\n PLUS,\r\n MINUS,\r\n ASTERISK_ASTERISK,\r\n ASTERISK,\r\n SLASH,\r\n PERCENT,\r\n PLUS_PLUS,\r\n MINUS_MINUS,\r\n LESSTHAN_LESSTHAN,\r\n GREATERTHAN_GREATERTHAN,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN,\r\n AMPERSAND,\r\n BAR,\r\n CARET,\r\n EXCLAMATION,\r\n TILDE,\r\n AMPERSAND_AMPERSAND,\r\n BAR_BAR,\r\n QUESTION,\r\n COLON,\r\n EQUALS,\r\n PLUS_EQUALS,\r\n MINUS_EQUALS,\r\n ASTERISK_EQUALS,\r\n ASTERISK_ASTERISK_EQUALS,\r\n SLASH_EQUALS,\r\n PERCENT_EQUALS,\r\n LESSTHAN_LESSTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS,\r\n AMPERSAND_EQUALS,\r\n BAR_EQUALS,\r\n CARET_EQUALS,\r\n AT,\r\n\r\n // literals\r\n\r\n IDENTIFIER,\r\n STRINGLITERAL,\r\n INTEGERLITERAL,\r\n FLOATLITERAL,\r\n\r\n // meta\r\n\r\n INVALID,\r\n ENDOFFILE\r\n}\r\n\r\nexport enum IdentifierHandling {\r\n DEFAULT,\r\n PREFER,\r\n ALWAYS\r\n}\r\n\r\nexport function tokenFromKeyword(text: string): Token {\r\n assert(text.length);\r\n switch (text.charCodeAt(0)) {\r\n case CharCode.a: {\r\n switch (text) {\r\n case \"abstract\": return Token.ABSTRACT;\r\n case \"as\": return Token.AS;\r\n case \"async\": return Token.ASYNC;\r\n case \"await\": return Token.AWAIT;\r\n }\r\n break;\r\n }\r\n case CharCode.b: {\r\n switch (text) {\r\n case \"break\": return Token.BREAK;\r\n }\r\n break;\r\n }\r\n case CharCode.c: {\r\n switch (text) {\r\n case \"case\": return Token.CASE;\r\n case \"catch\": return Token.CATCH;\r\n case \"class\": return Token.CLASS;\r\n case \"continue\": return Token.CONTINUE;\r\n case \"const\": return Token.CONST;\r\n case \"constructor\": return Token.CONSTRUCTOR;\r\n }\r\n break;\r\n }\r\n case CharCode.d: {\r\n switch (text) {\r\n case \"debugger\": return Token.DEBUGGER;\r\n case \"declare\": return Token.DECLARE;\r\n case \"default\": return Token.DEFAULT;\r\n case \"delete\": return Token.DELETE;\r\n case \"do\": return Token.DO;\r\n }\r\n break;\r\n }\r\n case CharCode.e: {\r\n switch (text) {\r\n case \"else\": return Token.ELSE;\r\n case \"enum\": return Token.ENUM;\r\n case \"export\": return Token.EXPORT;\r\n case \"extends\": return Token.EXTENDS;\r\n }\r\n break;\r\n }\r\n case CharCode.f: {\r\n switch (text) {\r\n case \"false\": return Token.FALSE;\r\n case \"finally\": return Token.FINALLY;\r\n case \"for\": return Token.FOR;\r\n case \"from\": return Token.FROM;\r\n case \"function\": return Token.FUNCTION;\r\n }\r\n break;\r\n }\r\n case CharCode.g: {\r\n switch (text) {\r\n case \"get\": return Token.GET;\r\n }\r\n break;\r\n }\r\n case CharCode.i: {\r\n switch (text) {\r\n case \"if\": return Token.IF;\r\n case \"implements\": return Token.IMPLEMENTS;\r\n case \"import\": return Token.IMPORT;\r\n case \"in\": return Token.IN;\r\n case \"instanceof\": return Token.INSTANCEOF;\r\n case \"interface\": return Token.INTERFACE;\r\n case \"is\": return Token.IS;\r\n }\r\n break;\r\n }\r\n case CharCode.k: {\r\n switch (text) {\r\n case \"keyof\": return Token.KEYOF;\r\n }\r\n break;\r\n }\r\n case CharCode.l: {\r\n switch (text) {\r\n case \"let\": return Token.LET;\r\n }\r\n break;\r\n }\r\n case CharCode.m: {\r\n switch (text) {\r\n case \"module\": return Token.MODULE;\r\n }\r\n break;\r\n }\r\n case CharCode.n: {\r\n switch (text) {\r\n case \"namespace\": return Token.NAMESPACE;\r\n case \"new\": return Token.NEW;\r\n case \"null\": return Token.NULL;\r\n }\r\n break;\r\n }\r\n case CharCode.o: {\r\n switch (text) {\r\n case \"of\": return Token.OF;\r\n }\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (text) {\r\n case \"package\": return Token.PACKAGE;\r\n case \"private\": return Token.PRIVATE;\r\n case \"protected\": return Token.PROTECTED;\r\n case \"public\": return Token.PUBLIC;\r\n }\r\n break;\r\n }\r\n case CharCode.r: {\r\n switch (text) {\r\n case \"readonly\": return Token.READONLY;\r\n case \"return\": return Token.RETURN;\r\n }\r\n break;\r\n }\r\n case CharCode.s: {\r\n switch (text) {\r\n case \"set\": return Token.SET;\r\n case \"static\": return Token.STATIC;\r\n case \"super\": return Token.SUPER;\r\n case \"switch\": return Token.SWITCH;\r\n }\r\n break;\r\n }\r\n case CharCode.t: {\r\n switch (text) {\r\n case \"this\": return Token.THIS;\r\n case \"throw\": return Token.THROW;\r\n case \"true\": return Token.TRUE;\r\n case \"try\": return Token.TRY;\r\n case \"type\": return Token.TYPE;\r\n case \"typeof\": return Token.TYPEOF;\r\n }\r\n break;\r\n }\r\n case CharCode.v: {\r\n switch (text) {\r\n case \"var\": return Token.VAR;\r\n case \"void\": return Token.VOID;\r\n }\r\n break;\r\n }\r\n case CharCode.w: {\r\n switch (text) {\r\n case \"while\": return Token.WHILE;\r\n case \"with\": return Token.WITH;\r\n }\r\n break;\r\n }\r\n case CharCode.y: {\r\n switch (text) {\r\n case \"yield\": return Token.YIELD;\r\n }\r\n break;\r\n }\r\n }\r\n return Token.INVALID;\r\n}\r\n\r\nexport function tokenIsAlsoIdentifier(token: Token): bool {\r\n switch (token) {\r\n case Token.ABSTRACT:\r\n case Token.AS:\r\n case Token.CONSTRUCTOR:\r\n case Token.DECLARE:\r\n case Token.DELETE:\r\n case Token.FROM:\r\n case Token.FOR:\r\n case Token.GET:\r\n case Token.IS:\r\n case Token.KEYOF:\r\n case Token.MODULE:\r\n case Token.NAMESPACE:\r\n case Token.READONLY:\r\n case Token.SET:\r\n case Token.TYPE: return true;\r\n default: return false;\r\n }\r\n}\r\n\r\nexport function operatorTokenToString(token: Token): string {\r\n switch (token) {\r\n case Token.DELETE: return \"delete\";\r\n case Token.IN: return \"in\";\r\n case Token.INSTANCEOF: return \"instanceof\";\r\n case Token.NEW: return \"new\";\r\n case Token.TYPEOF: return \"typeof\";\r\n case Token.VOID: return \"void\";\r\n case Token.YIELD: return \"yield\";\r\n case Token.DOT_DOT_DOT: return \"...\";\r\n case Token.COMMA: return \",\";\r\n case Token.LESSTHAN: return \"<\";\r\n case Token.GREATERTHAN: return \">\";\r\n case Token.LESSTHAN_EQUALS: return \"<=\";\r\n case Token.GREATERTHAN_EQUALS: return \">=\";\r\n case Token.EQUALS_EQUALS: return \"==\";\r\n case Token.EXCLAMATION_EQUALS: return \"!=\";\r\n case Token.EQUALS_EQUALS_EQUALS: return \"===\";\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return \"!==\";\r\n case Token.PLUS: return \"+\";\r\n case Token.MINUS: return \"-\";\r\n case Token.ASTERISK_ASTERISK: return \"**\";\r\n case Token.ASTERISK: return \"*\";\r\n case Token.SLASH: return \"/\";\r\n case Token.PERCENT: return \"%\";\r\n case Token.PLUS_PLUS: return \"++\";\r\n case Token.MINUS_MINUS: return \"--\";\r\n case Token.LESSTHAN_LESSTHAN: return \"<<\";\r\n case Token.GREATERTHAN_GREATERTHAN: return \">>\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return \">>>\";\r\n case Token.AMPERSAND: return \"&\";\r\n case Token.BAR: return \"|\";\r\n case Token.CARET: return \"^\";\r\n case Token.EXCLAMATION: return \"!\";\r\n case Token.TILDE: return \"~\";\r\n case Token.AMPERSAND_AMPERSAND: return \"&&\";\r\n case Token.BAR_BAR: return \"||\";\r\n case Token.EQUALS: return \"=\";\r\n case Token.PLUS_EQUALS: return \"+=\";\r\n case Token.MINUS_EQUALS: return \"-=\";\r\n case Token.ASTERISK_EQUALS: return \"*=\";\r\n case Token.ASTERISK_ASTERISK_EQUALS: return \"**=\";\r\n case Token.SLASH_EQUALS: return \"/=\";\r\n case Token.PERCENT_EQUALS: return \"%=\";\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: return \"<<=\";\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: return \">>=\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: return \">>>=\";\r\n case Token.AMPERSAND_EQUALS: return \"&=\";\r\n case Token.BAR_EQUALS: return \"|=\";\r\n case Token.CARET_EQUALS: return \"^=\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\nexport class Range {\r\n\r\n source: Source;\r\n start: i32;\r\n end: i32;\r\n\r\n // TODO: set these while tokenizing\r\n // line: i32;\r\n // column: i32;\r\n\r\n constructor(source: Source, start: i32, end: i32) {\r\n this.source = source;\r\n this.start = start;\r\n this.end = end;\r\n }\r\n\r\n static join(a: Range, b: Range): Range {\r\n if (a.source != b.source) throw new Error(\"source mismatch\");\r\n return new Range(a.source,\r\n a.start < b.start ? a.start : b.start,\r\n a.end > b.end ? a.end : b.end\r\n );\r\n }\r\n\r\n get atStart(): Range {\r\n return new Range(this.source, this.start, this.start);\r\n }\r\n get atEnd(): Range {\r\n return new Range(this.source, this.end, this.end);\r\n }\r\n\r\n get line(): i32 {\r\n var text = this.source.text;\r\n var line = 1;\r\n for (let pos = this.start; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) line++;\r\n }\r\n return line;\r\n }\r\n\r\n get column(): i32 {\r\n var text = this.source.text;\r\n var column = 0;\r\n for (let pos = this.start - 1; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) break;\r\n ++column;\r\n }\r\n return column;\r\n }\r\n\r\n toString(): string {\r\n return this.source.text.substring(this.start, this.end);\r\n }\r\n\r\n debugInfoRef: usize = 0;\r\n}\r\n\r\ndeclare function parseFloat(str: string): f64;\r\n\r\n/** Handler for intercepting comments while tokenizing. */\r\nexport type CommentHandler = (kind: CommentKind, text: string, range: Range) => void;\r\n\r\n/** Tokenizes a source to individual {@link Token}s. */\r\nexport class Tokenizer extends DiagnosticEmitter {\r\n\r\n source: Source;\r\n end: i32 = 0;\r\n\r\n pos: i32 = 0;\r\n token: Token = -1;\r\n tokenPos: i32 = 0;\r\n\r\n nextToken: Token = -1;\r\n nextTokenPos: i32 = 0;\r\n nextTokenOnNewLine: bool = false;\r\n\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new tokenizer. */\r\n constructor(source: Source, diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.source = source;\r\n this.pos = 0;\r\n this.end = source.text.length;\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n\r\n var text = source.text;\r\n\r\n // skip bom\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.BYTEORDERMARK\r\n ) {\r\n ++this.pos;\r\n }\r\n\r\n // skip shebang\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.HASH &&\r\n text.charCodeAt(this.pos + 1) == CharCode.EXCLAMATION\r\n ) {\r\n this.pos += 2;\r\n while (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) != CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // 'next' now starts at lf or eof\r\n }\r\n }\r\n\r\n next(identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): Token {\r\n this.nextToken = -1;\r\n return this.token = this.unsafeNext(identifierHandling);\r\n }\r\n\r\n private unsafeNext(\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxTokenLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n this.tokenPos = this.pos;\r\n let c = text.charCodeAt(this.pos);\r\n switch (c) {\r\n case CharCode.CARRIAGERETURN: {\r\n if (!(\r\n ++this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n )) break;\r\n // otherwise fall-through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.SPACE: {\r\n ++this.pos;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EXCLAMATION_EQUALS_EQUALS;\r\n }\r\n return Token.EXCLAMATION_EQUALS;\r\n }\r\n return Token.EXCLAMATION;\r\n }\r\n case CharCode.DOUBLEQUOTE:\r\n case CharCode.SINGLEQUOTE:\r\n case CharCode.BACKTICK: { // TODO\r\n return Token.STRINGLITERAL; // expects a call to readString\r\n }\r\n case CharCode.PERCENT: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.PERCENT_EQUALS;\r\n }\r\n return Token.PERCENT;\r\n }\r\n case CharCode.AMPERSAND: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.AMPERSAND) {\r\n ++this.pos;\r\n return Token.AMPERSAND_AMPERSAND;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.AMPERSAND_EQUALS;\r\n }\r\n }\r\n return Token.AMPERSAND;\r\n }\r\n case CharCode.OPENPAREN: {\r\n ++this.pos;\r\n return Token.OPENPAREN;\r\n }\r\n case CharCode.CLOSEPAREN: {\r\n ++this.pos;\r\n return Token.CLOSEPAREN;\r\n }\r\n case CharCode.ASTERISK: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.ASTERISK_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.ASTERISK_ASTERISK_EQUALS;\r\n }\r\n return Token.ASTERISK_ASTERISK;\r\n }\r\n }\r\n return Token.ASTERISK;\r\n }\r\n case CharCode.PLUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.PLUS) {\r\n ++this.pos;\r\n return Token.PLUS_PLUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.PLUS_EQUALS;\r\n }\r\n }\r\n return Token.PLUS;\r\n }\r\n case CharCode.COMMA: {\r\n ++this.pos;\r\n return Token.COMMA;\r\n }\r\n case CharCode.MINUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.MINUS) {\r\n ++this.pos;\r\n return Token.MINUS_MINUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.MINUS_EQUALS;\r\n }\r\n }\r\n return Token.MINUS;\r\n }\r\n case CharCode.DOT: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (isDecimalDigit(text.charCodeAt(this.pos))) {\r\n --this.pos;\r\n return Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n if (\r\n maxTokenLength > 2 && this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.DOT &&\r\n text.charCodeAt(this.pos + 1) == CharCode.DOT\r\n ) {\r\n this.pos += 2;\r\n return Token.DOT_DOT_DOT;\r\n }\r\n }\r\n return Token.DOT;\r\n }\r\n case CharCode.SLASH: {\r\n let commentStartPos = this.pos;\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.SLASH) { // single-line\r\n let commentKind = CommentKind.LINE;\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n ++this.pos;\r\n commentKind = CommentKind.TRIPLE;\r\n }\r\n while (++this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LINEFEED) {\r\n ++this.pos;\r\n break;\r\n }\r\n }\r\n if (this.onComment) {\r\n this.onComment(\r\n commentKind,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) { // multi-line\r\n let closed = false;\r\n while (++this.pos < this.end) {\r\n c = text.charCodeAt(this.pos);\r\n if (\r\n c == CharCode.ASTERISK &&\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n this.pos += 2;\r\n closed = true;\r\n break;\r\n }\r\n }\r\n if (!closed) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n this.range(this.pos), \"*/\"\r\n );\r\n } else if (this.onComment) {\r\n this.onComment(\r\n CommentKind.BLOCK,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.SLASH_EQUALS;\r\n }\r\n }\r\n return Token.SLASH;\r\n }\r\n case CharCode._0:\r\n case CharCode._1:\r\n case CharCode._2:\r\n case CharCode._3:\r\n case CharCode._4:\r\n case CharCode._5:\r\n case CharCode._6:\r\n case CharCode._7:\r\n case CharCode._8:\r\n case CharCode._9: {\r\n return this.testInteger()\r\n ? Token.INTEGERLITERAL // expects a call to readInteger\r\n : Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n case CharCode.COLON: {\r\n ++this.pos;\r\n return Token.COLON;\r\n }\r\n case CharCode.SEMICOLON: {\r\n ++this.pos;\r\n return Token.SEMICOLON;\r\n }\r\n case CharCode.LESSTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LESSTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.LESSTHAN_LESSTHAN_EQUALS;\r\n }\r\n return Token.LESSTHAN_LESSTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.LESSTHAN_EQUALS;\r\n }\r\n }\r\n return Token.LESSTHAN;\r\n }\r\n case CharCode.EQUALS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EQUALS_EQUALS_EQUALS;\r\n }\r\n return Token.EQUALS_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n return Token.EQUALS_GREATERTHAN;\r\n }\r\n }\r\n return Token.EQUALS;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (maxTokenLength > 2 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 3 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN;\r\n }\r\n case CharCode.QUESTION: {\r\n ++this.pos;\r\n return Token.QUESTION;\r\n }\r\n case CharCode.OPENBRACKET: {\r\n ++this.pos;\r\n return Token.OPENBRACKET;\r\n }\r\n case CharCode.CLOSEBRACKET: {\r\n ++this.pos;\r\n return Token.CLOSEBRACKET;\r\n }\r\n case CharCode.CARET: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.CARET_EQUALS;\r\n }\r\n return Token.CARET;\r\n }\r\n case CharCode.OPENBRACE: {\r\n ++this.pos;\r\n return Token.OPENBRACE;\r\n }\r\n case CharCode.BAR: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.BAR) {\r\n ++this.pos;\r\n return Token.BAR_BAR;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.BAR_EQUALS;\r\n }\r\n }\r\n return Token.BAR;\r\n }\r\n case CharCode.CLOSEBRACE: {\r\n ++this.pos;\r\n return Token.CLOSEBRACE;\r\n }\r\n case CharCode.TILDE: {\r\n ++this.pos;\r\n return Token.TILDE;\r\n }\r\n case CharCode.AT: {\r\n ++this.pos;\r\n return Token.AT;\r\n }\r\n default: {\r\n if (isIdentifierStart(c)) {\r\n if (isKeywordCharacter(c)) {\r\n let posBefore = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(c = text.charCodeAt(this.pos))\r\n ) {\r\n if (!isKeywordCharacter(c)) {\r\n this.pos = posBefore;\r\n return Token.IDENTIFIER;\r\n }\r\n }\r\n let keywordText = text.substring(posBefore, this.pos);\r\n let keywordToken = tokenFromKeyword(keywordText);\r\n if (\r\n keywordToken != Token.INVALID &&\r\n identifierHandling !== IdentifierHandling.ALWAYS &&\r\n !(\r\n identifierHandling === IdentifierHandling.PREFER &&\r\n tokenIsAlsoIdentifier(keywordToken)\r\n )\r\n ) {\r\n return keywordToken;\r\n }\r\n this.pos = posBefore;\r\n }\r\n return Token.IDENTIFIER; // expects a call to readIdentifier\r\n } else if (isWhiteSpace(c)) {\r\n ++this.pos;\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Invalid_character,\r\n this.range(this.pos, this.pos + 1)\r\n );\r\n ++this.pos;\r\n return Token.INVALID;\r\n }\r\n }\r\n }\r\n return Token.ENDOFFILE;\r\n }\r\n\r\n peek(\r\n checkOnNewLine: bool = false,\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxCompoundLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n if (this.nextToken < 0) {\r\n let posBefore = this.pos;\r\n let tokenBefore = this.token;\r\n let tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n this.nextTokenPos = this.tokenPos;\r\n if (checkOnNewLine) {\r\n this.nextTokenOnNewLine = false;\r\n for (let pos = posBefore, end = this.nextTokenPos; pos < end; ++pos) {\r\n if (isLineBreak(text.charCodeAt(pos))) {\r\n this.nextTokenOnNewLine = true;\r\n break;\r\n }\r\n }\r\n }\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n }\r\n return this.nextToken;\r\n }\r\n\r\n skipIdentifier(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.PREFER);\r\n }\r\n\r\n skipIdentifierName(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.ALWAYS);\r\n }\r\n\r\n skip(token: Token, identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): bool {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n var maxCompoundLength = i32.MAX_VALUE;\r\n switch (token) {\r\n case Token.GREATERTHAN: { // where parsing type arguments\r\n maxCompoundLength = 1;\r\n break;\r\n }\r\n }\r\n this.token = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n if (this.token == token) {\r\n this.nextToken = -1;\r\n return true;\r\n } else {\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n return false;\r\n }\r\n }\r\n\r\n mark(): State {\r\n var state: State;\r\n if (reusableState) {\r\n state = reusableState;\r\n reusableState = null;\r\n } else {\r\n state = new State();\r\n }\r\n state.pos = this.pos;\r\n state.token = this.token;\r\n state.tokenPos = this.tokenPos;\r\n return state;\r\n }\r\n\r\n discard(state: State): void {\r\n reusableState = state;\r\n }\r\n\r\n reset(state: State): void {\r\n this.pos = state.pos;\r\n this.token = state.token;\r\n this.tokenPos = state.tokenPos;\r\n this.nextToken = -1;\r\n }\r\n\r\n range(start: i32 = -1, end: i32 = -1): Range {\r\n if (start < 0) {\r\n start = this.tokenPos;\r\n end = this.pos;\r\n } else if (end < 0) {\r\n end = start;\r\n }\r\n return new Range(this.source, start, end);\r\n }\r\n\r\n readIdentifier(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(text.charCodeAt(this.pos))\r\n );\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readString(): string {\r\n var text = this.source.text;\r\n var quote = text.charCodeAt(this.pos++);\r\n var start = this.pos;\r\n var result = \"\";\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.end)\r\n );\r\n break;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == quote) {\r\n result += text.substring(start, this.pos++);\r\n break;\r\n }\r\n if (c == CharCode.BACKSLASH) {\r\n result += text.substring(start, this.pos);\r\n result += this.readEscapeSequence();\r\n start = this.pos;\r\n continue;\r\n }\r\n if (isLineBreak(c)) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n return result;\r\n }\r\n\r\n readEscapeSequence(): string {\r\n if (++this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.end)\r\n );\r\n return \"\";\r\n }\r\n\r\n var text = this.source.text;\r\n var c = text.charCodeAt(this.pos++);\r\n switch (c) {\r\n case CharCode._0: return \"\\0\";\r\n case CharCode.b: return \"\\b\";\r\n case CharCode.t: return \"\\t\";\r\n case CharCode.n: return \"\\n\";\r\n case CharCode.v: return \"\\v\";\r\n case CharCode.f: return \"\\f\";\r\n case CharCode.r: return \"\\r\";\r\n case CharCode.SINGLEQUOTE: return \"'\";\r\n case CharCode.DOUBLEQUOTE: return \"\\\"\";\r\n case CharCode.u: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.OPENBRACE\r\n ) {\r\n ++this.pos;\r\n return this.readExtendedUnicodeEscape(); // \\u{DDDDDDDD}\r\n }\r\n return this.readUnicodeEscape(); // \\uDDDD\r\n }\r\n case CharCode.CARRIAGERETURN: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // fall through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: return \"\";\r\n default: return String.fromCharCode(c);\r\n }\r\n }\r\n\r\n readRegexpPattern(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var escaped = false;\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.end)\r\n );\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.BACKSLASH) {\r\n ++this.pos;\r\n escaped = true;\r\n continue;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.SLASH && !escaped) break;\r\n if (isLineBreak(c)) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n escaped = false;\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readRegexpFlags(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var flags = 0;\r\n while (this.pos < this.end) {\r\n let c: i32 = text.charCodeAt(this.pos);\r\n if (!isIdentifierPart(c)) break;\r\n ++this.pos;\r\n\r\n // make sure each supported flag is unique\r\n switch (c) {\r\n case CharCode.g: {\r\n flags |= flags & 1 ? -1 : 1;\r\n break;\r\n }\r\n case CharCode.i: {\r\n flags |= flags & 2 ? -1 : 2;\r\n break;\r\n }\r\n case CharCode.m: {\r\n flags |= flags & 4 ? -1 : 4;\r\n break;\r\n }\r\n default: {\r\n flags = -1;\r\n break;\r\n }\r\n }\r\n }\r\n if (flags == -1) {\r\n this.error(\r\n DiagnosticCode.Invalid_regular_expression_flags,\r\n this.range(start, this.pos)\r\n );\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n testInteger(): bool {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 1 < this.end) {\r\n switch (text.charCodeAt(this.pos + 2)) {\r\n case CharCode.X:\r\n case CharCode.x:\r\n case CharCode.B:\r\n case CharCode.b:\r\n case CharCode.O:\r\n case CharCode.o: return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode.DOT || c == CharCode.E || c == CharCode.e) {\r\n return false;\r\n }\r\n if ((c < CharCode._0 || c > CharCode._9) && c != CharCode._) break;\r\n // does not validate separator placement (this is done in readXYInteger)\r\n pos++;\r\n }\r\n return true;\r\n }\r\n\r\n readInteger(): I64 {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n switch (text.charCodeAt(this.pos + 1)) {\r\n case CharCode.X:\r\n case CharCode.x: {\r\n this.pos += 2;\r\n return this.readHexInteger();\r\n }\r\n case CharCode.B:\r\n case CharCode.b: {\r\n this.pos += 2;\r\n return this.readBinaryInteger();\r\n }\r\n case CharCode.O:\r\n case CharCode.o: {\r\n this.pos += 2;\r\n return this.readOctalInteger();\r\n }\r\n }\r\n if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n let start = this.pos;\r\n ++this.pos;\r\n let value = this.readOctalInteger();\r\n this.error(\r\n DiagnosticCode.Octal_literals_are_not_allowed_in_strict_mode,\r\n this.range(start, this.pos)\r\n );\r\n return value;\r\n }\r\n }\r\n return this.readDecimalInteger();\r\n }\r\n\r\n readHexInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_16 = i64_new(16, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 16 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n // value = value * 16 + 10 + c - CharCode.A;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.A, 0)\r\n );\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n // value = value * 16 + 10 + c - CharCode.a;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.a, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readDecimalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_10 = i64_new(10, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 10 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_10),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readOctalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_8 = i64_new(8, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._7) {\r\n // value = value * 8 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_8),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Octal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readBinaryInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_2 = i64_new(2, 0);\r\n var i64_1 = i64_new(1, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode._0) {\r\n // value = value * 2;\r\n value = i64_mul(\r\n value,\r\n i64_2\r\n );\r\n } else if (c == CharCode._1) {\r\n // value = value * 2 + 1;\r\n value = i64_add(\r\n i64_mul(value, i64_2),\r\n i64_1\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Binary_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readFloat(): f64 {\r\n // var text = this.source.text;\r\n // if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n // switch (text.charCodeAt(this.pos + 1)) {\r\n // case CharCode.X:\r\n // case CharCode.x: {\r\n // this.pos += 2;\r\n // return this.readHexFloat();\r\n // }\r\n // }\r\n // }\r\n return this.readDecimalFloat();\r\n }\r\n\r\n readDecimalFloat(): f64 {\r\n // TODO: numeric separators (parseFloat can't handle these)\r\n var start = this.pos;\r\n var text = this.source.text;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n if (this.pos < this.end && text.charCodeAt(this.pos) == CharCode.DOT) {\r\n ++this.pos;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n if (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.E || c == CharCode.e) {\r\n if (\r\n ++this.pos < this.end && (\r\n text.charCodeAt(this.pos) == CharCode.MINUS ||\r\n text.charCodeAt(this.pos) == CharCode.PLUS\r\n ) &&\r\n isDecimalDigit(text.charCodeAt(this.pos + 1))\r\n ) {\r\n ++this.pos;\r\n }\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n }\r\n return parseFloat(text.substring(start, this.pos));\r\n }\r\n\r\n readHexFloat(): f64 {\r\n throw new Error(\"not implemented\"); // TBD\r\n }\r\n\r\n readUnicodeEscape(): string {\r\n var remain = 4;\r\n var value = 0;\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos++);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n value = value * 16 + c - CharCode._0;\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n value = value * 16 + 10 + c - CharCode.A;\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n value = value * 16 + 10 + c - CharCode.a;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(this.pos - 1, this.pos)\r\n );\r\n return \"\";\r\n }\r\n if (--remain == 0) break;\r\n }\r\n if (remain) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.pos)\r\n );\r\n return \"\";\r\n }\r\n return String.fromCharCode(value);\r\n }\r\n\r\n private readExtendedUnicodeEscape(): string {\r\n var start = this.pos;\r\n var value = this.readHexInteger();\r\n var value32 = i64_low(value);\r\n var invalid = false;\r\n\r\n assert(!i64_high(value));\r\n if (value32 > 0x10FFFF) {\r\n this.error(\r\n DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n var text = this.source.text;\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(start, this.end)\r\n );\r\n invalid = true;\r\n } else if (text.charCodeAt(this.pos) == CharCode.CLOSEBRACE) {\r\n ++this.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unterminated_Unicode_escape_sequence,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n if (invalid) return \"\";\r\n return value32 < 65536\r\n ? String.fromCharCode(value32)\r\n : String.fromCharCode(\r\n (((value32 - 65536) / 1024 | 0) + 0xD800) as i32,\r\n ( (value32 - 65536) % 1024 + 0xDC00) as i32\r\n );\r\n }\r\n\r\n finish(): void {\r\n }\r\n}\r\n\r\n/** Tokenizer state as returned by {@link Tokenizer#mark} and consumed by {@link Tokenizer#reset}. */\r\nexport class State {\r\n /** Current position. */\r\n pos: i32;\r\n /** Current token. */\r\n token: Token;\r\n /** Current token's position. */\r\n tokenPos: i32;\r\n}\r\n\r\n// Reusable state object to reduce allocations\r\nvar reusableState: State | null = null;\r\n","/**\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","/**\n * Generated from diagnosticsMessages.json. Do not edit.\n * @module diagnostics\n *//***/\n\n/* tslint:disable:max-line-length */\n\n/** Enum of available diagnostic codes. */\nexport enum DiagnosticCode {\n Operation_not_supported = 100,\n Operation_is_unsafe = 101,\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\n Type_0_cannot_be_changed_to_type_1 = 202,\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\n Basic_type_0_cannot_be_nullable = 204,\n Cannot_export_a_mutable_global = 205,\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\n Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa = 207,\n Unmanaged_classes_cannot_implement_interfaces = 208,\n Invalid_regular_expression_flags = 209,\n Implementation_0_must_match_the_signature_1 = 210,\n Class_0_is_sealed_and_cannot_be_extended = 211,\n Decorator_0_is_not_valid_here = 212,\n Duplicate_decorator = 213,\n An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf = 214,\n Optional_parameter_must_have_an_initializer = 215,\n Constructor_of_class_0_must_not_require_any_arguments = 216,\n Function_0_cannot_be_inlined_into_itself = 217,\n Unterminated_string_literal = 1002,\n Identifier_expected = 1003,\n _0_expected = 1005,\n A_file_cannot_have_a_reference_to_itself = 1006,\n Trailing_comma_not_allowed = 1009,\n Unexpected_token = 1012,\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\n Parameter_cannot_have_question_mark_and_initializer = 1015,\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\n Enum_member_must_have_initializer = 1061,\n Statements_are_not_allowed_in_ambient_contexts = 1036,\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\n _0_modifier_cannot_be_used_here = 1042,\n A_rest_parameter_cannot_be_optional = 1047,\n A_rest_parameter_cannot_have_an_initializer = 1048,\n A_set_accessor_must_have_exactly_one_parameter = 1049,\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\n A_get_accessor_cannot_have_parameters = 1054,\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\n An_accessor_cannot_have_type_parameters = 1094,\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\n Type_parameter_list_cannot_be_empty = 1098,\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\n Expression_expected = 1109,\n Type_expected = 1110,\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\n Duplicate_label_0 = 1114,\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\n Digit_expected = 1124,\n Hexadecimal_digit_expected = 1125,\n Unexpected_end_of_text = 1126,\n Invalid_character = 1127,\n _case_or_default_expected = 1130,\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\n Type_argument_expected = 1140,\n String_literal_expected = 1141,\n Line_break_not_permitted_here = 1142,\n Declaration_expected = 1146,\n _const_declarations_must_be_initialized = 1155,\n Unterminated_regular_expression_literal = 1161,\n Interface_declaration_cannot_have_implements_clause = 1176,\n Binary_digit_expected = 1177,\n Octal_digit_expected = 1178,\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\n Unterminated_Unicode_escape_sequence = 1199,\n Decorators_are_not_valid_here = 1206,\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\n Method_0_cannot_have_an_implementation_because_it_is_marked_abstract = 1245,\n A_class_may_only_extend_another_class = 1311,\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\n Duplicate_identifier_0 = 2300,\n Cannot_find_name_0 = 2304,\n Module_0_has_no_exported_member_1 = 2305,\n Generic_type_0_requires_1_type_argument_s = 2314,\n Type_0_is_not_generic = 2315,\n Type_0_is_not_assignable_to_type_1 = 2322,\n Index_signature_is_missing_in_type_0 = 2329,\n _this_cannot_be_referenced_in_current_location = 2332,\n _super_can_only_be_referenced_in_a_derived_class = 2335,\n Property_0_does_not_exist_on_type_1 = 2339,\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\n _get_and_set_accessor_must_have_the_same_type = 2380,\n Constructor_implementation_is_missing = 2390,\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\n Multiple_constructor_implementations_are_not_allowed = 2392,\n Duplicate_function_implementation = 2393,\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\n Type_0_has_no_property_1 = 2460,\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\n Index_signature_in_type_0_only_permits_reading = 2542,\n Expected_0_arguments_but_got_1 = 2554,\n Expected_at_least_0_arguments_but_got_1 = 2555,\n Expected_0_type_arguments_but_got_1 = 2558,\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\n Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration = 2673,\n Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration = 2674,\n Namespace_0_has_no_exported_member_1 = 2694,\n File_0_not_found = 6054,\n Numeric_separators_are_not_allowed_here = 6188,\n Multiple_consecutive_numeric_separators_are_not_permitted = 6189\n}\n\n/** Translates a diagnostic code to its respective string. */\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\n switch (code) {\n case 100: return \"Operation not supported.\";\n case 101: return \"Operation is unsafe.\";\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\n case 204: return \"Basic type '{0}' cannot be nullable.\";\n case 205: return \"Cannot export a mutable global.\";\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\n case 207: return \"Unmanaged classes cannot extend managed classes and vice-versa.\";\n case 208: return \"Unmanaged classes cannot implement interfaces.\";\n case 209: return \"Invalid regular expression flags.\";\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\n case 212: return \"Decorator '{0}' is not valid here.\";\n case 213: return \"Duplicate decorator.\";\n case 214: return \"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.\";\n case 215: return \"Optional parameter must have an initializer.\";\n case 216: return \"Constructor of class '{0}' must not require any arguments.\";\n case 217: return \"Function '{0}' cannot be inlined into itself.\";\n case 1002: return \"Unterminated string literal.\";\n case 1003: return \"Identifier expected.\";\n case 1005: return \"'{0}' expected.\";\n case 1006: return \"A file cannot have a reference to itself.\";\n case 1009: return \"Trailing comma not allowed.\";\n case 1012: return \"Unexpected token.\";\n case 1014: return \"A rest parameter must be last in a parameter list.\";\n case 1015: return \"Parameter cannot have question mark and initializer.\";\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\n case 1061: return \"Enum member must have initializer.\";\n case 1036: return \"Statements are not allowed in ambient contexts.\";\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\n case 1042: return \"'{0}' modifier cannot be used here.\";\n case 1047: return \"A rest parameter cannot be optional.\";\n case 1048: return \"A rest parameter cannot have an initializer.\";\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\n case 1054: return \"A 'get' accessor cannot have parameters.\";\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\n case 1094: return \"An accessor cannot have type parameters.\";\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\n case 1098: return \"Type parameter list cannot be empty.\";\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\n case 1108: return \"A 'return' statement can only be used within a function body.\";\n case 1109: return \"Expression expected.\";\n case 1110: return \"Type expected.\";\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\n case 1114: return \"Duplicate label '{0}'.\";\n case 1121: return \"Octal literals are not allowed in strict mode.\";\n case 1124: return \"Digit expected.\";\n case 1125: return \"Hexadecimal digit expected.\";\n case 1126: return \"Unexpected end of text.\";\n case 1127: return \"Invalid character.\";\n case 1130: return \"'case' or 'default' expected.\";\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\n case 1140: return \"Type argument expected.\";\n case 1141: return \"String literal expected.\";\n case 1142: return \"Line break not permitted here.\";\n case 1146: return \"Declaration expected.\";\n case 1155: return \"'const' declarations must be initialized.\";\n case 1161: return \"Unterminated regular expression literal.\";\n case 1176: return \"Interface declaration cannot have 'implements' clause.\";\n case 1177: return \"Binary digit expected.\";\n case 1178: return \"Octal digit expected.\";\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\n case 1199: return \"Unterminated Unicode escape sequence.\";\n case 1206: return \"Decorators are not valid here.\";\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\n case 1245: return \"Method '{0}' cannot have an implementation because it is marked abstract.\";\n case 1311: return \"A class may only extend another class.\";\n case 1317: return \"A parameter property cannot be declared using a rest parameter.\";\n case 2300: return \"Duplicate identifier '{0}'.\";\n case 2304: return \"Cannot find name '{0}'.\";\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\n case 2315: return \"Type '{0}' is not generic.\";\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\n case 2329: return \"Index signature is missing in type '{0}'.\";\n case 2332: return \"'this' cannot be referenced in current location.\";\n case 2335: return \"'super' can only be referenced in a derived class.\";\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\n case 2390: return \"Constructor implementation is missing.\";\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\n case 2392: return \"Multiple constructor implementations are not allowed.\";\n case 2393: return \"Duplicate function implementation.\";\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\n case 2460: return \"Type '{0}' has no property '{1}'.\";\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\n case 2554: return \"Expected {0} arguments, but got {1}.\";\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\n case 2673: return \"Constructor of class '{0}' is private and only accessible within the class declaration.\";\n case 2674: return \"Constructor of class '{0}' is protected and only accessible within the class declaration.\";\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\n case 6054: return \"File '{0}' not found.\";\n case 6188: return \"Numeric separators are not allowed here.\";\n case 6189: return \"Multiple consecutive numeric separators are not permitted.\";\n default: return \"\";\n }\n}\n","/**\r\n * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileAllocate as compileBuiltinAllocate,\r\n compileAbort as compileBuiltinAbort\r\n} from \"./builtins\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module,\r\n MemorySegment,\r\n ExpressionRef,\r\n UnaryOp,\r\n BinaryOp,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionId,\r\n FunctionTypeRef,\r\n GlobalRef,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getFunctionBody,\r\n getGetLocalIndex,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName\r\n} from \"./module\";\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n INNER_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n STATIC_DELIMITER,\r\n GETTER_PREFIX,\r\n SETTER_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Program,\r\n ClassPrototype,\r\n Class,\r\n Element,\r\n ElementKind,\r\n Enum,\r\n Field,\r\n FunctionPrototype,\r\n Function,\r\n FunctionTarget,\r\n Global,\r\n Local,\r\n Namespace,\r\n EnumValue,\r\n Property,\r\n VariableLikeElement,\r\n FlowFlags,\r\n ConstantValueKind,\r\n Flow,\r\n OperatorKind,\r\n DecoratorFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n Resolver\r\n} from \"./resolver\";\r\n\r\nimport {\r\n Token,\r\n operatorTokenToString\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n TypeNode,\r\n Source,\r\n Range,\r\n DecoratorKind,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DoStatement,\r\n EmptyStatement,\r\n EnumDeclaration,\r\n ExportStatement,\r\n ExpressionStatement,\r\n FunctionDeclaration,\r\n ForStatement,\r\n IfStatement,\r\n ImportStatement,\r\n InstanceOfExpression,\r\n InterfaceDeclaration,\r\n NamespaceDeclaration,\r\n ReturnStatement,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n VariableDeclaration,\r\n VariableStatement,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n Expression,\r\n AssertionExpression,\r\n BinaryExpression,\r\n CallExpression,\r\n CommaExpression,\r\n ElementAccessExpression,\r\n FloatLiteralExpression,\r\n FunctionExpression,\r\n IdentifierExpression,\r\n IntegerLiteralExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n NewExpression,\r\n ObjectLiteralExpression,\r\n ParenthesizedExpression,\r\n PropertyAccessExpression,\r\n TernaryExpression,\r\n ArrayLiteralExpression,\r\n StringLiteralExpression,\r\n UnaryPostfixExpression,\r\n UnaryPrefixExpression,\r\n FieldDeclaration,\r\n\r\n nodeIsConstantValue,\r\n isLastStatement,\r\n findDecorator\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n Signature,\r\n\r\n typesToNativeTypes\r\n} from \"./types\";\r\n\r\nimport {\r\n writeI32,\r\n writeI64,\r\n writeF32,\r\n writeF64\r\n} from \"./util\";\r\n\r\n/** Compilation target. */\r\nexport enum Target {\r\n /** WebAssembly with 32-bit pointers. */\r\n WASM32,\r\n /** WebAssembly with 64-bit pointers. Experimental and not supported by any runtime yet. */\r\n WASM64\r\n}\r\n\r\n/** Compiler options. */\r\nexport class Options {\r\n\r\n /** WebAssembly target. Defaults to {@link Target.WASM32}. */\r\n target: Target = Target.WASM32;\r\n /** If true, compiles everything instead of just reachable code. */\r\n noTreeShaking: bool = false;\r\n /** If true, replaces assertions with nops. */\r\n noAssert: bool = false;\r\n /** If true, imports the memory provided by the embedder. */\r\n importMemory: bool = false;\r\n /** If true, imports the function table provided by the embedder. */\r\n importTable: bool = false;\r\n /** If true, generates information necessary for source maps. */\r\n sourceMap: bool = false;\r\n /** Static memory start offset. */\r\n memoryBase: i32 = 0;\r\n /** Global aliases. */\r\n globalAliases: Map | null = null;\r\n /** Additional features to activate. */\r\n features: Feature = Feature.NONE;\r\n\r\n /** Hinted optimize level. Not applied by the compiler itself. */\r\n optimizeLevelHint: i32 = 0;\r\n /** Hinted shrink level. Not applied by the compiler itself. */\r\n shrinkLevelHint: i32 = 0;\r\n\r\n /** Tests if the target is WASM64 or, otherwise, WASM32. */\r\n get isWasm64(): bool {\r\n return this.target == Target.WASM64;\r\n }\r\n\r\n /** Gets the unsigned size type matching the target. */\r\n get usizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.usize64 : Type.usize32;\r\n }\r\n\r\n /** Gets the signed size type matching the target. */\r\n get isizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.isize64 : Type.isize32;\r\n }\r\n\r\n /** Gets the native size type matching the target. */\r\n get nativeSizeType(): NativeType {\r\n return this.target == Target.WASM64 ? NativeType.I64 : NativeType.I32;\r\n }\r\n\r\n /** Tests if a specific feature is activated. */\r\n hasFeature(feature: Feature): bool {\r\n return (this.features & feature) != 0;\r\n }\r\n}\r\n\r\n/** Indicates specific features to activate. */\r\nexport const enum Feature {\r\n /** No additional features. */\r\n NONE = 0,\r\n /** Sign extension operations. */\r\n SIGN_EXTENSION = 1 << 0, // see: https://github.com/WebAssembly/sign-extension-ops\r\n /** Mutable global imports and exports. */\r\n MUTABLE_GLOBAL = 1 << 1 // see: https://github.com/WebAssembly/mutable-global\r\n}\r\n\r\n/** Indicates the desired kind of a conversion. */\r\nexport const enum ConversionKind {\r\n /** No conversion. */\r\n NONE,\r\n /** Implicit conversion. */\r\n IMPLICIT,\r\n /** Explicit conversion. */\r\n EXPLICIT\r\n}\r\n\r\n/** Indicates the desired wrap mode of a conversion. */\r\nexport const enum WrapMode {\r\n /** No wrapping. */\r\n NONE,\r\n /** Wrap small integer values. */\r\n WRAP\r\n}\r\n\r\n/** Compiler interface. */\r\nexport class Compiler extends DiagnosticEmitter {\r\n\r\n /** Program reference. */\r\n program: Program;\r\n /** Resolver reference. */\r\n resolver: Resolver;\r\n /** Provided options. */\r\n options: Options;\r\n /** Module instance being compiled. */\r\n module: Module;\r\n /** Current function in compilation. */\r\n currentFunction: Function;\r\n /** Current outer function in compilation, if compiling a function expression. */\r\n currentOuterFunction: Function | null = null;\r\n /** Current 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\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n this.resolver = program.resolver;\r\n if (!options) options = new Options();\r\n this.options = options;\r\n this.memoryOffset = i64_new(\r\n // leave space for `null`. also functions as a sentinel for erroneous stores at offset 0.\r\n // note that Binaryen's asm.js output utilizes the first 8 bytes for reinterpretations (#1547)\r\n max(options.memoryBase, 8)\r\n );\r\n this.module = Module.create();\r\n }\r\n\r\n /** Performs compilation of the underlying {@link Program} to a {@link Module}. */\r\n compile(): Module {\r\n var options = this.options;\r\n var module = this.module;\r\n var program = this.program;\r\n\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n program.initialize(options);\r\n\r\n // set up the start function\r\n var startFunctionInstance = new Function(program.startFunction, \"start\", new Signature([], Type.void));\r\n this.startFunctionInstance = startFunctionInstance;\r\n var startFunctionBody = new Array();\r\n this.startFunctionBody = startFunctionBody;\r\n this.currentFunction = startFunctionInstance;\r\n\r\n // compile entry file(s) while traversing reachable elements\r\n var sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].isEntry) this.compileSource(sources[i]);\r\n }\r\n\r\n // compile the start function if not empty or called by main\r\n if (startFunctionBody.length || program.mainFunction !== null) {\r\n let signature = startFunctionInstance.signature;\r\n let funcRef = module.addFunction(\r\n startFunctionInstance.internalName,\r\n this.ensureFunctionType(\r\n signature.parameterTypes,\r\n signature.returnType,\r\n signature.thisType\r\n ),\r\n typesToNativeTypes(startFunctionInstance.additionalLocals),\r\n module.createBlock(null, startFunctionBody)\r\n );\r\n startFunctionInstance.finalize(module, funcRef);\r\n if (!program.mainFunction) module.setStart(funcRef);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n var memoryOffset = this.memoryOffset;\r\n memoryOffset = i64_align(memoryOffset, options.usizeType.byteSize);\r\n this.memoryOffset = memoryOffset;\r\n if (options.isWasm64) {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I64,\r\n false,\r\n module.createI64(i64_low(memoryOffset), i64_high(memoryOffset))\r\n );\r\n } else {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I32,\r\n false,\r\n module.createI32(i64_low(memoryOffset))\r\n );\r\n }\r\n\r\n // determine initial page size\r\n var numPages = this.memorySegments.length\r\n ? i64_low(i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0)))\r\n : 0;\r\n module.setMemory(\r\n numPages,\r\n this.options.isWasm64\r\n ? Module.MAX_MEMORY_WASM64\r\n : Module.MAX_MEMORY_WASM32,\r\n this.memorySegments,\r\n options.target,\r\n \"memory\"\r\n );\r\n\r\n // import memory if requested (default memory is named '0' by Binaryen)\r\n if (options.importMemory) module.addMemoryImport(\"0\", \"env\", \"memory\");\r\n\r\n // set up function table\r\n var functionTable = this.functionTable;\r\n var functionTableSize = functionTable.length;\r\n var functionTableExported = false;\r\n if (functionTableSize) {\r\n let entries = new Array(functionTableSize);\r\n for (let i = 0; i < functionTableSize; ++i) {\r\n entries[i] = functionTable[i].ref;\r\n }\r\n module.setFunctionTable(entries);\r\n module.addTableExport(\"0\", \"table\");\r\n functionTableExported = true;\r\n }\r\n\r\n // import table if requested (default table is named '0' by Binaryen)\r\n if (options.importTable) {\r\n module.addTableImport(\"0\", \"env\", \"table\");\r\n if (!functionTableExported) module.addTableExport(\"0\", \"table\");\r\n }\r\n\r\n return module;\r\n }\r\n\r\n // sources\r\n\r\n /** Compiles a source by looking it up by path first. */\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var source = this.program.lookupSourceByPath(normalizedPathWithoutExtension);\r\n if (source) this.compileSource(source);\r\n else {\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n }\r\n\r\n /** Compiles a source. */\r\n compileSource(source: Source): void {\r\n if (source.is(CommonFlags.COMPILED)) return;\r\n source.set(CommonFlags.COMPILED);\r\n\r\n // compile top-level statements\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var startFunctionInstance = this.startFunctionInstance;\r\n var startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let statement = statements[i];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileClassDeclaration(statement, [], null);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: break;\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileEnumDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(statement, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileNamespaceDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: { // global, always compiled as initializers might have side effects\r\n let variableInit = this.compileVariableStatement(statement);\r\n if (variableInit) startFunctionBody.push(variableInit);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n if ((statement).normalizedPath != null) {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n }\r\n if (noTreeShaking || isEntry) {\r\n this.compileExportStatement(statement);\r\n }\r\n break;\r\n }\r\n default: { // otherwise a top-level statement that is part of the start function's body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = startFunctionInstance;\r\n startFunctionBody.push(this.compileStatement(statement));\r\n this.currentFunction = previousFunction;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // globals\r\n\r\n compileGlobalDeclaration(declaration: VariableDeclaration): Global | null {\r\n // look up the initialized program element\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.GLOBAL);\r\n if (!this.compileGlobal(element)) return null; // reports\r\n return element;\r\n }\r\n\r\n compileGlobal(global: Global): bool {\r\n if (global.is(CommonFlags.COMPILED)) return true;\r\n global.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n var declaration = global.declaration;\r\n var initExpr: ExpressionRef = 0;\r\n\r\n if (global.type == Type.void) { // type is void if not yet resolved or not annotated\r\n if (declaration) {\r\n\r\n // resolve now if annotated\r\n if (declaration.type) {\r\n let resolvedType = this.resolver.resolveType(declaration.type); // reports\r\n if (!resolvedType) return false;\r\n if (resolvedType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.type.range\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n\r\n // infer from initializer if not annotated\r\n } else if (declaration.initializer) { // infer type using void/NONE for literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.WRAP\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.initializer.range, this.currentType.toString(), \"\"\r\n );\r\n return false;\r\n }\r\n global.type = this.currentType;\r\n\r\n // must either be annotated or have an initializer\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n return false;\r\n }\r\n } else {\r\n assert(false); // must have a declaration if 'void' (and thus resolved later on)\r\n }\r\n }\r\n\r\n // ambient builtins like 'HEAP_BASE' need to be resolved but are added explicitly\r\n if (global.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) return true;\r\n\r\n var nativeType = global.type.toNativeType();\r\n var isConstant = global.isAny(CommonFlags.CONST) || global.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n\r\n // handle imports\r\n if (global.is(CommonFlags.AMBIENT)) {\r\n\r\n // constant global\r\n if (isConstant || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n global.set(CommonFlags.MODULE_IMPORT);\r\n if (declaration) {\r\n mangleImportName(global, declaration, global.parent);\r\n } else {\r\n mangleImportName_moduleName = \"env\";\r\n mangleImportName_elementName = global.simpleName;\r\n }\r\n module.addGlobalImport(\r\n global.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n nativeType\r\n );\r\n global.set(CommonFlags.COMPILED);\r\n return true;\r\n\r\n // importing mutable globals is not supported in the MVP\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n assert(declaration).range\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n // the MVP does not yet support initializer expressions other than constant values (and\r\n // get_globals), hence such initializations must be performed in the start function for now.\r\n var initializeInStart = false;\r\n\r\n // inlined constant can be compiled as-is\r\n if (global.is(CommonFlags.INLINED)) {\r\n initExpr = this.compileInlineConstant(global, global.type, true);\r\n\r\n } else {\r\n\r\n // evaluate initializer if present\r\n if (declaration && declaration.initializer) {\r\n if (!initExpr) {\r\n initExpr = this.compileExpression(\r\n declaration.initializer,\r\n global.type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n }\r\n\r\n // check if the initializer is constant\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n\r\n // if a constant global, check if the initializer becomes constant after precompute\r\n if (isConstant) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n initializeInStart = true;\r\n }\r\n } else {\r\n initializeInStart = true;\r\n }\r\n }\r\n\r\n // initialize to zero if there's no initializer\r\n } else {\r\n initExpr = global.type.toNativeZero(module);\r\n }\r\n }\r\n\r\n var internalName = global.internalName;\r\n\r\n if (initializeInStart) { // initialize to mutable zero and set the actual value in start\r\n module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(module));\r\n this.startFunctionBody.push(module.createSetGlobal(internalName, initExpr));\r\n\r\n } else { // compile as-is\r\n\r\n if (isConstant) {\r\n let exprType = getExpressionType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(getConstValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return false;\r\n }\r\n }\r\n global.set(CommonFlags.INLINED); // inline the value from now on\r\n if (global.is(CommonFlags.MODULE_EXPORT)) {\r\n module.addGlobal(internalName, nativeType, false, initExpr);\r\n module.addGlobalExport(internalName, mangleExportName(global));\r\n } else if (declaration && declaration.isTopLevel) { // might become re-exported\r\n module.addGlobal(internalName, nativeType, false, initExpr);\r\n }\r\n\r\n } else /* mutable */ {\r\n module.addGlobal(internalName, nativeType, !isConstant, initExpr);\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // enums\r\n\r\n compileEnumDeclaration(declaration: EnumDeclaration): Enum | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(element)) return null;\r\n return element;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(CommonFlags.COMPILED)) return true;\r\n element.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n\r\n if (element.members) {\r\n for (let member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n let initInStart = false;\r\n let val = member;\r\n let valueDeclaration = val.declaration;\r\n val.set(CommonFlags.COMPILED);\r\n if (val.is(CommonFlags.INLINED)) {\r\n if (element.declaration.isTopLevelExport) {\r\n module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n false, // constant\r\n module.createI32(val.constantValue)\r\n );\r\n }\r\n } else {\r\n let initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(\r\n valueDeclaration.value,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n }\r\n } else if (previousValue == null) {\r\n initExpr = module.createI32(0);\r\n } else if (previousValue.is(CommonFlags.INLINED)) {\r\n initExpr = module.createI32(previousValue.constantValue + 1);\r\n } else {\r\n // in TypeScript this errors with TS1061, but actually we can do:\r\n initExpr = module.createBinary(BinaryOp.AddI32,\r\n module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n module.createI32(1)\r\n );\r\n if (element.is(CommonFlags.CONST)) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n if (initInStart) {\r\n module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n true, // mutable\r\n module.createI32(0)\r\n );\r\n this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr));\r\n } else {\r\n module.addGlobal(val.internalName, NativeType.I32, false, initExpr);\r\n if (getExpressionType(initExpr) == NativeType.I32) {\r\n val.constantValue = getConstValueI32(initExpr);\r\n val.set(CommonFlags.INLINED);\r\n } else {\r\n assert(false);\r\n val.constantValue = 0;\r\n }\r\n }\r\n }\r\n previousValue = val;\r\n\r\n // export values if the enum is exported\r\n if (element.is(CommonFlags.MODULE_EXPORT)) {\r\n if (member.is(CommonFlags.INLINED) || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n module.addGlobalExport(member.internalName, mangleExportName(member));\r\n } else if (valueDeclaration) {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n valueDeclaration.range\r\n );\r\n }\r\n }\r\n }\r\n }\r\n this.currentEnum = null;\r\n return true;\r\n }\r\n\r\n // functions\r\n\r\n /** Compiles a top-level function given its declaration. */\r\n compileFunctionDeclaration(\r\n declaration: FunctionDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n null, // no outer scope (is top level)\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n /** Resolves the specified type arguments prior to compiling the resulting function instance. */\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n outerScope: Flow | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!instance) return null;\r\n instance.outerScope = outerScope;\r\n if (!this.compileFunction(instance)) return null; // reports\r\n return instance;\r\n }\r\n\r\n /** Either reuses or creates the function type matching the specified signature. */\r\n private ensureFunctionType(\r\n parameterTypes: Type[] | null,\r\n returnType: Type,\r\n thisType: Type | null = null\r\n ): FunctionTypeRef {\r\n var numParameters = parameterTypes ? parameterTypes.length : 0;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n if (parameterTypes) {\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = parameterTypes[i].toNativeType();\r\n }\r\n }\r\n var resultType = returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n let name = Signature.makeSignatureString(parameterTypes, returnType, thisType);\r\n typeRef = module.addFunctionType(name, resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n assert(!instance.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN));\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n // check that modifiers are matching\r\n var declaration = instance.prototype.declaration;\r\n var body = declaration.body;\r\n if (body) {\r\n if (instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n if (!instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n declaration.name.range\r\n );\r\n }\r\n }\r\n\r\n var ref: FunctionRef;\r\n var signature = instance.signature;\r\n var typeRef = this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n if (body) {\r\n let isConstructor = instance.is(CommonFlags.CONSTRUCTOR);\r\n let returnType = instance.signature.returnType;\r\n\r\n // compile body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n let flow = instance.flow;\r\n let stmt: ExpressionRef;\r\n if (body.kind == NodeKind.EXPRESSION) { // () => expression\r\n assert(!instance.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.GET | CommonFlags.SET | CommonFlags.MAIN));\r\n assert(instance.is(CommonFlags.ARROW));\r\n stmt = this.compileExpression(\r\n (body).expression,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n flow.set(FlowFlags.RETURNS);\r\n if (!flow.canOverflow(stmt, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n flow.finalize();\r\n } else {\r\n assert(body.kind == NodeKind.BLOCK);\r\n let stmts = this.compileStatements((body).statements);\r\n if (instance.is(CommonFlags.MAIN)) {\r\n module.addGlobal(\"~started\", NativeType.I32, true, module.createI32(0));\r\n stmts.unshift(\r\n module.createIf(\r\n module.createUnary(\r\n UnaryOp.EqzI32,\r\n module.createGetGlobal(\"~started\", NativeType.I32)\r\n ),\r\n module.createBlock(null, [\r\n module.createCall(\"start\", null, NativeType.None),\r\n module.createSetGlobal(\"~started\", module.createI32(1))\r\n ])\r\n )\r\n );\r\n }\r\n flow.finalize();\r\n if (isConstructor) {\r\n let nativeSizeType = this.options.nativeSizeType;\r\n assert(instance.is(CommonFlags.INSTANCE));\r\n\r\n // implicitly return `this` if the constructor doesn't always return on its own\r\n if (!flow.is(FlowFlags.RETURNS)) {\r\n\r\n // if all branches are guaranteed to allocate, skip the final conditional allocation\r\n if (flow.is(FlowFlags.ALLOCATES)) {\r\n stmts.push(module.createGetLocal(0, nativeSizeType));\r\n\r\n // if not all branches are guaranteed to allocate, also append a conditional allocation\r\n } else {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n stmts.push(module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, declaration.name)\r\n ));\r\n }\r\n }\r\n\r\n // make sure all branches return\r\n } else if (returnType != Type.void && !flow.is(FlowFlags.RETURNS)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n }\r\n stmt = !stmts.length\r\n ? module.createNop()\r\n : stmts.length == 1\r\n ? stmts[0]\r\n : module.createBlock(null, stmts, returnType.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n\r\n // create the function\r\n ref = module.addFunction(\r\n instance.internalName,\r\n typeRef,\r\n typesToNativeTypes(instance.additionalLocals),\r\n stmt\r\n );\r\n\r\n // concrete functions cannot have an annotated external name\r\n if (instance.hasDecorator(DecoratorFlags.EXTERNAL)) {\r\n let decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n }\r\n\r\n } else {\r\n instance.set(CommonFlags.MODULE_IMPORT);\r\n mangleImportName(instance, declaration, instance.prototype.parent); // TODO: check for duplicates\r\n\r\n // create the function import\r\n ref = module.addFunctionImport(\r\n instance.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n typeRef\r\n );\r\n }\r\n\r\n // check module-level export\r\n if (instance.is(CommonFlags.MODULE_EXPORT)) {\r\n if (signature.requiredParameters < signature.parameterTypes.length) {\r\n // export the trampoline if the function takes optional parameters\r\n instance = this.ensureTrampoline(instance);\r\n this.ensureArgcSet();\r\n }\r\n module.addFunctionExport(instance.internalName, mangleExportName(instance));\r\n }\r\n\r\n instance.finalize(module, ref);\r\n return true;\r\n }\r\n\r\n // namespaces\r\n\r\n compileNamespaceDeclaration(declaration: NamespaceDeclaration): void {\r\n var members = declaration.members;\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n switch (member.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n let variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n compileNamespace(ns: Namespace): void {\r\n if (!ns.members) return;\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let element of ns.members.values()) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking || (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var module = this.module;\r\n var fileLevelExports = this.program.fileLevelExports;\r\n var members = statement.members;\r\n if (!members) return; // filespace\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n let internalExportName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n member.externalName.text\r\n );\r\n let element = fileLevelExports.get(internalExportName);\r\n if (!element) continue; // reported in Program#initialize\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (!(element).is(CommonFlags.GENERIC)) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n let functionInstance = this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n if (functionInstance) {\r\n let functionDeclaration = functionInstance.prototype.declaration;\r\n if (functionDeclaration && functionDeclaration.needsExplicitExport(member)) {\r\n module.addFunctionExport(functionInstance.internalName, member.externalName.text);\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (this.compileGlobal(element) && statement.range.source.isEntry) {\r\n let globalDeclaration = (element).declaration;\r\n if (globalDeclaration && globalDeclaration.needsExplicitExport(member)) {\r\n if ((element).is(CommonFlags.INLINED)) {\r\n module.addGlobalExport(element.internalName, member.externalName.text);\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n member.range\r\n );\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // classes\r\n\r\n compileClassDeclaration(\r\n declaration: ClassDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): void {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.compileClassUsingTypeArguments(\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n declaration\r\n );\r\n }\r\n\r\n compileClassUsingTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var instance = this.resolver.resolveClassInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode || prototype.declaration\r\n );\r\n if (!instance) return;\r\n this.compileClass(instance);\r\n }\r\n\r\n compileClass(instance: Class): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n var staticMembers = instance.prototype.members;\r\n if (staticMembers) {\r\n for (let element of staticMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [], null, null,\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], null, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], null, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n var ctorInstance = instance.constructorInstance;\r\n if (ctorInstance) this.compileFunction(ctorInstance);\r\n var instanceMembers = instance.members;\r\n if (instanceMembers) {\r\n for (let element of instanceMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n instance.contextualTypeArguments,\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n element.set(CommonFlags.COMPILED);\r\n if (!instance.is(CommonFlags.MODULE_EXPORT) || element.is(CommonFlags.PRIVATE)) break;\r\n let module = this.module;\r\n let name = (element).simpleName;\r\n let type = (element).type;\r\n let nativeType = type.toNativeType();\r\n let offset = (element).memoryOffset;\r\n let usizeType = this.options.usizeType;\r\n let nativeSizeType = this.options.nativeSizeType;\r\n\r\n // export an implicit getter: get:fieldName(this: usize) -> fieldType\r\n let getterName = mangleExportName(element, GETTER_PREFIX + name);\r\n module.addFunction(\r\n getterName,\r\n this.ensureFunctionType(null, type, usizeType),\r\n null,\r\n module.createLoad(\r\n type.byteSize,\r\n type.is(TypeFlags.SIGNED),\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(getterName, getterName);\r\n\r\n // export an implicit setter: set:fieldName(this: usize, value: fieldType) -> void\r\n if (element.is(CommonFlags.READONLY)) break;\r\n let setterName = mangleExportName(element, SETTER_PREFIX + name);\r\n module.addFunction(\r\n setterName,\r\n this.ensureFunctionType([ type ], Type.void, usizeType),\r\n null,\r\n module.createStore(\r\n type.byteSize,\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createGetLocal(1, nativeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(setterName, setterName);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], instance.contextualTypeArguments, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], instance.contextualTypeArguments, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n compileInterfaceDeclaration(\r\n declaration: InterfaceDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n // TODO\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n }\r\n\r\n // memory\r\n\r\n /** Adds a static memory segment with the specified data. */\r\n addMemorySegment(buffer: Uint8Array, alignment: i32 = 8): MemorySegment {\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n }\r\n\r\n // function table\r\n\r\n /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(CommonFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var functionTable = this.functionTable;\r\n var index = functionTable.length;\r\n if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) {\r\n // insert the trampoline if the function has optional parameters\r\n func = this.ensureTrampoline(func);\r\n }\r\n functionTable.push(func);\r\n func.functionTableIndex = index;\r\n return index;\r\n }\r\n\r\n // statements\r\n\r\n compileStatement(statement: Statement): ExpressionRef {\r\n var module = this.module;\r\n var stmt: ExpressionRef;\r\n switch (statement.kind) {\r\n case NodeKind.BLOCK: {\r\n stmt = this.compileBlockStatement(statement);\r\n break;\r\n }\r\n case NodeKind.BREAK: {\r\n stmt = this.compileBreakStatement(statement);\r\n break;\r\n }\r\n case NodeKind.CONTINUE: {\r\n stmt = this.compileContinueStatement(statement);\r\n break;\r\n }\r\n case NodeKind.DO: {\r\n stmt = this.compileDoStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EMPTY: {\r\n stmt = this.compileEmptyStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EXPRESSION: {\r\n stmt = this.compileExpressionStatement(statement);\r\n break;\r\n }\r\n case NodeKind.FOR: {\r\n stmt = this.compileForStatement(statement);\r\n break;\r\n }\r\n case NodeKind.IF: {\r\n stmt = this.compileIfStatement(statement);\r\n break;\r\n }\r\n case NodeKind.RETURN: {\r\n stmt = this.compileReturnStatement(statement);\r\n break;\r\n }\r\n case NodeKind.SWITCH: {\r\n stmt = this.compileSwitchStatement(statement);\r\n break;\r\n }\r\n case NodeKind.THROW: {\r\n stmt = this.compileThrowStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TRY: {\r\n stmt = this.compileTryStatement(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n stmt = this.compileVariableStatement(statement);\r\n if (!stmt) stmt = module.createNop();\r\n break;\r\n }\r\n case NodeKind.VOID: {\r\n stmt = this.compileVoidStatement(statement);\r\n break;\r\n }\r\n case NodeKind.WHILE: {\r\n stmt = this.compileWhileStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // type declarations must be top-level because function bodies are evaluated when\r\n // reachaable only.\r\n if (this.currentFunction == this.startFunctionInstance) {\r\n return module.createNop();\r\n }\r\n // otherwise fall-through\r\n }\r\n default: {\r\n assert(false);\r\n stmt = module.createUnreachable();\r\n }\r\n }\r\n if (this.options.sourceMap) this.addDebugLocation(stmt, statement.range);\r\n return stmt;\r\n }\r\n\r\n compileStatements(statements: Statement[]): ExpressionRef[] {\r\n var numStatements = statements.length;\r\n var stmts = new Array(numStatements);\r\n stmts.length = 0;\r\n var flow = this.currentFunction.flow;\r\n for (let i = 0; i < numStatements; ++i) {\r\n let stmt = this.compileStatement(statements[i]);\r\n switch (getExpressionId(stmt)) {\r\n case ExpressionId.Block: {\r\n if (!getBlockName(stmt)) {\r\n for (let j = 0, k = getBlockChildCount(stmt); j < k; ++j) stmts.push(getBlockChild(stmt, j));\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: stmts.push(stmt);\r\n case ExpressionId.Nop:\r\n }\r\n if (flow.isAny(FlowFlags.ANY_TERMINATING)) break;\r\n }\r\n return stmts;\r\n }\r\n\r\n compileBlockStatement(statement: BlockStatement): ExpressionRef {\r\n var statements = statement.statements;\r\n var parentFlow = this.currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n this.currentFunction.flow = flow;\r\n\r\n var stmts = this.compileStatements(statements);\r\n var stmt = stmts.length == 0\r\n ? this.module.createNop()\r\n : stmts.length == 1\r\n ? stmts[0]\r\n : this.module.createBlock(null, stmts,getExpressionType(stmts[stmts.length - 1]));\r\n\r\n this.currentFunction.flow = flow.free();\r\n parentFlow.inherit(flow);\r\n return stmt;\r\n }\r\n\r\n compileBreakStatement(statement: BreakStatement): ExpressionRef {\r\n var module = this.module;\r\n if (statement.label) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.label.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n var flow = this.currentFunction.flow;\r\n var breakLabel = flow.breakLabel;\r\n if (breakLabel == null) {\r\n this.error(\r\n DiagnosticCode.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement,\r\n statement.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n flow.set(FlowFlags.BREAKS);\r\n return module.createBreak(breakLabel);\r\n }\r\n\r\n compileContinueStatement(statement: ContinueStatement): ExpressionRef {\r\n var module = this.module;\r\n var label = statement.label;\r\n if (label) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n label.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // Check if 'continue' is allowed here\r\n var flow = this.currentFunction.flow;\r\n var continueLabel = flow.continueLabel;\r\n if (continueLabel == null) {\r\n this.error(\r\n DiagnosticCode.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement,\r\n statement.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n flow.set(FlowFlags.CONTINUES);\r\n return module.createBreak(continueLabel);\r\n }\r\n\r\n compileDoStatement(statement: DoStatement): ExpressionRef {\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n\r\n var label = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n var breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE, WrapMode.NONE),\r\n this.currentType\r\n );\r\n // TODO: check if condition is always false and if so, omit it (just a block)\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n var terminated = flow.isAny(FlowFlags.ANY_TERMINATING);\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n parentFlow.inherit(flow);\r\n\r\n return module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n terminated\r\n ? body // skip trailing continue if unnecessary\r\n : module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel, condExpr)\r\n ], NativeType.None)\r\n )\r\n ], terminated ? NativeType.Unreachable : NativeType.None);\r\n }\r\n\r\n compileEmptyStatement(statement: EmptyStatement): ExpressionRef {\r\n return this.module.createNop();\r\n }\r\n\r\n compileExpressionStatement(statement: ExpressionStatement): ExpressionRef {\r\n var expr = this.compileExpression(statement.expression, Type.void, ConversionKind.NONE, WrapMode.NONE);\r\n if (this.currentType != Type.void) {\r\n expr = this.module.createDrop(expr);\r\n this.currentType = Type.void;\r\n }\r\n return expr;\r\n }\r\n\r\n compileForStatement(statement: ForStatement): ExpressionRef {\r\n // A for statement initiates a new branch with its own scoped variables\r\n // possibly declared in its initializer, and break context.\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n var breakLabel = flow.breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n var repeatLabel = \"repeat|\" + label;\r\n\r\n // Compile in correct order\r\n var module = this.module;\r\n var initExpr = statement.initializer\r\n ? this.compileStatement(statement.initializer)\r\n : 0;\r\n var condExpr: ExpressionRef = 0;\r\n var alwaysTrue = false;\r\n if (statement.condition) {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n // check if the condition is always true\r\n let condPre = this.precomputeExpressionRef(condExpr);\r\n if (getExpressionId(condPre) == ExpressionId.Const) {\r\n assert(getExpressionType(condPre) == NativeType.I32);\r\n if (getConstValueI32(condPre) != 0) alwaysTrue = true;\r\n // TODO: could skip compilation if the condition is always false here, but beware that the\r\n // initializer could still declare new 'var's that are used later on.\r\n }\r\n // recompile to original\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n } else {\r\n // omitted condition is always true\r\n condExpr = module.createI32(1);\r\n alwaysTrue = true;\r\n }\r\n var incrExpr = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : 0;\r\n var bodyExpr = this.compileStatement(statement.statement);\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n var usesContinue = flow.isAny(FlowFlags.CONTINUES | FlowFlags.CONDITIONALLY_CONTINUES);\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n var terminated = alwaysTrue && flow.isAny(FlowFlags.ANY_TERMINATING);\r\n if (alwaysTrue) parentFlow.inherit(flow);\r\n else parentFlow.inheritConditional(flow);\r\n\r\n var breakBlock = new Array(); // outer 'break' block\r\n if (initExpr) breakBlock.push(initExpr);\r\n\r\n var repeatBlock = new Array(); // block repeating the loop\r\n if (usesContinue) {\r\n repeatBlock.push(\r\n module.createBlock(continueLabel, [ // inner 'continue' block\r\n module.createBreak(breakLabel, module.createUnary(UnaryOp.EqzI32, condExpr)),\r\n bodyExpr\r\n ], NativeType.None)\r\n );\r\n } else { // can omit the 'continue' block\r\n repeatBlock.push(\r\n module.createBreak(breakLabel, module.createUnary(UnaryOp.EqzI32, condExpr))\r\n );\r\n repeatBlock.push(bodyExpr);\r\n }\r\n if (incrExpr) repeatBlock.push(incrExpr);\r\n repeatBlock.push(\r\n module.createBreak(repeatLabel)\r\n );\r\n\r\n breakBlock.push(\r\n module.createLoop(repeatLabel,\r\n module.createBlock(null, repeatBlock, NativeType.None)\r\n )\r\n );\r\n\r\n return module.createBlock(\r\n breakLabel,\r\n breakBlock,\r\n terminated\r\n ? NativeType.Unreachable\r\n : NativeType.None\r\n );\r\n }\r\n\r\n compileIfStatement(statement: IfStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var ifTrue = statement.ifTrue;\r\n var ifFalse = statement.ifFalse;\r\n\r\n // The condition doesn't initiate a branch yet\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary branches if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileStatement(ifTrue)\r\n : ifFalse\r\n ? this.compileStatement(ifFalse)\r\n : module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Each arm initiates a branch\r\n var parentFlow = currentFunction.flow;\r\n var ifTrueFlow = parentFlow.fork();\r\n currentFunction.flow = ifTrueFlow;\r\n var ifTrueExpr = this.compileStatement(ifTrue);\r\n currentFunction.flow = ifTrueFlow.free();\r\n\r\n var ifFalseExpr: ExpressionRef = 0;\r\n if (ifFalse) {\r\n let ifFalseFlow = parentFlow.fork();\r\n currentFunction.flow = ifFalseFlow;\r\n ifFalseExpr = this.compileStatement(ifFalse);\r\n currentFunction.flow = ifFalseFlow.free();\r\n parentFlow.inheritMutual(ifTrueFlow, ifFalseFlow);\r\n } else {\r\n parentFlow.inheritConditional(ifTrueFlow);\r\n }\r\n return module.createIf(condExpr, ifTrueExpr, ifFalseExpr);\r\n }\r\n\r\n compileReturnStatement(statement: ReturnStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var expr: ExpressionRef = 0;\r\n var flow = currentFunction.flow;\r\n\r\n // Remember that this flow returns\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n if (statement.value) {\r\n let returnType = flow.returnType;\r\n if (returnType == Type.void) {\r\n this.compileExpressionRetainType(statement.value, returnType, WrapMode.NONE);\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n statement.value.range, this.currentType.toString(), returnType.toString()\r\n );\r\n this.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n expr = this.compileExpression(\r\n statement.value,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n currentFunction.is(CommonFlags.MODULE_EXPORT)\r\n ? WrapMode.WRAP\r\n : WrapMode.NONE\r\n );\r\n\r\n // Remember whether returning a properly wrapped value\r\n if (!flow.canOverflow(expr, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n }\r\n\r\n // If the last statement anyway, make it the block's return value\r\n if (isLastStatement(statement)) return expr ? expr : module.createNop();\r\n\r\n // When inlining, break to the end of the inlined function's block (no need to wrap)\r\n return flow.is(FlowFlags.INLINE_CONTEXT)\r\n ? module.createBreak(assert(flow.returnLabel), 0, expr)\r\n : module.createReturn(expr);\r\n }\r\n\r\n compileSwitchStatement(statement: SwitchStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n var cases = statement.cases;\r\n var numCases = cases.length;\r\n if (!numCases) {\r\n return this.compileExpression(statement.condition, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n\r\n // Everything within a switch uses the same break context\r\n var context = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n\r\n // introduce a local for evaluating the condition (exactly once)\r\n var tempLocal = currentFunction.getTempLocal(Type.u32, false);\r\n var tempLocalIndex = tempLocal.index;\r\n\r\n // Prepend initializer to inner block. Does not initiate a new branch, yet.\r\n var breaks = new Array(1 + numCases);\r\n breaks[0] = module.createSetLocal( // initializer\r\n tempLocalIndex,\r\n this.compileExpression(statement.condition, Type.u32, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n );\r\n\r\n // make one br_if per (possibly dynamic) labeled case (binaryen optimizes to br_table where possible)\r\n var breakIndex = 1;\r\n var defaultIndex = -1;\r\n for (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let label = case_.label;\r\n if (label) {\r\n breaks[breakIndex++] = module.createBreak(\"case\" + i.toString(10) + \"|\" + context,\r\n module.createBinary(BinaryOp.EqI32,\r\n module.createGetLocal(tempLocalIndex, NativeType.I32),\r\n this.compileExpression(label, Type.u32, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n )\r\n );\r\n } else {\r\n defaultIndex = i;\r\n }\r\n }\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n\r\n // otherwise br to default respectively out of the switch if there is no default case\r\n breaks[breakIndex] = module.createBreak((defaultIndex >= 0\r\n ? \"case\" + defaultIndex.toString(10)\r\n : \"break\"\r\n ) + \"|\" + context);\r\n\r\n // nest blocks in order\r\n var currentBlock = module.createBlock(\"case0|\" + context, breaks, NativeType.None);\r\n var alwaysReturns = true;\r\n var alwaysReturnsWrapped = true;\r\n var alwaysThrows = true;\r\n var alwaysAllocates = true;\r\n for (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let statements = case_.statements;\r\n let numStatements = statements.length;\r\n\r\n // Each switch case initiates a new branch\r\n let flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n let breakLabel = \"break|\" + context;\r\n flow.breakLabel = breakLabel;\r\n\r\n let isLast = i == numCases - 1;\r\n let nextLabel = isLast ? breakLabel : \"case\" + (i + 1).toString(10) + \"|\" + context;\r\n let stmts = new Array(1 + numStatements);\r\n stmts[0] = currentBlock;\r\n let count = 1;\r\n let terminated = false;\r\n for (let j = 0; j < numStatements; ++j) {\r\n let stmt = this.compileStatement(statements[j]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n stmts[count++] = stmt;\r\n if (flow.isAny(FlowFlags.ANY_TERMINATING)) {\r\n terminated = true;\r\n break;\r\n }\r\n }\r\n }\r\n stmts.length = count;\r\n if (terminated || isLast) {\r\n if (!flow.is(FlowFlags.RETURNS)) alwaysReturns = false;\r\n if (!flow.is(FlowFlags.RETURNS_WRAPPED)) alwaysReturnsWrapped = false;\r\n if (!flow.is(FlowFlags.THROWS)) alwaysThrows = false;\r\n if (!flow.is(FlowFlags.ALLOCATES)) alwaysAllocates = false;\r\n }\r\n\r\n // Switch back to the parent flow\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS\r\n );\r\n currentFunction.flow = flow.free();\r\n currentBlock = module.createBlock(nextLabel, stmts, NativeType.None); // must be a labeled block\r\n }\r\n currentFunction.leaveBreakContext();\r\n\r\n // If the switch has a default (guaranteed to handle any value), propagate common flags\r\n if (defaultIndex >= 0) {\r\n if (alwaysReturns) parentFlow.set(FlowFlags.RETURNS);\r\n if (alwaysReturnsWrapped) parentFlow.set(FlowFlags.RETURNS_WRAPPED);\r\n if (alwaysThrows) parentFlow.set(FlowFlags.THROWS);\r\n if (alwaysAllocates) parentFlow.set(FlowFlags.ALLOCATES);\r\n }\r\n return currentBlock;\r\n }\r\n\r\n compileThrowStatement(statement: ThrowStatement): ExpressionRef {\r\n var flow = this.currentFunction.flow;\r\n\r\n // Remember that this branch throws\r\n flow.set(FlowFlags.THROWS);\r\n\r\n // FIXME: without try-catch it is safe to assume RETURNS as well for now\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n // TODO: requires exception-handling spec.\r\n return compileBuiltinAbort(this, null, statement);\r\n }\r\n\r\n compileTryStatement(statement: TryStatement): ExpressionRef {\r\n // TODO\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n /**\r\n * Compiles a variable statement. Returns `0` if an initializer is not\r\n * necessary.\r\n */\r\n compileVariableStatement(statement: VariableStatement, isKnownGlobal: bool = false): ExpressionRef {\r\n var program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var declarations = statement.declarations;\r\n var numDeclarations = declarations.length;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n currentFunction == this.startFunctionInstance &&\r\n statement.parent && statement.parent.kind == NodeKind.SOURCE\r\n )) {\r\n // NOTE that the above condition also covers top-level variables declared with 'let', even\r\n // though such variables could also become start function locals if, and only if, not used\r\n // within any function declared in the same source, which is unknown at this point. the only\r\n // efficient way to deal with this would be to keep track of all occasions it is used and\r\n // replace these instructions afterwards, dynamically. (TOOD: what about a Binaryen pass?)\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n this.compileGlobalDeclaration(declarations[i]);\r\n }\r\n return 0;\r\n }\r\n\r\n // other variables become locals\r\n var initializers = new Array();\r\n var flow = this.currentFunction.flow;\r\n var resolver = this.resolver;\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n let declaration = declarations[i];\r\n let name = declaration.name.text;\r\n let type: Type | null = null;\r\n let initExpr: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = resolver.resolveType( // reports\r\n declaration.type,\r\n flow.contextualTypeArguments\r\n );\r\n if (!type) continue;\r\n if (declaration.initializer) {\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n } else if (declaration.initializer) { // infer type using void/NONE for proper literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.NONE\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.range, this.currentType.toString(), \"\"\r\n );\r\n continue;\r\n }\r\n type = this.currentType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n continue;\r\n }\r\n let isInlined = false;\r\n if (declaration.is(CommonFlags.CONST)) {\r\n if (initExpr) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) == ExpressionId.Const) {\r\n let local = new Local(program, name, -1, type);\r\n switch (getExpressionType(initExpr)) {\r\n case NativeType.I32: {\r\n local = local.withConstantIntegerValue(\r\n i64_new(\r\n getConstValueI32(initExpr),\r\n 0\r\n )\r\n );\r\n break;\r\n }\r\n case NativeType.I64: {\r\n local = local.withConstantIntegerValue(\r\n i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n )\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n local = local.withConstantFloatValue(getConstValueF32(initExpr));\r\n break;\r\n }\r\n case NativeType.F64: {\r\n local = local.withConstantFloatValue(getConstValueF64(initExpr));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n // Create a virtual local that doesn't actually exist in WebAssembly\r\n let scopedLocals = currentFunction.flow.scopedLocals;\r\n if (!scopedLocals) currentFunction.flow.scopedLocals = scopedLocals = new Map();\r\n else if (scopedLocals.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n scopedLocals.set(name, local);\r\n isInlined = true;\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n declaration.range\r\n );\r\n }\r\n }\r\n if (!isInlined) {\r\n let local: Local;\r\n if (\r\n declaration.isAny(CommonFlags.LET | CommonFlags.CONST) ||\r\n flow.is(FlowFlags.INLINE_CONTEXT)\r\n ) { // here: not top-level\r\n local = flow.addScopedLocal(type, name, false, declaration); // reports\r\n } else {\r\n local = currentFunction.addLocal(type, name, declaration); // reports\r\n }\r\n if (initExpr) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, initExpr));\r\n if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, !flow.canOverflow(initExpr, type));\r\n }\r\n } else if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, true); // zero\r\n }\r\n }\r\n }\r\n return initializers.length // we can unwrap these here because the\r\n ? initializers.length == 1 // source didn't tell us exactly what to do\r\n ? initializers[0]\r\n : this.module.createBlock(null, initializers, NativeType.None)\r\n : 0;\r\n }\r\n\r\n compileVoidStatement(statement: VoidStatement): ExpressionRef {\r\n return this.compileExpression(statement.expression, Type.void, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n compileWhileStatement(statement: WhileStatement): ExpressionRef {\r\n var module = this.module;\r\n\r\n // The condition does not yet initialize a branch\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary loops if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n if (!getConstValueI32(condExprPrecomp)) return module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Statements initiate a new branch with its own break context\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n var breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysTrue = false; // TODO\r\n var alwaysReturns = alwaysTrue && flow.is(FlowFlags.RETURNS);\r\n var terminated = flow.isAny(FlowFlags.ANY_TERMINATING);\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n if (alwaysTrue) parentFlow.inherit(flow);\r\n else parentFlow.inheritConditional(flow);\r\n\r\n var expr = module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n module.createIf(condExpr,\r\n terminated\r\n ? body // skip trailing continue if unnecessary\r\n : module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel)\r\n ], NativeType.None)\r\n )\r\n )\r\n ], alwaysReturns ? NativeType.Unreachable : NativeType.None);\r\n return expr;\r\n }\r\n\r\n // expressions\r\n\r\n /**\r\n * Compiles the value of an inlined constant element.\r\n * @param retainType If true, the annotated type of the constant is retained. Otherwise, the value\r\n * is precomputed according to context.\r\n */\r\n compileInlineConstant(\r\n element: VariableLikeElement,\r\n contextualType: Type,\r\n retainType: bool\r\n ): ExpressionRef {\r\n assert(element.is(CommonFlags.INLINED));\r\n var type = element.type;\r\n switch (\r\n !retainType &&\r\n type.is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n type.size < contextualType.size\r\n ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension\r\n : (this.currentType = type).kind\r\n ) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n let shift = type.computeSmallIntegerShift(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) << shift >> shift\r\n : 0\r\n ); // recognized by canOverflow\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let mask = element.type.computeSmallIntegerMask(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) & mask\r\n : 0\r\n ); // recognized by canOverflow\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n if (!element.program.options.isWasm64) {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return element.constantValueKind == ConstantValueKind.INTEGER\r\n ? this.module.createI64(\r\n i64_low(element.constantIntegerValue),\r\n i64_high(element.constantIntegerValue)\r\n )\r\n : this.module.createI64(0);\r\n }\r\n case TypeKind.F64: {\r\n if (!(element.is(CommonFlags.BUILTIN) && contextualType == Type.f32)) {\r\n return this.module.createF64((element).constantFloatValue);\r\n }\r\n // otherwise fall-through: basically precomputes f32.demote/f64 of NaN / Infinity\r\n this.currentType = Type.f32;\r\n }\r\n case TypeKind.F32: {\r\n return this.module.createF32((element).constantFloatValue);\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n\r\n compileExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n this.currentType = contextualType;\r\n\r\n var expr: ExpressionRef;\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n expr = this.compileAssertionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.BINARY: {\r\n expr = this.compileBinaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.CALL: {\r\n expr = this.compileCallExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.COMMA: {\r\n expr = this.compileCommaExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n expr = this.compileElementAccessExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.FUNCTION: {\r\n expr = this.compileFunctionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.FALSE:\r\n case NodeKind.NULL:\r\n case NodeKind.THIS:\r\n case NodeKind.SUPER:\r\n case NodeKind.TRUE: {\r\n expr = this.compileIdentifierExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.INSTANCEOF: {\r\n expr = this.compileInstanceOfExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.LITERAL: {\r\n expr = this.compileLiteralExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.NEW: {\r\n expr = this.compileNewExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PARENTHESIZED: {\r\n expr = this.compileParenthesizedExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n expr = this.compilePropertyAccessExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.TERNARY: {\r\n expr = this.compileTernaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.UNARYPOSTFIX: {\r\n expr = this.compileUnaryPostfixExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.UNARYPREFIX: {\r\n expr = this.compileUnaryPrefixExpression(expression, contextualType);\r\n break;\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n\r\n var currentType = this.currentType;\r\n if (conversionKind != ConversionKind.NONE && currentType != contextualType) {\r\n expr = this.convertExpression(expr, currentType, contextualType, conversionKind, wrapMode, expression);\r\n this.currentType = contextualType;\r\n } else if (wrapMode == WrapMode.WRAP) {\r\n expr = this.ensureSmallIntegerWrap(expr, currentType);\r\n }\r\n\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(\r\n expression: Expression,\r\n contextualType: Type,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.compileExpression(\r\n expression,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n wrapMode\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.precomputeExpressionRef(\r\n this.compileExpression(expression, contextualType, conversionKind, wrapMode)\r\n );\r\n }\r\n\r\n precomputeExpressionRef(expr: ExpressionRef): ExpressionRef {\r\n var module = this.module;\r\n var type = this.currentType;\r\n var nativeType = type.toNativeType();\r\n var funcRef = module.addTemporaryFunction(nativeType, null, expr);\r\n module.runPasses([ \"precompute\" ], funcRef);\r\n var ret = getFunctionBody(funcRef);\r\n module.removeTemporaryFunction();\r\n return ret;\r\n }\r\n\r\n convertExpression(\r\n expr: ExpressionRef,\r\n fromType: Type,\r\n toType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n assert(conversionKind != ConversionKind.NONE);\r\n var module = this.module;\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.VOID) {\r\n assert(toType.kind != TypeKind.VOID); // convertExpression should not be called with void -> void\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) return module.createDrop(expr);\r\n\r\n if (!fromType.isAssignableTo(toType)) {\r\n if (conversionKind == ConversionKind.IMPLICIT) {\r\n this.error(\r\n DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (fromType.is(TypeFlags.FLOAT)) {\r\n\r\n // float to float\r\n if (toType.is(TypeFlags.FLOAT)) {\r\n if (fromType.kind == TypeKind.F32) {\r\n\r\n // f32 to f64\r\n if (toType.kind == TypeKind.F64) {\r\n expr = module.createUnary(UnaryOp.PromoteF32, expr);\r\n }\r\n\r\n // otherwise f32 to f32\r\n\r\n // f64 to f32\r\n } else if (toType.kind == TypeKind.F32) {\r\n expr = module.createUnary(UnaryOp.DemoteF64, expr);\r\n }\r\n\r\n // otherwise f64 to f64\r\n\r\n // float to int\r\n } else if (toType.is(TypeFlags.INTEGER)) {\r\n\r\n // f32 to int\r\n if (fromType.kind == TypeKind.F32) {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU32, expr);\r\n }\r\n }\r\n\r\n // f64 to int\r\n } else {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU32, expr);\r\n }\r\n }\r\n }\r\n\r\n // float to void\r\n } else {\r\n assert(toType.flags == TypeFlags.NONE, \"void type expected\");\r\n expr = module.createDrop(expr);\r\n }\r\n\r\n // int to float\r\n } else if (fromType.is(TypeFlags.INTEGER) && toType.is(TypeFlags.FLOAT)) {\r\n\r\n // int to f32\r\n if (toType.kind == TypeKind.F32) {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF32\r\n : UnaryOp.ConvertU64ToF32,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF32\r\n : UnaryOp.ConvertU32ToF32,\r\n expr\r\n );\r\n }\r\n\r\n // int to f64\r\n } else {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF64\r\n : UnaryOp.ConvertU64ToF64,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF64\r\n : UnaryOp.ConvertU32ToF64,\r\n expr\r\n );\r\n }\r\n }\r\n\r\n // int to int\r\n } else {\r\n // i64 to ...\r\n if (fromType.is(TypeFlags.LONG)) {\r\n\r\n // i64 to i32 or smaller\r\n if (!toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits\r\n }\r\n\r\n // i32 or smaller to i64\r\n } else if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32,\r\n this.ensureSmallIntegerWrap(expr, fromType) // must clear garbage bits\r\n );\r\n wrapMode = WrapMode.NONE;\r\n\r\n // i32 to i32\r\n } else {\r\n // small i32 to ...\r\n if (fromType.is(TypeFlags.SHORT)) {\r\n // small i32 to larger i32\r\n if (fromType.size < toType.size) {\r\n expr = this.ensureSmallIntegerWrap(expr, fromType); // must clear garbage bits\r\n wrapMode = WrapMode.NONE;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.currentType = toType;\r\n return wrapMode == WrapMode.WRAP\r\n ? this.ensureSmallIntegerWrap(expr, toType)\r\n : expr;\r\n }\r\n\r\n compileAssertionExpression(expression: AssertionExpression, contextualType: Type): ExpressionRef {\r\n var toType = this.resolver.resolveType( // reports\r\n expression.toType,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!toType) return this.module.createUnreachable();\r\n return this.compileExpression(expression.expression, toType, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n private f32ModInstance: Function | null = null;\r\n private f64ModInstance: Function | null = null;\r\n private f32PowInstance: Function | null = null;\r\n private f64PowInstance: Function | null = null;\r\n\r\n compileBinaryExpression(\r\n expression: BinaryExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var left = expression.left;\r\n var right = expression.right;\r\n\r\n var leftExpr: ExpressionRef;\r\n var leftType: Type;\r\n var rightExpr: ExpressionRef;\r\n var rightType: Type;\r\n var commonType: Type | null;\r\n\r\n var expr: ExpressionRef;\r\n var compound = false;\r\n\r\n var operator = expression.operator;\r\n switch (operator) {\r\n case Token.LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.LtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.GtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.LESSTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeI64\r\n : BinaryOp.LeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.LeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeU64\r\n : BinaryOp.LeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeI64\r\n : BinaryOp.GeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.GeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeU64\r\n : BinaryOp.GeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EQUALS_EQUALS: {\r\n\r\n // NOTE that this favors correctness, in terms of emitting a binary expression, over\r\n // checking for a possible use of unary EQZ. while the most classic of all optimizations,\r\n // that's not what the source told us to do. for reference, `!left` emits unary EQZ.\r\n\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (operator == Token.EQUALS_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.EQ);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '==' with references\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.EqI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.EqI64\r\n : BinaryOp.EqI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.EqI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.EqF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.EqF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EXCLAMATION_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (operator == Token.EXCLAMATION_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '!=' with references\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.NeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.NeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.NeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.NeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EQUALS: {\r\n return this.compileAssignment(left, right, contextualType);\r\n }\r\n case Token.PLUS_EQUALS: compound = true;\r\n case Token.PLUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.ADD);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"+\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // addition might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AddI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_EQUALS: compound = true;\r\n case Token.MINUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.SUB);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"-\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // subtraction might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.SubI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MUL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"*\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.MulI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.MulI64\r\n : BinaryOp.MulI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.MulI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.MulF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.MulF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK_ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.POW);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n let instance: Function | null;\r\n\r\n // Mathf.pow if lhs is f32 (result is f32)\r\n if (this.currentType.kind == TypeKind.F32) {\r\n rightExpr = this.compileExpression(right, Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (!(instance = this.f32PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32PowInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n\r\n // Math.pow otherwise (result is f64)\r\n // TODO: should the result be converted back?\r\n } else {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n this.currentType,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(\r\n right,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n rightType = this.currentType;\r\n if (!(instance = this.f64PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64PowInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case Token.SLASH_EQUALS: compound = true;\r\n case Token.SLASH: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.DIV);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"/\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // signed div on signed small integers might overflow, e.g. -128/-1\r\n case TypeKind.I16: // ^\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.DivI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivI64\r\n : BinaryOp.DivI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.DivI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivU64\r\n : BinaryOp.DivU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.DivU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.DivF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.DivF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PERCENT_EQUALS: compound = true;\r\n case Token.PERCENT: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.REM);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"%\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemI64\r\n : BinaryOp.RemI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.RemI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemU64\r\n : BinaryOp.RemU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.RemU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let instance = this.f32ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32ModInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let instance = this.f64ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64ModInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: compound = true;\r\n case Token.LESSTHAN_LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShlI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShlI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShlI64\r\n : BinaryOp.ShlI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // must clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.ShrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrI64\r\n : BinaryOp.ShrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR_U);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // must clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: { // assumes that unsigned shr on unsigned small integers does not overflow\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n }\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.AMPERSAND_EQUALS: compound = true;\r\n case Token.AMPERSAND: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overloadd\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_AND);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"&\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AndI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AndI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AndI64\r\n : BinaryOp.AndI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.BAR_EQUALS: compound = true;\r\n case Token.BAR: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_OR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"|\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.OrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.OrI64\r\n : BinaryOp.OrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.CARET_EQUALS: compound = true;\r\n case Token.CARET: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_XOR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"^\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n\r\n // logical (no overloading)\r\n\r\n case Token.AMPERSAND_AMPERSAND: { // left && right\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = module.cloneExpression(leftExpr, true, 0)) {\r\n this.makeIsTrueish(leftExpr, this.currentType);\r\n expr = module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n rightExpr,\r\n expr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n rightExpr,\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n )\r\n );\r\n }\r\n break;\r\n }\r\n case Token.BAR_BAR: { // left || right\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = this.module.cloneExpression(leftExpr, true, 0)) {\r\n expr = this.module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n expr,\r\n rightExpr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n ),\r\n rightExpr\r\n );\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(left, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n compileUnaryOverload(\r\n operatorInstance: Function,\r\n value: Expression,\r\n valueExpr: ExpressionRef,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n thisArg = valueExpr; // can reuse the previously evaluated expr as the this value here\r\n argumentExpressions = [];\r\n } else {\r\n argumentExpressions = [ value ]; // annotated type might differ -> recompile\r\n }\r\n return this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n compileBinaryOverload(\r\n operatorInstance: Function,\r\n left: Expression,\r\n leftExpr: ExpressionRef,\r\n right: Expression,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(operatorInstance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n thisArg = leftExpr; // can reuse the previously evaluated leftExpr as the this value here\r\n argumentExpressions = [ right ];\r\n } else {\r\n argumentExpressions = [ left, right ]; // annotated type of LHS might differ -> recompile\r\n }\r\n var ret = this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n return ret;\r\n }\r\n\r\n compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef {\r\n var program = this.program;\r\n var resolver = program.resolver;\r\n var currentFunction = this.currentFunction;\r\n var target = resolver.resolveExpression(expression, currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n\r\n // to compile just the value, we need to know the target's type\r\n var targetType: Type;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field compiled as a global\r\n return this.module.createUnreachable();\r\n }\r\n assert((target).type != Type.void); // compileGlobal must guarantee this\r\n // fall-through\r\n }\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n targetType = (target).type;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (target).setterPrototype;\r\n if (setterPrototype) {\r\n let instance = this.resolver.resolveFunction(setterPrototype, null);\r\n if (!instance) return this.module.createUnreachable();\r\n assert(instance.signature.parameterTypes.length == 1); // parser must guarantee this\r\n targetType = instance.signature.parameterTypes[0];\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n if (resolver.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.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return this.compileCallExpressionBuiltin(prototype, expression, contextualType);\r\n }\r\n\r\n let instance: Function | null = null;\r\n\r\n // resolve generic call if type arguments have been provided\r\n if (typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.expression.range, prototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n instance = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n\r\n // infer generic call if type arguments have been omitted\r\n } else if (prototype.is(CommonFlags.GENERIC)) {\r\n let inferredTypes = new Map();\r\n let typeParameters = assert(prototype.declaration.typeParameters);\r\n let numTypeParameters = typeParameters.length;\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n inferredTypes.set(typeParameters[i].name.text, null);\r\n }\r\n // let numInferred = 0;\r\n let parameterTypes = prototype.declaration.signature.parameters;\r\n let numParameterTypes = parameterTypes.length;\r\n let argumentExpressions = expression.arguments;\r\n let numArguments = argumentExpressions.length;\r\n let argumentExprs = new Array(numArguments);\r\n for (let i = 0; i < numParameterTypes; ++i) {\r\n let typeNode = parameterTypes[i].type;\r\n let name = typeNode.kind == NodeKind.TYPE ? (typeNode).name.text : null;\r\n let argumentExpression = i < numArguments\r\n ? argumentExpressions[i]\r\n : prototype.declaration.signature.parameters[i].initializer;\r\n if (!argumentExpression) { // missing initializer -> too few arguments\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n expression.range, numParameterTypes.toString(10), numArguments.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (name !== null && inferredTypes.has(name)) {\r\n let inferredType = inferredTypes.get(name);\r\n if (inferredType) {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, inferredType, WrapMode.NONE);\r\n let commonType: Type | null;\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, true))) {\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, false))) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n parameterTypes[i].type.range, this.currentType.toString(), inferredType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n inferredType = commonType;\r\n } else {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, Type.i32, WrapMode.NONE);\r\n inferredType = this.currentType;\r\n // ++numInferred;\r\n }\r\n inferredTypes.set(name, inferredType);\r\n } else {\r\n let concreteType = this.resolver.resolveType(\r\n parameterTypes[i].type,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!concreteType) return module.createUnreachable();\r\n argumentExprs[i] = this.compileExpression(\r\n argumentExpression,\r\n concreteType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n let resolvedTypeArguments = new Array(numTypeParameters);\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n let inferredType = assert(inferredTypes.get(typeParameters[i].name.text)); // TODO\r\n resolvedTypeArguments[i] = inferredType;\r\n }\r\n instance = this.resolver.resolveFunction(\r\n prototype,\r\n resolvedTypeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n return this.makeCallDirect(instance, argumentExprs);\r\n // TODO: this skips inlining because inlining requires compiling its temporary locals in\r\n // the scope of the inlined flow. might need another mechanism to lock temp. locals early,\r\n // so inlining can be performed in `makeCallDirect` instead?\r\n\r\n // otherwise resolve the non-generic call as usual\r\n } else {\r\n instance = this.resolver.resolveFunction(\r\n prototype,\r\n null,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n }\r\n if (!instance) return this.module.createUnreachable();\r\n\r\n // compile 'this' expression if an instance method\r\n let thisExpr: ExpressionRef = 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n thisExpr = this.compileExpressionRetainType(\r\n assert(this.resolver.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(\"oob\", [\r\n module.createSwitch(names, \"oob\",\r\n // condition is number of provided optional arguments, so subtract required arguments\r\n minArguments\r\n ? module.createBinary(\r\n BinaryOp.SubI32,\r\n module.createGetGlobal(\"~argc\", NativeType.I32),\r\n module.createI32(minArguments)\r\n )\r\n : module.createGetGlobal(\"~argc\", NativeType.I32)\r\n )\r\n ]),\r\n module.createUnreachable()\r\n ]);\r\n for (let i = 0; i < numOptional; ++i, ++operandIndex) {\r\n let type = originalParameterTypes[minArguments + i];\r\n let declaration = originalParameterDeclarations[minArguments + i];\r\n let initializer = declaration.initializer;\r\n let initExpr: ExpressionRef;\r\n if (initializer) {\r\n initExpr = module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n )\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Optional_parameter_must_have_an_initializer,\r\n declaration.range\r\n );\r\n initExpr = module.createUnreachable();\r\n }\r\n body = module.createBlock(names[i + 1], [\r\n body,\r\n initExpr,\r\n ]);\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, type.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n assert(operandIndex == maxOperands);\r\n\r\n var funcRef = module.addFunction(\r\n trampolineName,\r\n this.ensureFunctionType(\r\n trampolineSignature.parameterTypes,\r\n trampolineSignature.returnType,\r\n trampolineSignature.thisType\r\n ),\r\n typesToNativeTypes(trampoline.additionalLocals),\r\n module.createBlock(null, [\r\n body,\r\n module.createCall(\r\n originalName,\r\n forwardedOperands,\r\n commonReturnType.toNativeType()\r\n )\r\n ], commonReturnType.toNativeType())\r\n );\r\n trampoline.finalize(module, funcRef);\r\n return trampoline;\r\n }\r\n\r\n /** Makes sure that the argument count helper global is present and returns its name. */\r\n private ensureArgcVar(): string {\r\n var internalName = \"~argc\";\r\n if (!this.argcVar) {\r\n let module = this.module;\r\n this.argcVar = module.addGlobal(\r\n internalName,\r\n NativeType.I32,\r\n true,\r\n module.createI32(0)\r\n );\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Makes sure that the argument count helper setter is present and returns its name. */\r\n private ensureArgcSet(): string {\r\n var internalName = \"~setargc\";\r\n if (!this.argcSet) {\r\n let module = this.module;\r\n this.argcSet = module.addFunction(internalName,\r\n this.ensureFunctionType([ Type.u32 ], Type.void),\r\n null,\r\n module.createSetGlobal(this.ensureArgcVar(),\r\n module.createGetLocal(0, NativeType.I32)\r\n )\r\n );\r\n module.addFunctionExport(internalName, \"_setargc\");\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Creates a direct call to the specified function. */\r\n makeCallDirect(\r\n instance: Function,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = instance.signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = instance.signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n var module = this.module;\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n var returnType = instance.signature.returnType;\r\n var isCallImport = instance.is(CommonFlags.MODULE_IMPORT);\r\n\r\n // fill up omitted arguments with their initializers, if constant, otherwise with zeroes.\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = instance.signature.parameterTypes;\r\n let parameterNodes = instance.prototype.declaration.signature.parameters;\r\n let allOptionalsAreConstant = true;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n let initializer = parameterNodes[i].initializer;\r\n if (!(initializer !== null && nodeIsConstantValue(initializer.kind))) {\r\n allOptionalsAreConstant = false;\r\n break;\r\n }\r\n }\r\n if (allOptionalsAreConstant) { // inline into the call\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(\r\n this.compileExpression(\r\n parameterNodes[i].initializer,\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n )\r\n );\r\n }\r\n } else { // otherwise fill up with zeroes and call the trampoline\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n if (!isCallImport) {\r\n let original = instance;\r\n instance = this.ensureTrampoline(instance);\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n instance.flow.flags = original.flow.flags;\r\n this.program.instancesLookup.set(instance.internalName, instance); // so canOverflow can find it\r\n let nativeReturnType = returnType.toNativeType();\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), module.createI32(numArguments)),\r\n module.createCall(instance.internalName, operands, nativeReturnType)\r\n ], nativeReturnType);\r\n }\r\n }\r\n }\r\n\r\n // otherwise just call through\r\n this.currentType = returnType;\r\n if (isCallImport) return module.createCallImport(instance.internalName, operands, returnType.toNativeType());\r\n var ret = module.createCall(instance.internalName, operands, returnType.toNativeType());\r\n return ret;\r\n }\r\n\r\n /** Compiles an indirect call using an index argument and a signature. */\r\n compileCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallIndirect(signature, indexArg, operands);\r\n }\r\n\r\n /** Creates an indirect call to the function at `indexArg` in the function table. */\r\n makeCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (signature.thisType) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n\r\n // fill up omitted arguments with zeroes\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n }\r\n\r\n var returnType = signature.returnType;\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), // might still be calling a trampoline\r\n module.createI32(numArguments)\r\n ),\r\n module.createCallIndirect(indexArg, operands, signature.toSignatureString())\r\n ], returnType.toNativeType()); // not necessarily wrapped\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var numExpressions = expressions.length;\r\n var exprs = new Array(numExpressions--);\r\n for (let i = 0; i < numExpressions; ++i) {\r\n exprs[i] = this.compileExpression(\r\n expressions[i],\r\n Type.void, // drop all\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n exprs[numExpressions] = this.compileExpression(\r\n expressions[numExpressions],\r\n contextualType, // except last\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.module.createBlock(null, exprs, this.currentType.toNativeType());\r\n }\r\n\r\n compileElementAccessExpression(expression: ElementAccessExpression, contextualType: Type): ExpressionRef {\r\n var target = this.resolver.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n switch (target.kind) {\r\n case ElementKind.CLASS: {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n let thisArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.compileCallDirect(indexedGet, [\r\n expression.elementExpression\r\n ], expression, thisArg);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var name = declaration.name;\r\n var simpleName = (name.text.length\r\n ? name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var currentFunction = this.currentFunction;\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n currentFunction.internalName + INNER_DELIMITER + simpleName,\r\n declaration,\r\n null,\r\n DecoratorFlags.NONE\r\n );\r\n var flow = currentFunction.flow;\r\n var instance = this.compileFunctionUsingTypeArguments(\r\n prototype,\r\n [],\r\n flow.contextualTypeArguments,\r\n flow,\r\n declaration\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = instance.signature.type; // TODO: get cached type?\r\n // NOTE that, in order to make this work in every case, the function must be represented by a\r\n // value, so we add it and rely on the optimizer to figure out where it can be called directly.\r\n var index = this.ensureFunctionTableEntry(instance); // reports\r\n return index < 0\r\n ? this.module.createUnreachable()\r\n : this.module.createI32(index);\r\n }\r\n\r\n /**\r\n * Compiles an identifier in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compileIdentifierExpression(\r\n expression: IdentifierExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // check special keywords first\r\n switch (expression.kind) {\r\n case NodeKind.NULL: {\r\n let options = this.options;\r\n if (!contextualType.classReference) {\r\n this.currentType = options.usizeType;\r\n }\r\n return options.isWasm64\r\n ? module.createI64(0)\r\n : module.createI32(0);\r\n }\r\n case NodeKind.TRUE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(1);\r\n }\r\n case NodeKind.FALSE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\r\n case NodeKind.THIS: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n this.currentType = scopedThis.type;\r\n return module.createGetLocal(scopedThis.index, scopedThis.type.toNativeType());\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisType = (parent).type;\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n if (!flow.is(FlowFlags.ALLOCATES)) {\r\n flow.set(FlowFlags.ALLOCATES);\r\n // must be conditional because `this` could have been provided by a derived class\r\n this.currentType = thisType;\r\n return module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, expression)\r\n );\r\n }\r\n }\r\n this.currentType = thisType;\r\n return module.createGetLocal(0, thisType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n case NodeKind.SUPER: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n let scopedThisClass = assert(scopedThis.type.classReference);\r\n let base = scopedThisClass.base;\r\n if (base) {\r\n this.currentType = base.type;\r\n return module.createGetLocal(scopedThis.index, base.type.toNativeType());\r\n }\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let base = (parent).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return module.createGetLocal(0, superType.toNativeType());\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var target = this.resolver.resolveIdentifier( // reports\r\n expression,\r\n this.currentEnum || currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n let localType = (target).type;\r\n let localIndex = (target).index;\r\n assert(localIndex >= 0);\r\n this.currentType = localType;\r\n return this.module.createGetLocal(localIndex, localType.toNativeType());\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return this.module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum\r\n if (!target.is(CommonFlags.COMPILED)) {\r\n this.error(\r\n DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,\r\n expression.range\r\n );\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.module.createI32((target).constantValue);\r\n }\r\n return this.module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let instance = this.resolver.resolveFunction(\r\n target,\r\n null,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!(instance && this.compileFunction(instance))) return module.createUnreachable();\r\n let index = this.ensureFunctionTableEntry(instance);\r\n this.currentType = instance.signature.type;\r\n return this.module.createI32(index);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileInstanceOfExpression(\r\n expression: InstanceOfExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n // NOTE that this differs from TypeScript in that the rhs is a type, not an expression. at the\r\n // time of implementation, this seemed more useful because dynamic rhs expressions are not\r\n // possible in AS anyway.\r\n var expr = this.compileExpressionRetainType(expression.expression, this.options.usizeType, WrapMode.NONE);\r\n var type = this.currentType;\r\n var isType = this.resolver.resolveType(expression.isType);\r\n this.currentType = Type.bool;\r\n if (!isType) return module.createUnreachable();\r\n return type.is(TypeFlags.NULLABLE) && !isType.is(TypeFlags.NULLABLE)\r\n ? type.nonNullableType.isAssignableTo(isType)\r\n ? module.createBinary( // not precomputeable\r\n type.is(TypeFlags.LONG)\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n expr,\r\n type.toNativeZero(module)\r\n )\r\n : module.createI32(0)\r\n : module.createI32(type.isAssignableTo(isType, true) ? 1 : 0);\r\n }\r\n\r\n compileLiteralExpression(\r\n expression: LiteralExpression,\r\n contextualType: Type,\r\n implicitNegate: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n switch (expression.literalKind) {\r\n case LiteralKind.ARRAY: {\r\n assert(!implicitNegate);\r\n let classType = contextualType.classReference;\r\n if (\r\n classType &&\r\n classType.prototype == this.program.arrayPrototype\r\n ) {\r\n return this.compileArrayLiteral(\r\n assert(classType.typeArguments)[0],\r\n (expression).elementExpressions,\r\n expression\r\n );\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n case LiteralKind.FLOAT: {\r\n let floatValue = (expression).value;\r\n if (implicitNegate) {\r\n floatValue = -floatValue;\r\n }\r\n if (contextualType == Type.f32) {\r\n return module.createF32(floatValue);\r\n }\r\n this.currentType = Type.f64;\r\n return module.createF64(floatValue);\r\n }\r\n case LiteralKind.INTEGER: {\r\n let intValue = (expression).value;\r\n if (implicitNegate) {\r\n intValue = i64_sub(\r\n i64_new(0),\r\n intValue\r\n );\r\n }\r\n switch (contextualType.kind) {\r\n\r\n // compile to contextualType if matching\r\n\r\n case TypeKind.I8: {\r\n if (i64_is_i8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (i64_is_u8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (i64_is_i16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (i64_is_u16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (i64_is_bool(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.USIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.F32: {\r\n if (i64_is_f32(intValue)) return module.createF32(i64_to_f32(intValue));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n if (i64_is_f64(intValue)) return module.createF64(i64_to_f64(intValue));\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n break; // compiles to best fitting type below, being dropped\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise compile to best fitting native type\r\n\r\n if (i64_is_i32(intValue)) {\r\n this.currentType = Type.i32;\r\n return module.createI32(i64_low(intValue));\r\n } else if (i64_is_u32(intValue)) {\r\n this.currentType = Type.u32;\r\n return module.createI32(i64_low(intValue));\r\n } else {\r\n this.currentType = Type.i64;\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n }\r\n case LiteralKind.STRING: {\r\n assert(!implicitNegate);\r\n return this.compileStaticString((expression).value);\r\n }\r\n case LiteralKind.OBJECT: {\r\n assert(!implicitNegate);\r\n return this.compileObjectLiteral(expression, contextualType);\r\n }\r\n // case LiteralKind.REGEXP:\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n\r\n compileStaticString(stringValue: string): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var stringSegments = this.stringSegments;\r\n\r\n var stringSegment: MemorySegment | null = stringSegments.get(stringValue);\r\n if (!stringSegment) {\r\n let stringLength = stringValue.length;\r\n let stringBuffer = new Uint8Array(4 + stringLength * 2);\r\n stringBuffer[0] = stringLength & 0xff;\r\n stringBuffer[1] = (stringLength >>> 8) & 0xff;\r\n stringBuffer[2] = (stringLength >>> 16) & 0xff;\r\n stringBuffer[3] = (stringLength >>> 24) & 0xff;\r\n for (let i = 0; i < stringLength; ++i) {\r\n stringBuffer[4 + i * 2] = stringValue.charCodeAt(i) & 0xff;\r\n stringBuffer[5 + i * 2] = (stringValue.charCodeAt(i) >>> 8) & 0xff;\r\n }\r\n stringSegment = this.addMemorySegment(stringBuffer, options.usizeType.byteSize);\r\n stringSegments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n var stringType = this.program.typesLookup.get(\"string\");\r\n this.currentType = stringType ? stringType : options.usizeType;\r\n if (options.isWasm64) {\r\n return module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n }\r\n assert(i64_is_i32(stringOffset));\r\n return module.createI32(i64_low(stringOffset));\r\n }\r\n\r\n compileArrayLiteral(elementType: Type, expressions: (Expression | null)[], reportNode: Node): ExpressionRef {\r\n var isStatic = true;\r\n var module = this.module;\r\n\r\n // obtain the array type\r\n var arrayPrototype = assert(this.program.arrayPrototype);\r\n if (!arrayPrototype || arrayPrototype.kind != ElementKind.CLASS_PROTOTYPE) return module.createUnreachable();\r\n var arrayInstance = this.resolver.resolveClass(arrayPrototype, [ elementType ]);\r\n if (!arrayInstance) return module.createUnreachable();\r\n var arrayType = arrayInstance.type;\r\n\r\n var elementCount = expressions.length;\r\n if (elementCount) { // non-empty static or dynamic\r\n let nativeElementType = elementType.toNativeType();\r\n let values: usize;\r\n let byteLength: usize;\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n values = changetype(new Int32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n values = changetype(new Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n values = changetype(new Float32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n values = changetype(new Float64Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // precompute value expressions\r\n let exprs = new Array(elementCount);\r\n let expr: BinaryenExpressionRef;\r\n for (let i = 0; i < elementCount; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : elementType.toNativeZero(module);\r\n if (isStatic) {\r\n expr = this.precomputeExpressionRef(exprs[i]);\r\n if (getExpressionId(expr) == ExpressionId.Const) {\r\n assert(getExpressionType(expr) == nativeElementType);\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n changetype(values)[i] = getConstValueI32(expr);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n changetype(values)[i] = i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n changetype(values)[i] = getConstValueF32(expr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n changetype(values)[i] = getConstValueF64(expr);\r\n break;\r\n }\r\n default: assert(false); // checked above\r\n }\r\n } else {\r\n // TODO: emit a warning if declared 'const'\r\n // if (isConst) {\r\n // this.warn(\r\n // DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n // reportNode.range\r\n // );\r\n // }\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n let usizeTypeSize = this.options.usizeType.byteSize;\r\n if (isStatic) { // non-empty, all elements can be precomputed\r\n\r\n // Create a combined static memory segment composed of:\r\n // Array struct + ArrayBuffer struct + aligned ArrayBuffer data\r\n\r\n let arraySize = usizeTypeSize + 4; // buffer_ & length_\r\n let bufferHeaderSize = (4 + 7) & ~7; // aligned byteLength (8)\r\n let bufferTotalSize = 1 << (32 - clz(byteLength + bufferHeaderSize - 1)); // see internals\r\n let data = new Uint8Array(arraySize + bufferTotalSize);\r\n let segment = this.addMemorySegment(data);\r\n let offset = 0;\r\n\r\n // write Array struct\r\n if (usizeTypeSize == 8) {\r\n writeI64(i64_add(segment.offset, i64_new(arraySize)), data, offset); // buffer_ @ segment[arSize]\r\n offset += 8;\r\n } else {\r\n assert(i64_high(segment.offset) == 0);\r\n writeI32(i64_low(segment.offset) + arraySize, data, offset); // buffer_ @ segment[arSize]\r\n offset += 4;\r\n }\r\n writeI32(elementCount, data, offset); // length_\r\n offset += 4;\r\n assert(offset == arraySize);\r\n\r\n // write ArrayBuffer struct\r\n writeI32(byteLength, data, offset);\r\n offset += bufferHeaderSize; // incl. alignment\r\n\r\n // write ArrayBuffer data\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.I64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n case NativeType.F32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.F64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n assert(offset <= arraySize + bufferTotalSize);\r\n\r\n this.currentType = arrayType;\r\n return usizeTypeSize == 8\r\n ? module.createI64(\r\n i64_low(segment.offset),\r\n i64_high(segment.offset)\r\n )\r\n : module.createI32(\r\n i64_low(segment.offset)\r\n );\r\n\r\n } else { // non-empty, some elements can't be precomputed\r\n\r\n this.currentType = arrayType;\r\n let setter = arrayInstance.lookupOverload(OperatorKind.INDEXED_SET, true);\r\n if (!setter) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n reportNode.range, arrayInstance.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let nativeArrayType = arrayType.toNativeType();\r\n let currentFunction = this.currentFunction;\r\n let tempLocal = currentFunction.getTempLocal(arrayType, false);\r\n let stmts = new Array(2 + elementCount);\r\n let index = 0;\r\n stmts[index++] = module.createSetLocal(tempLocal.index,\r\n this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(elementCount)\r\n ])\r\n );\r\n for (let i = 0; i < elementCount; ++i) {\r\n stmts[index++] = this.makeCallDirect(setter, [\r\n module.createGetLocal(tempLocal.index, nativeArrayType), // this\r\n module.createI32(i),\r\n exprs[i]\r\n ]);\r\n }\r\n assert(index + 1 == stmts.length);\r\n stmts[index] = module.createGetLocal(tempLocal.index, nativeArrayType);\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = arrayType;\r\n return module.createBlock(null, stmts, nativeArrayType);\r\n }\r\n\r\n } else { // empty, TBD: cache this somehow?\r\n this.currentType = arrayType;\r\n return this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(0)\r\n ]);\r\n }\r\n }\r\n\r\n compileObjectLiteral(expression: ObjectLiteralExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n\r\n // contextual type must be a class\r\n var classReference = contextualType.classReference;\r\n if (!classReference || classReference.is(CommonFlags.ABSTRACT)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n expression.range, \"\", contextualType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // if present, check that the constructor is compatible with object literals\r\n var ctor = classReference.constructorInstance;\r\n if (ctor) {\r\n if (ctor.signature.requiredParameters) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_must_not_require_any_arguments,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (ctor.is(CommonFlags.PRIVATE)) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (ctor.is(CommonFlags.PROTECTED)) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // check and compile field values\r\n var names = expression.names;\r\n var numNames = names.length;\r\n var values = expression.values;\r\n var members = classReference.members;\r\n var hasErrors = false;\r\n var exprs = new Array(numNames + 2);\r\n var tempLocal = this.currentFunction.getTempLocal(this.options.usizeType);\r\n assert(numNames == values.length);\r\n for (let i = 0, k = numNames; i < k; ++i) {\r\n let member = members ? members.get(names[i].text) : null;\r\n if (!member || member.kind != ElementKind.FIELD) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n names[i].range, names[i].text, classReference.toString()\r\n );\r\n hasErrors = true;\r\n continue;\r\n }\r\n let type = (member).type;\r\n exprs[i + 1] = this.module.createStore( // TODO: handle setters as well\r\n type.byteSize,\r\n this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType),\r\n this.compileExpression(values[i], (member).type, ConversionKind.IMPLICIT, WrapMode.NONE),\r\n type.toNativeType(),\r\n (member).memoryOffset\r\n );\r\n }\r\n this.currentType = classReference.type.nonNullableType;\r\n if (hasErrors) return module.createUnreachable();\r\n\r\n // allocate a new instance first and assign 'this' to the temp. local\r\n exprs[0] = module.createSetLocal(\r\n tempLocal.index,\r\n compileBuiltinAllocate(this, classReference, expression)\r\n );\r\n\r\n // once all field values have been set, return 'this'\r\n exprs[exprs.length - 1] = module.createGetLocal(tempLocal.index, this.options.nativeSizeType);\r\n\r\n return module.createBlock(null, exprs, this.options.nativeSizeType);\r\n }\r\n\r\n compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var currentFunction = this.currentFunction;\r\n\r\n // obtain the class being instantiated\r\n var target = this.resolver.resolveExpression( // reports\r\n expression.expression,\r\n currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n if (target.kind != ElementKind.CLASS_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature,\r\n expression.expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n var classPrototype = target;\r\n var classInstance: Class | null = null;\r\n var typeArguments = expression.typeArguments;\r\n var classReference: Class | null;\r\n if (\r\n !typeArguments &&\r\n (classReference = contextualType.classReference) !== null &&\r\n classReference.is(CommonFlags.GENERIC)\r\n ) {\r\n classInstance = this.resolver.resolveClass(\r\n classPrototype,\r\n classReference.typeArguments,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n } else {\r\n classInstance = this.resolver.resolveClassInclTypeArguments(\r\n classPrototype,\r\n typeArguments,\r\n currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n }\r\n if (!classInstance) return module.createUnreachable();\r\n\r\n var expr: ExpressionRef;\r\n\r\n // traverse to the first matching constructor\r\n var currentClassInstance: Class | null = classInstance;\r\n var constructorInstance = classInstance.constructorInstance;\r\n while (!constructorInstance && (currentClassInstance = classInstance.base)) {\r\n constructorInstance = currentClassInstance.constructorInstance;\r\n }\r\n\r\n // if a constructor is present, call it with a zero `this`\r\n if (constructorInstance) {\r\n expr = this.compileCallDirect(constructorInstance, expression.arguments, expression,\r\n options.usizeType.toNativeZero(module)\r\n );\r\n\r\n // otherwise simply allocate a new instance and initialize its fields\r\n } else {\r\n expr = this.makeAllocate(classInstance, expression);\r\n }\r\n\r\n this.currentType = classInstance.type;\r\n return expr;\r\n }\r\n\r\n compileParenthesizedExpression(\r\n expression: ParenthesizedExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n // does not change types, just order\r\n return this.compileExpression(\r\n expression.expression,\r\n contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n /**\r\n * Compiles a property access in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compilePropertyAccessExpression(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n var target = this.resolver.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: { // static property\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // enum value\r\n let parent = (target).parent;\r\n assert(parent !== null && parent.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(parent)) {\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return module.createI32((target).constantValue);\r\n }\r\n return module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FIELD: { // instance field\r\n let thisExpression = assert(this.resolver.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.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE)\r\n : this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n var ifThenFlow = parentFlow.fork();\r\n currentFunction.flow = ifThenFlow;\r\n var ifThenExpr = this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE);\r\n var ifThenType = this.currentType;\r\n ifThenFlow.free();\r\n\r\n var ifElseFlow = parentFlow.fork();\r\n currentFunction.flow = ifElseFlow;\r\n var ifElseExpr = this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n var ifElseType = this.currentType;\r\n currentFunction.flow = ifElseFlow.free();\r\n\r\n parentFlow.inheritMutual(ifThenFlow, ifElseFlow);\r\n\r\n var commonType = Type.commonCompatible(ifThenType, ifElseType, false);\r\n if (!commonType) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n expression.range, ifThenType.toString(), ifElseType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n ifThenExpr = this.convertExpression(\r\n ifThenExpr,\r\n ifThenType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifThen\r\n );\r\n ifElseExpr = this.convertExpression(\r\n ifElseExpr,\r\n ifElseType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifElse\r\n );\r\n this.currentType = commonType;\r\n return this.module.createIf(condExpr, ifThenExpr, ifElseExpr);\r\n }\r\n\r\n compileUnaryPostfixExpression(expression: UnaryPostfixExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // make a getter for the expression (also obtains the type)\r\n var getValue = this.compileExpression( // reports\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n // shortcut if compiling the getter already failed\r\n if (getExpressionId(getValue) == ExpressionId.Unreachable) return getValue;\r\n var currentType = this.currentType;\r\n\r\n var op: BinaryOp;\r\n var nativeType: NativeType;\r\n var nativeOne: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS_PLUS: {\r\n\r\n // TODO: check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n op = BinaryOp.AddI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.AddI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.AddF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.AddF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n\r\n // TODO: check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n op = BinaryOp.SubI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.SubI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.SubF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.SubF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // simplify if dropped anyway\r\n if (contextualType == Type.void) {\r\n return this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n getValue,\r\n nativeOne\r\n ),\r\n false\r\n );\r\n }\r\n\r\n // otherwise use a temp local for the intermediate value (always possibly overflows)\r\n var tempLocal = currentFunction.getTempLocal(currentType, false);\r\n var setValue = this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n this.module.createGetLocal(tempLocal.index, nativeType),\r\n nativeOne\r\n ),\r\n false\r\n );\r\n this.currentType = assert(tempLocal).type;\r\n currentFunction.freeTempLocal(tempLocal);\r\n\r\n var localIndex = (tempLocal).index;\r\n return module.createBlock(null, [\r\n module.createSetLocal(localIndex, getValue),\r\n setValue,\r\n module.createGetLocal(localIndex, nativeType)\r\n ], nativeType); // result of 'x++' / 'x--' might overflow\r\n }\r\n\r\n compileUnaryPrefixExpression(\r\n expression: UnaryPrefixExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PLUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // nop\r\n break;\r\n }\r\n case Token.MINUS: {\r\n if (expression.operand.kind == NodeKind.LITERAL && (\r\n (expression.operand).literalKind == LiteralKind.INTEGER ||\r\n (expression.operand).literalKind == LiteralKind.FLOAT\r\n )) {\r\n // implicitly negate integer and float literals. also enables proper checking of literal ranges.\r\n expr = this.compileLiteralExpression(expression.operand, contextualType, true);\r\n // compileExpression normally does this:\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n break;\r\n }\r\n\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MINUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, module.createI32(0), expr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n this.currentType.toNativeZero(module),\r\n expr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, module.createI64(0), expr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createUnary(UnaryOp.NegF32, expr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createUnary(UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PLUS_PLUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_INC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_DEC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, expr, module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.EXCLAMATION: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n // allow '!' for references even without an overload\r\n }\r\n\r\n expr = this.makeIsFalseish(expr, this.currentType);\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.TILDE: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n } else {\r\n expr = this.convertExpression(\r\n expr,\r\n this.currentType, this.currentType.intType,\r\n ConversionKind.IMPLICIT, WrapMode.NONE,\r\n expression.operand\r\n );\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.XorI32, expr, module.createI32(-1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n expr,\r\n this.currentType.toNativeNegOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, expr, module.createI64(-1, -1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.TYPEOF: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.operand, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n /** Makes sure that a 32-bit integer value is wrapped to a valid value of the specified type. */\r\n ensureSmallIntegerWrap(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n var flow = this.currentFunction.flow;\r\n switch (type.kind) {\r\n case TypeKind.I8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI8ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(24)\r\n ),\r\n module.createI32(24)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI16ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(16)\r\n ),\r\n module.createI32(16)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'false' in a broader sense. */\r\n makeIsFalseish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return module.createUnary(UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createUnary(UnaryOp.EqzI64, expr);\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.EqF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.EqF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(1);\r\n }\r\n }\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'true' in a broader sense. */\r\n makeIsTrueish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return expr;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return type.size == 64\r\n ? module.createBinary(BinaryOp.NeI64, expr, module.createI64(0))\r\n : expr;\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.NeF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.NeF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(0);\r\n }\r\n }\r\n }\r\n\r\n /** Makes an allocation expression for an instance of the specified class. */\r\n makeAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n\r\n // allocate the necessary memory and tee the pointer to a temp. local for reuse\r\n var tempLocal = currentFunction.getTempLocal(classInstance.type, false);\r\n var initializers = new Array();\r\n initializers.push(\r\n module.createSetLocal(tempLocal.index,\r\n compileBuiltinAllocate(this, classInstance, reportNode)\r\n )\r\n );\r\n\r\n // apply field initializers\r\n if (classInstance.members) {\r\n for (let member of classInstance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n let field = member;\r\n let fieldType = field.type;\r\n let nativeFieldType = fieldType.toNativeType();\r\n let fieldDeclaration = field.prototype.declaration;\r\n assert(!field.isAny(CommonFlags.CONST));\r\n if (fieldDeclaration.initializer) { // use initializer\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n this.compileExpression( // reports\r\n fieldDeclaration.initializer,\r\n fieldType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n ),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n } else { // initialize with zero\r\n // TODO: might be unnecessary if the ctor initializes the field\r\n let parameterIndex = (field.prototype.declaration).parameterIndex;\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n parameterIndex >= 0 // initialized via parameter\r\n ? module.createGetLocal(1 + parameterIndex, nativeFieldType)\r\n : fieldType.toNativeZero(module),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // return `this`\r\n initializers.push(\r\n module.createGetLocal(tempLocal.index, nativeSizeType)\r\n );\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = classInstance.type;\r\n return module.createBlock(null, initializers, nativeSizeType);\r\n }\r\n\r\n /** Makes a conditional allocation expression inside of the constructor of the specified class. */\r\n makeConditionalAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n // requires that `this` is the first local\r\n var module = this.module;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n this.currentType = classInstance.type;\r\n return module.createIf(\r\n nativeSizeType == NativeType.I64\r\n ? module.createBinary(\r\n BinaryOp.NeI64,\r\n module.createGetLocal(0, NativeType.I64),\r\n module.createI64(0)\r\n )\r\n : module.createGetLocal(0, NativeType.I32),\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createTeeLocal(0,\r\n this.makeAllocate(classInstance, reportNode)\r\n )\r\n );\r\n }\r\n\r\n /** Adds the debug location of the specified expression at the specified range to the source map. */\r\n addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n var currentFunction = this.currentFunction;\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n range.debugInfoRef = expr;\r\n currentFunction.debugLocations.push(range);\r\n }\r\n}\r\n\r\n// helpers\r\n\r\nfunction mangleExportName(element: Element, simpleName: string = element.simpleName): string {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION: {\r\n let parent = (element).parent || (element).prototype.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName\r\n : simpleName;\r\n }\r\n case ElementKind.FIELD: {\r\n let parent = assert((element).parent);\r\n return mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName;\r\n }\r\n case ElementKind.ENUMVALUE: {\r\n let parent = assert((element).parent);\r\n return mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName;\r\n }\r\n case ElementKind.CLASS: {\r\n let parent = (element).prototype.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + STATIC_DELIMITER\r\n + simpleName\r\n : simpleName;\r\n }\r\n default: {\r\n let parent = element.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + STATIC_DELIMITER\r\n + simpleName\r\n : simpleName;\r\n }\r\n }\r\n}\r\n\r\nfunction mangleImportName(\r\n element: Element,\r\n declaration: DeclarationStatement,\r\n parentElement: Element | null = null\r\n): void {\r\n mangleImportName_moduleName = parentElement ? parentElement.simpleName : declaration.range.source.simplePath;\r\n mangleImportName_elementName = element.simpleName;\r\n\r\n if (!element.hasDecorator(DecoratorFlags.EXTERNAL)) return;\r\n\r\n var program = element.program;\r\n var decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n var args = decorator.arguments;\r\n if (args && args.length) {\r\n let arg = args[0];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length >= 2) {\r\n arg = args[1];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_moduleName = mangleImportName_elementName;\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length > 2) {\r\n program.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"2\", args.length.toString()\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n decorator.range, \"1\", \"0\"\r\n );\r\n }\r\n}\r\n\r\nvar mangleImportName_moduleName: string;\r\nvar mangleImportName_elementName: string;\r\n","/**\r\n * A TypeScript parser for the AssemblyScript subset.\r\n * @module parser\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n LIBRARY_PREFIX,\r\n PATH_DELIMITER\r\n} from \"./common\";\r\n\r\nimport {\r\n Program\r\n} from \"./program\";\r\n\r\nimport {\r\n Tokenizer,\r\n Token,\r\n Range,\r\n CommentHandler,\r\n IdentifierHandling\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n normalizePath\r\n} from \"./util\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n SourceKind,\r\n CommonTypeNode,\r\n TypeNode,\r\n SignatureNode,\r\n\r\n Expression,\r\n AssertionKind,\r\n CallExpression,\r\n ClassExpression,\r\n FunctionExpression,\r\n IdentifierExpression,\r\n StringLiteralExpression,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DecoratorNode,\r\n DoStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportImportStatement,\r\n ExportMember,\r\n ExportStatement,\r\n ExpressionStatement,\r\n ForStatement,\r\n FunctionDeclaration,\r\n IfStatement,\r\n ImportDeclaration,\r\n ImportStatement,\r\n NamespaceDeclaration,\r\n ParameterNode,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameterNode,\r\n VariableStatement,\r\n VariableDeclaration,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n mangleInternalPath,\r\n nodeIsCallable,\r\n nodeIsGenericCallable\r\n} from \"./ast\";\r\n\r\nconst builtinsFile = LIBRARY_PREFIX + \"builtins.ts\";\r\n\r\n/** Parser interface. */\r\nexport class Parser extends DiagnosticEmitter {\r\n\r\n /** Program being created. */\r\n program: Program;\r\n /** Source file names to be requested next. */\r\n backlog: string[] = new Array();\r\n /** Source file names already seen, that is processed or backlogged. */\r\n seenlog: Set = new Set();\r\n /** Source file names already completely processed. */\r\n donelog: Set = new Set();\r\n /** Optional handler to intercept comments while tokenizing. */\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new parser. */\r\n constructor() {\r\n super();\r\n this.program = new Program(this.diagnostics);\r\n }\r\n\r\n /** Parses a file and adds its definitions to the program. */\r\n parseFile(\r\n text: string,\r\n path: string,\r\n isEntry: bool\r\n ): void {\r\n var normalizedPath = normalizePath(path);\r\n var internalPath = mangleInternalPath(normalizedPath);\r\n\r\n // check if already processed\r\n if (this.donelog.has(internalPath)) return;\r\n this.donelog.add(internalPath); // do not parse again\r\n this.seenlog.add(internalPath); // do not request again\r\n\r\n // create the source element\r\n var source = new Source(\r\n normalizedPath,\r\n text,\r\n isEntry\r\n ? SourceKind.ENTRY\r\n : path.startsWith(LIBRARY_PREFIX) && path.indexOf(PATH_DELIMITER, LIBRARY_PREFIX.length) < 0\r\n ? SourceKind.LIBRARY\r\n : SourceKind.DEFAULT\r\n );\r\n var program = this.program;\r\n program.sources.push(source);\r\n\r\n // mark the special builtins library file\r\n if (source.normalizedPath == builtinsFile) {\r\n source.set(CommonFlags.BUILTIN);\r\n }\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, program.diagnostics);\r\n tn.onComment = this.onComment;\r\n source.tokenizer = tn;\r\n var statements = source.statements;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n let statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n statements.push(statement);\r\n }\r\n }\r\n tn.finish();\r\n }\r\n\r\n /** Parses a top-level statement. */\r\n parseTopLevelStatement(\r\n tn: Tokenizer,\r\n namespace: Node | null = null\r\n ): Statement | null {\r\n var flags = CommonFlags.NONE;\r\n var startPos: i32 = -1;\r\n\r\n // check decorators\r\n var decorators: DecoratorNode[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) {\r\n this.skipStatement(tn);\r\n continue;\r\n }\r\n if (!decorators) decorators = [];\r\n decorators.push(decorator);\r\n }\r\n\r\n // mark builtins\r\n flags |= (tn.source.flags & CommonFlags.BUILTIN);\r\n\r\n // check modifiers\r\n var exportStart: i32 = 0;\r\n var exportEnd: i32 = 0;\r\n if (tn.skip(Token.EXPORT)) {\r\n if (tn.skip(Token.DEFAULT)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n flags |= CommonFlags.EXPORT;\r\n exportStart = tn.tokenPos;\r\n exportEnd = tn.pos;\r\n }\r\n\r\n var declareStart: i32 = 0;\r\n var declareEnd: i32 = 0;\r\n var contextIsAmbient = namespace != null && namespace.is(CommonFlags.AMBIENT);\r\n if (tn.skip(Token.DECLARE)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n if (contextIsAmbient) {\r\n this.error(\r\n DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n flags |= CommonFlags.DECLARE | CommonFlags.AMBIENT;\r\n } else if (contextIsAmbient) {\r\n flags |= CommonFlags.AMBIENT;\r\n }\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n\r\n // handle declarations\r\n var first = tn.peek();\r\n if (startPos < 0) startPos = tn.nextTokenPos;\r\n switch (first) {\r\n case Token.CONST: {\r\n tn.next();\r\n flags |= CommonFlags.CONST;\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n break;\r\n } else {\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n }\r\n break;\r\n }\r\n case Token.LET: flags |= CommonFlags.LET;\r\n case Token.VAR: {\r\n tn.next();\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ENUM: {\r\n tn.next();\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.FUNCTION: {\r\n tn.next();\r\n statement = this.parseFunction(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ABSTRACT: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (!tn.skip(Token.CLASS)) {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n break;\r\n } else {\r\n tn.discard(state);\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n // fall through\r\n }\r\n case Token.CLASS:\r\n case Token.INTERFACE: {\r\n tn.next();\r\n statement = this.parseClassOrInterface(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.NAMESPACE: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n case Token.IMPORT: {\r\n tn.next();\r\n flags |= CommonFlags.IMPORT;\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExportImport(tn, startPos);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n default: {\r\n\r\n // handle plain exports\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExport(tn, flags, startPos);\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (exportEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(exportStart, exportEnd), \"export\"\r\n ); // recoverable\r\n }\r\n if (declareEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(declareStart, declareEnd), \"declare\"\r\n ); // recoverable\r\n }\r\n if (!namespace) {\r\n statement = this.parseStatement(tn, true);\r\n } // TODO: else?\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorators[i].range\r\n );\r\n }\r\n }\r\n return statement;\r\n }\r\n\r\n /** Obtains the next file to parse. */\r\n nextFile(): string | null {\r\n var backlog = this.backlog;\r\n return backlog.length ? backlog.shift() : null;\r\n }\r\n\r\n /** Finishes parsing and returns the program. */\r\n finish(): Program {\r\n if (this.backlog.length) throw new Error(\"backlog is not empty\");\r\n this.backlog = [];\r\n this.seenlog.clear();\r\n this.donelog.clear();\r\n return this.program;\r\n }\r\n\r\n /** Parses a type. */\r\n parseType(\r\n tn: Tokenizer,\r\n acceptParenthesized: bool = true,\r\n suppressErrors: bool = false\r\n ): CommonTypeNode | null {\r\n\r\n // NOTE: this parses our limited subset\r\n var token = tn.next();\r\n var startPos = tn.tokenPos;\r\n\r\n var type: CommonTypeNode;\r\n\r\n // '(' ...\r\n if (token == Token.OPENPAREN) {\r\n\r\n // '(' FunctionSignature ')' '|' 'null'?\r\n let isNullableSignature = tn.skip(Token.OPENPAREN);\r\n // FunctionSignature?\r\n let signature = this.tryParseSignature(tn);\r\n if (signature) {\r\n if (isNullableSignature) {\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.BAR)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"|\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.NULL)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n signature.isNullable = true;\r\n }\r\n return signature;\r\n } else if (isNullableSignature || this.tryParseSignatureIsSignature) {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // Type (',' Type)* ')'\r\n if (acceptParenthesized) {\r\n let innerType = this.parseType(tn, false, suppressErrors);\r\n if (!innerType) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"}\"\r\n );\r\n }\r\n return null;\r\n }\r\n type = innerType;\r\n type.range.start = startPos;\r\n type.range.end = tn.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // 'void'\r\n } else if (token == Token.VOID) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"void\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'this'\r\n } else if (token == Token.THIS) {\r\n type = Node.createType(\r\n Node.createThisExpression(tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'true'\r\n } else if (token == Token.TRUE || token == Token.FALSE) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"bool\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // StringLiteral\r\n } else if (token == Token.STRINGLITERAL) {\r\n tn.readString();\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"string\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // Identifier\r\n } else if (token == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let parameters = new Array();\r\n let nullable = false;\r\n\r\n // Name\r\n if (tn.skip(Token.LESSTHAN)) {\r\n do {\r\n let parameter = this.parseType(tn, true, suppressErrors);\r\n if (!parameter) return null;\r\n parameters.push(parameter);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \">\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n // ... | null\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(identifier, parameters, nullable, tn.range(startPos, tn.pos));\r\n\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n // ... [][]\r\n while (tn.skip(Token.OPENBRACKET)) {\r\n let bracketStart = tn.tokenPos;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n }\r\n return null;\r\n }\r\n let bracketRange = tn.range(bracketStart, tn.pos);\r\n\r\n // ...[] | null\r\n let nullable = false;\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"Array\", bracketRange),\r\n [ type ],\r\n nullable,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (nullable) break;\r\n }\r\n\r\n return type;\r\n }\r\n\r\n // Indicates whether tryParseSignature determined that it is handling a Signature\r\n private tryParseSignatureIsSignature: bool = false;\r\n\r\n /** Parses a function signature, as used in type declarations. */\r\n tryParseSignature(\r\n tn: Tokenizer\r\n ): SignatureNode | null {\r\n\r\n // at '(': ('...'? Identifier '?'? ':' Type (',' '...'? Identifier '?'? ':' Type)* )? ')' '=>' Type\r\n\r\n var state = tn.mark();\r\n var startPos = tn.tokenPos;\r\n var parameters: ParameterNode[] | null = null;\r\n var thisType: TypeNode | null = null;\r\n var isSignature: bool = false;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n parameters = [];\r\n\r\n } else {\r\n isSignature = false; // not yet known\r\n do {\r\n let kind = ParameterKind.DEFAULT;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n kind = ParameterKind.REST;\r\n }\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let t = this.parseType(tn, false);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n this.tryParseSignatureIsSignature = true;\r\n return null;\r\n }\r\n thisType = t;\r\n } else {\r\n tn.reset(state);\r\n this.tryParseSignatureIsSignature = false;\r\n return null;\r\n }\r\n } else if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range(tn.tokenPos, tn.pos));\r\n if (tn.skip(Token.QUESTION)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n if (kind == ParameterKind.REST) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n tn.range()\r\n ); // recoverable\r\n } else {\r\n kind = ParameterKind.OPTIONAL;\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let type = this.parseType(tn); // not suppressing errors because known\r\n if (!type) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n let param = new ParameterNode();\r\n param.parameterKind = kind;\r\n param.name = name;\r\n param.type = type;\r\n if (!parameters) parameters = [ param ];\r\n else parameters.push(param);\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null;\r\n if (tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n returnType = this.parseType(tn);\r\n if (!returnType) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=>\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n this.tryParseSignatureIsSignature = true;\r\n return Node.createSignature(\r\n parameters || [],\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n\r\n // statements\r\n\r\n parseDecorator(\r\n tn: Tokenizer\r\n ): DecoratorNode | null {\r\n\r\n // at '@': Identifier ('.' Identifier)* '(' Arguments\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skipIdentifier()) {\r\n let name = tn.readIdentifier();\r\n let expression: Expression = Node.createIdentifierExpression(name, tn.range(startPos, tn.pos));\r\n while (tn.skip(Token.DOT)) {\r\n if (tn.skipIdentifier()) {\r\n name = tn.readIdentifier();\r\n expression = Node.createPropertyAccessExpression(\r\n expression,\r\n Node.createIdentifierExpression(name, tn.range()),\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let args: Expression[] | null;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n args = this.parseArguments(tn);\r\n if (args) {\r\n return Node.createDecorator(expression, args, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n return Node.createDecorator(expression, null, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVariable(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): VariableStatement | null {\r\n\r\n // at ('const' | 'let' | 'var'): VariableDeclaration (',' VariableDeclaration)* ';'?\r\n\r\n var members = new Array();\r\n do {\r\n let member = this.parseVariableDeclaration(tn, flags, decorators);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n\r\n var ret = Node.createVariableStatement(members, decorators, flags, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseVariableDeclaration(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags,\r\n parentDecorators: DecoratorNode[] | null\r\n ): VariableDeclaration | null {\r\n\r\n // before: Identifier (':' Type)? ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var flags = parentFlags;\r\n\r\n var type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n }\r\n\r\n var initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n } else {\r\n if (flags & CommonFlags.CONST) {\r\n if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n identifier.range\r\n ); // recoverable\r\n }\r\n } else if (!type) { // neither type nor initializer\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range(tn.pos)\r\n ); // recoverable\r\n }\r\n }\r\n return Node.createVariableDeclaration(\r\n identifier,\r\n type,\r\n initializer,\r\n parentDecorators,\r\n flags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseEnum(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): EnumDeclaration | null {\r\n\r\n // at 'enum': Identifier '{' (EnumValueDeclaration (',' EnumValueDeclaration )*)? '}' ';'?\r\n\r\n if (tn.next() != Token.IDENTIFIER) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.next() != Token.OPENBRACE) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n var members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseEnumValue(tn, CommonFlags.NONE);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n var ret = Node.createEnumDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseEnumValue(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags\r\n ): EnumValueDeclaration | null {\r\n\r\n // before: Identifier ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var value: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n }\r\n return Node.createEnumValueDeclaration(\r\n identifier,\r\n value,\r\n parentFlags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseReturn(\r\n tn: Tokenizer\r\n ): ReturnStatement | null {\r\n\r\n // at 'return': Expression | (';' | '}' | ...'\\n')\r\n\r\n var expr: Expression | null = null;\r\n if (\r\n tn.peek(true) != Token.SEMICOLON &&\r\n tn.nextToken != Token.CLOSEBRACE &&\r\n !tn.nextTokenOnNewLine\r\n ) {\r\n if (!(expr = this.parseExpression(tn))) return null;\r\n }\r\n\r\n var ret = Node.createReturnStatement(expr, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTypeParameters(\r\n tn: Tokenizer\r\n ): TypeParameterNode[] | null {\r\n\r\n // at '<': TypeParameter (',' TypeParameter)* '>'\r\n\r\n var typeParameters = new Array();\r\n while (!tn.skip(Token.GREATERTHAN)) {\r\n let typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.GREATERTHAN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (typeParameters.length === 0) {\r\n this.error(\r\n DiagnosticCode.Type_parameter_list_cannot_be_empty,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n return typeParameters;\r\n }\r\n\r\n parseTypeParameter(\r\n tn: Tokenizer\r\n ): TypeParameterNode | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n let extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n return Node.createTypeParameter(\r\n identifier,\r\n extendsType,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private parseParametersThis: TypeNode | null = null;\r\n\r\n parseParameters(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: ParameterNode | null = null;\r\n var seenOptional = false;\r\n var reportedRest = false;\r\n var thisType: CommonTypeNode | null = null;\r\n\r\n // check if there is a leading `this` parameter\r\n this.parseParametersThis = null;\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n thisType = this.parseType(tn); // reports\r\n if (!thisType) return null;\r\n if (thisType.kind == NodeKind.TYPE) {\r\n this.parseParametersThis = thisType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n thisType.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n return parameters;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let param = this.parseParameter(tn, isConstructor); // reports\r\n if (!param) return null;\r\n if (seenRest && !reportedRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,\r\n seenRest.name.range\r\n );\r\n reportedRest = true;\r\n }\r\n switch (param.parameterKind) {\r\n default: {\r\n if (seenOptional) {\r\n this.error(\r\n DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,\r\n param.name.range\r\n );\r\n }\r\n break;\r\n }\r\n case ParameterKind.OPTIONAL: {\r\n seenOptional = true;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n seenRest = param;\r\n break;\r\n }\r\n }\r\n parameters.push(param);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: ('public' | 'private' | 'protected' | '...')? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n var accessFlags: CommonFlags = CommonFlags.NONE;\r\n if (isConstructor) {\r\n if (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.peek() == Token.READONLY) {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek() != Token.COLON) { // modifier\r\n tn.discard(state);\r\n if (!startRange) startRange = tn.range();\r\n accessFlags |= CommonFlags.READONLY;\r\n } else { // identifier\r\n tn.reset(state);\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n if (accessFlags) {\r\n this.error(\r\n DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,\r\n tn.range()\r\n );\r\n } else {\r\n startRange = tn.range();\r\n }\r\n isRest = true;\r\n }\r\n if (tn.skipIdentifier()) {\r\n if (!isRest) startRange = tn.range();\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let type: CommonTypeNode | null = null;\r\n if (isOptional = tn.skip(Token.QUESTION)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n identifier.range\r\n );\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n type = Node.createOmittedType(tn.range(tn.pos));\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n if (isOptional) {\r\n this.error(\r\n DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,\r\n identifier.range\r\n );\r\n } else {\r\n isOptional = true;\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n }\r\n let param = Node.createParameter(\r\n identifier,\r\n type,\r\n initializer,\r\n isRest\r\n ? ParameterKind.REST\r\n : isOptional\r\n ? ParameterKind.OPTIONAL\r\n : ParameterKind.DEFAULT,\r\n Range.join(startRange, tn.range())\r\n );\r\n param.flags |= accessFlags;\r\n return param;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseFunction(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): FunctionDeclaration | null {\r\n\r\n // at 'function':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // '(' Parameters (':' Type)?\r\n // '{' Statement* '}'\r\n // ';'?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(tn.pos)\r\n );\r\n return null;\r\n }\r\n\r\n var name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var signatureStart: i32 = -1;\r\n\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n signatureStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n if (signatureStart < 0) {\r\n signatureStart = tn.tokenPos;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n var thisType = this.parseParametersThis;\r\n\r\n var isSetter = (flags & CommonFlags.SET) != 0;\r\n if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n ); // recoverable\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn, true, isSetter);\r\n if (!returnType) return null;\r\n }\r\n\r\n if (!returnType) {\r\n returnType = Node.createOmittedType(\r\n tn.range(tn.pos)\r\n );\r\n if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range(tn.pos)\r\n );\r\n }\r\n\r\n var ret = Node.createFunctionDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseFunctionExpression(tn: Tokenizer): FunctionExpression | null {\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n var isArrow = false;\r\n\r\n // either at 'function':\r\n // Identifier?\r\n // '(' Parameters (':' Type)?\r\n // Statement\r\n\r\n if (tn.token == Token.FUNCTION) {\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n // or at '(' of arrow function:\r\n // Parameters (':' Type)?\r\n // Statement\r\n\r\n } else {\r\n isArrow = true;\r\n assert(tn.token == Token.OPENPAREN);\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var signatureStart = tn.pos;\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, name, parameters, isArrow, startPos, signatureStart);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n name: IdentifierExpression,\r\n parameters: ParameterNode[],\r\n isArrow: bool,\r\n startPos: i32 = -1,\r\n signatureStart: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = name.range.start;\r\n if (signatureStart < 0) signatureStart = startPos;\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n\r\n if (isArrow) {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"=>\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null, // TODO?\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null;\r\n if (isArrow) {\r\n body = this.parseStatement(tn, false);\r\n } else {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n }\r\n if (!body) return null;\r\n\r\n var declaration = Node.createFunctionDeclaration(\r\n name,\r\n null,\r\n signature,\r\n body,\r\n null,\r\n isArrow ? CommonFlags.ARROW : CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n return Node.createFunctionExpression(declaration);\r\n }\r\n\r\n parseClassOrInterface(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): ClassDeclaration | null {\r\n\r\n // at ('class' | 'interface'):\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // ('extends' Type)?\r\n // ('implements' Type (',' Type)*)?\r\n // '{' ClassMember* '}'\r\n\r\n var isInterface = tn.token == Token.INTERFACE;\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n var typeParameters: TypeParameterNode[] | null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n } else {\r\n typeParameters = [];\r\n }\r\n\r\n var extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n\r\n var implementsTypes: TypeNode[] | null = null;\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Interface_declaration_cannot_have_implements_clause,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n do {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n if (!isInterface) {\r\n if (!implementsTypes) implementsTypes = [];\r\n implementsTypes.push(type);\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration: ClassDeclaration;\r\n if (isInterface) {\r\n assert(!implementsTypes);\r\n declaration = Node.createInterfaceDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n declaration = Node.createClassDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n implementsTypes,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return declaration;\r\n }\r\n\r\n parseClassExpression(tn: Tokenizer): ClassExpression | null {\r\n\r\n // at 'class': Identifier? '{' ... '}'\r\n\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration = Node.createClassDeclaration(\r\n name,\r\n [],\r\n null,\r\n null,\r\n members,\r\n null,\r\n CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return Node.createClassExpression(declaration);\r\n }\r\n\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parent: ClassDeclaration\r\n ): DeclarationStatement | null {\r\n\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\r\n // 'readonly'?\r\n // ('get' | 'set')?\r\n // Identifier ...\r\n\r\n var startPos = tn.pos;\r\n var isInterface = parent.kind == NodeKind.INTERFACEDECLARATION;\r\n\r\n var decorators = new Array();\r\n while (tn.skip(Token.AT)) {\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorator.range\r\n );\r\n }\r\n decorators.push(decorator);\r\n }\r\n\r\n // inherit ambient status\r\n var flags = parent.flags & CommonFlags.AMBIENT;\r\n\r\n // implemented methods are virtual\r\n if (isInterface) flags |= CommonFlags.VIRTUAL;\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"public\"\r\n );\r\n }\r\n flags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"private\"\r\n );\r\n }\r\n flags |= CommonFlags.PRIVATE;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"protected\"\r\n );\r\n }\r\n flags |= CommonFlags.PROTECTED;\r\n }\r\n\r\n var staticStart: i32 = 0;\r\n var staticEnd: i32 = 0;\r\n var abstractStart: i32 = 0;\r\n var abstractEnd: i32 = 0;\r\n if (tn.skip(Token.STATIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"static\"\r\n );\r\n }\r\n flags |= CommonFlags.STATIC;\r\n staticStart = tn.tokenPos;\r\n staticEnd = tn.pos;\r\n } else {\r\n flags |= CommonFlags.INSTANCE;\r\n if (tn.skip(Token.ABSTRACT)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"abstract\"\r\n );\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n abstractStart = tn.tokenPos;\r\n abstractEnd = tn.pos;\r\n }\r\n if (parent.flags & CommonFlags.GENERIC) {\r\n flags |= CommonFlags.GENERIC_CONTEXT;\r\n }\r\n }\r\n\r\n var readonlyStart: i32 = 0;\r\n var readonlyEnd: i32 = 0;\r\n if (tn.skip(Token.READONLY)) {\r\n flags |= CommonFlags.READONLY;\r\n readonlyStart = tn.tokenPos;\r\n readonlyEnd = tn.pos;\r\n }\r\n\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n var state = tn.mark();\r\n var isConstructor = false;\r\n var isGetter = false;\r\n var getStart: i32 = 0;\r\n var getEnd: i32 = 0;\r\n var isSetter = false;\r\n var setStart: i32 = 0;\r\n var setEnd: i32 = 0;\r\n if (!isInterface) {\r\n if (tn.skip(Token.GET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.GET;\r\n isGetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.SET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.SET | CommonFlags.SET;\r\n isSetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.CONSTRUCTOR)) {\r\n flags |= CommonFlags.CONSTRUCTOR;\r\n isConstructor = true;\r\n if (flags & CommonFlags.STATIC) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(staticStart, staticEnd), \"static\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n }\r\n }\r\n\r\n if (!isConstructor && !tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var name = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n let typeParametersStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.An_accessor_cannot_have_type_parameters,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else {\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n }\r\n\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let signatureStart = tn.tokenPos;\r\n let parameters = this.parseParameters(tn, isConstructor);\r\n if (!parameters) return null;\r\n let thisType = this.parseParametersThis;\r\n if (isConstructor) {\r\n for (let i = 0, k = parameters.length; i < k; ++i) {\r\n let parameter = parameters[i];\r\n if (parameter.isAny(\r\n CommonFlags.PUBLIC |\r\n CommonFlags.PROTECTED |\r\n CommonFlags.PRIVATE |\r\n CommonFlags.READONLY\r\n )) {\r\n let implicitFieldDeclaration = Node.createFieldDeclaration(\r\n parameter.name,\r\n parameter.type,\r\n null, // initialized via parameter\r\n null,\r\n parameter.flags | CommonFlags.INSTANCE,\r\n parameter.range\r\n );\r\n implicitFieldDeclaration.parameterIndex = i;\r\n implicitFieldDeclaration.parent = parent;\r\n parameter.implicitFieldDeclaration = implicitFieldDeclaration;\r\n parent.members.push(implicitFieldDeclaration);\r\n }\r\n }\r\n } else if (isGetter) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n );\r\n }\r\n } else if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n );\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n );\r\n }\r\n }\r\n\r\n let returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (name.kind == NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n );\r\n } else if (isSetter) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,\r\n tn.range()\r\n );\r\n }\r\n returnType = this.parseType(tn, name.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n if (!isSetter && name.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n let signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n let body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n } else if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract,\r\n tn.range(), name.text\r\n ); // recoverable\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT) && !isInterface) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n let retMethod = Node.createMethodDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retMethod;\r\n\r\n } else if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Constructor_implementation_is_missing,\r\n name.range\r\n );\r\n\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n name.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(getStart, getEnd), \"get\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.SET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(setStart, setEnd), \"set\"\r\n ); // recoverable\r\n }\r\n\r\n let type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n initializer = this.parseExpression(tn);\r\n if (!initializer) return null;\r\n }\r\n let retField = Node.createFieldDeclaration(\r\n name,\r\n type,\r\n initializer,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retField;\r\n }\r\n return null;\r\n }\r\n\r\n parseNamespace(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): NamespaceDeclaration | null {\r\n\r\n // at 'namespace': Identifier '{' (Variable | Function)* '}'\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n let ns = Node.createNamespaceDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseTopLevelStatement(tn, ns);\r\n if (!member) return null;\r\n member.parent = ns;\r\n members.push(member);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ns;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExport(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n startPos: i32\r\n ): ExportStatement | null {\r\n\r\n // at 'export': '{' ExportMember (',' ExportMember)* }' ('from' StringLiteral)? ';'?\r\n\r\n var path: StringLiteralExpression | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseExportMember(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let ret = Node.createExportStatement(members, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = ret.internalPath;\r\n if (internalPath !== null && !this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret = Node.createExportStatement(null, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = assert(ret.internalPath);\r\n let source = tn.source;\r\n if (!source.exportPaths) source.exportPaths = new Set();\r\n source.exportPaths.add(internalPath);\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportMember(\r\n tn: Tokenizer\r\n ): ExportMember | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifierName()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createExportMember(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImport(\r\n tn: Tokenizer\r\n ): ImportStatement | null {\r\n\r\n // at 'import':\r\n // ('{' (ImportMember (',' ImportMember)* '}') | ('*' 'as' Identifier)?\r\n // 'from' StringLiteral ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var members: ImportDeclaration[] | null = null;\r\n var namespaceName: IdentifierExpression | null = null;\r\n var skipFrom = false;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseImportDeclaration(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n namespaceName = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"as\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n skipFrom = true;\r\n }\r\n\r\n if (skipFrom || tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n let path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret: ImportStatement;\r\n if (namespaceName) {\r\n assert(!members);\r\n ret = Node.createImportStatementWithWildcard(namespaceName, path, tn.range(startPos, tn.pos));\r\n } else {\r\n ret = Node.createImportStatement(members, path, tn.range(startPos, tn.pos));\r\n }\r\n let internalPath = ret.internalPath;\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImportDeclaration(\r\n tn: Tokenizer\r\n ): ImportDeclaration | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifierName()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createImportDeclaration(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportImport(\r\n tn: Tokenizer,\r\n startPos: i32\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let ret = Node.createExportImportStatement(identifier, asIdentifier, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseStatement(\r\n tn: Tokenizer,\r\n topLevel: bool = false\r\n ): Statement | null {\r\n\r\n // at previous token\r\n\r\n var state = tn.mark();\r\n var token = tn.next();\r\n var statement: Statement | null = null;\r\n switch (token) {\r\n case Token.BREAK: {\r\n statement = this.parseBreak(tn);\r\n break;\r\n }\r\n case Token.CONST: {\r\n statement = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.CONTINUE: {\r\n statement = this.parseContinue(tn);\r\n break;\r\n }\r\n case Token.DO: {\r\n statement = this.parseDoStatement(tn);\r\n break;\r\n }\r\n case Token.FOR: {\r\n statement = this.parseForStatement(tn);\r\n break;\r\n }\r\n case Token.IF: {\r\n statement = this.parseIfStatement(tn);\r\n break;\r\n }\r\n case Token.LET: {\r\n statement = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.VAR: {\r\n statement = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n statement = this.parseBlockStatement(tn, topLevel);\r\n break;\r\n }\r\n case Token.RETURN: {\r\n if (topLevel) {\r\n this.error(\r\n DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n statement = this.parseReturn(tn);\r\n break;\r\n }\r\n case Token.SEMICOLON: {\r\n return Node.createEmptyStatement(tn.range(tn.tokenPos));\r\n }\r\n case Token.SWITCH: {\r\n statement = this.parseSwitchStatement(tn);\r\n break;\r\n }\r\n case Token.THROW: {\r\n statement = this.parseThrowStatement(tn);\r\n break;\r\n }\r\n case Token.TRY: {\r\n statement = this.parseTryStatement(tn);\r\n break;\r\n }\r\n case Token.VOID: {\r\n statement = this.parseVoidStatement(tn);\r\n break;\r\n }\r\n case Token.WHILE: {\r\n statement = this.parseWhileStatement(tn);\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n tn.reset(state);\r\n statement = this.parseExpressionStatement(tn);\r\n break;\r\n }\r\n }\r\n if (!statement) { // has been reported\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n }\r\n return statement;\r\n }\r\n\r\n parseBlockStatement(\r\n tn: Tokenizer,\r\n topLevel: bool\r\n ): BlockStatement | null {\r\n\r\n // at '{': Statement* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let state = tn.mark();\r\n let statement = this.parseStatement(tn, topLevel);\r\n if (!statement) {\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n statements.push(statement);\r\n }\r\n }\r\n var ret = Node.createBlockStatement(statements, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseBreak(\r\n tn: Tokenizer\r\n ): BreakStatement | null {\r\n\r\n // at 'break': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createBreakStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseContinue(\r\n tn: Tokenizer\r\n ): ContinueStatement | null {\r\n\r\n // at 'continue': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createContinueStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseDoStatement(\r\n tn: Tokenizer\r\n ): DoStatement | null {\r\n\r\n // at 'do': Statement 'while' '(' Expression ')' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n if (tn.skip(Token.WHILE)) {\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let ret = Node.createDoStatement(statement, condition, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"while\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExpressionStatement(\r\n tn: Tokenizer\r\n ): ExpressionStatement | null {\r\n\r\n // at previous token\r\n\r\n var expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n\r\n var ret = Node.createExpressionStatement(expr);\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseForStatement(\r\n tn: Tokenizer\r\n ): ForStatement | null {\r\n\r\n // at 'for': '(' Statement? Expression? ';' Expression? ')' Statement\r\n\r\n var startPos = tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let initializer: Statement | null = null;\r\n\r\n if (tn.skip(Token.CONST)) {\r\n initializer = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n } else if (tn.skip(Token.LET)) {\r\n initializer = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n } else if (tn.skip(Token.VAR)) {\r\n initializer = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n\r\n } else if (!tn.skip(Token.SEMICOLON)) {\r\n initializer = this.parseExpressionStatement(tn);\r\n if (!initializer) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let condition: ExpressionStatement | null = null;\r\n if (!tn.skip(Token.SEMICOLON)) {\r\n condition = this.parseExpressionStatement(tn);\r\n if (!condition) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let incrementor: Expression | null = null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n incrementor = this.parseExpression(tn);\r\n if (!incrementor) return null;\r\n\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n return Node.createForStatement(\r\n initializer,\r\n condition\r\n ? condition.expression\r\n : null,\r\n incrementor,\r\n statement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseIfStatement(\r\n tn: Tokenizer\r\n ): IfStatement | null {\r\n\r\n // at 'if': '(' Expression ')' Statement ('else' Statement)?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let elseStatement: Statement | null = null;\r\n if (tn.skip(Token.ELSE)) {\r\n elseStatement = this.parseStatement(tn);\r\n if (!elseStatement) return null;\r\n }\r\n return Node.createIfStatement(\r\n condition,\r\n statement,\r\n elseStatement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchStatement(\r\n tn: Tokenizer\r\n ): SwitchStatement | null {\r\n\r\n // at 'switch': '(' Expression ')' '{' SwitchCase* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n let ret = Node.createSwitchStatement(condition, cases, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchCase(\r\n tn: Tokenizer\r\n ): SwitchCase | null {\r\n\r\n var startPos = tn.tokenPos;\r\n var statements: Statement[],\r\n statement: Statement | null;\r\n\r\n // 'case' Expression ':' Statement*\r\n\r\n if (tn.skip(Token.CASE)) {\r\n let label = this.parseExpression(tn);\r\n if (!label) return null;\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(label, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n\r\n // 'default' ':' Statement*\r\n\r\n } else if (tn.skip(Token.DEFAULT)) {\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(null, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._case_or_default_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseThrowStatement(\r\n tn: Tokenizer\r\n ): ThrowStatement | null {\r\n\r\n // at 'throw': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n var ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTryStatement(\r\n tn: Tokenizer\r\n ): TryStatement | null {\r\n\r\n // at 'try':\r\n // '{' Statement* '}'\r\n // ('catch' '(' VariableMember ')' '{' Statement* '}')?\r\n // ('finally' '{' Statement* '}'? ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var stmt: Statement | null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n statements.push(stmt);\r\n }\r\n let catchVariable: IdentifierExpression | null = null;\r\n let catchStatements: Statement[] | null = null;\r\n let finallyStatements: Statement[] | null = null;\r\n if (tn.skip(Token.CATCH)) {\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n catchVariable = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n catchStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n catchStatements.push(stmt);\r\n }\r\n }\r\n if (tn.skip(Token.FINALLY)) {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n finallyStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n finallyStatements.push(stmt);\r\n }\r\n }\r\n if (!(catchStatements || finallyStatements)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"catch\"\r\n );\r\n return null;\r\n }\r\n let ret = Node.createTryStatement(\r\n statements,\r\n catchVariable,\r\n catchStatements,\r\n finallyStatements,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseTypeDeclaration(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier ('<' TypeParameters '>')? '=' Type ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n if (tn.skip(Token.EQUALS)) {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n let ret = Node.createTypeDeclaration(\r\n name,\r\n typeParameters,\r\n type,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVoidStatement(\r\n tn: Tokenizer\r\n ): VoidStatement | null {\r\n\r\n // at 'void': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn, Precedence.GROUPING);\r\n if (!expression) return null;\r\n var ret = Node.createVoidStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseWhileStatement(\r\n tn: Tokenizer\r\n ): WhileStatement | null {\r\n\r\n // at 'while': '(' Expression ')' Statement ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let ret = Node.createWhileStatement(expression, statement, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n // expressions\r\n // see: http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm#climbing\r\n\r\n parseExpressionStart(\r\n tn: Tokenizer\r\n ): Expression | null {\r\n\r\n var token = tn.next(IdentifierHandling.PREFER);\r\n var startPos = tn.tokenPos;\r\n var precedence = determinePrecedenceStart(token);\r\n if (precedence != Precedence.NONE) {\r\n let operand: Expression | null;\r\n\r\n // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions)\r\n\r\n // NewExpression\r\n if (token == Token.NEW) {\r\n operand = this.parseExpression(tn, Precedence.CALL);\r\n if (!operand) return null;\r\n if (operand.kind == NodeKind.CALL) {\r\n return Node.createNewExpression(\r\n (operand).expression,\r\n (operand).typeArguments,\r\n (operand).arguments,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n } else {\r\n operand = this.parseExpression(tn, precedence);\r\n if (!operand) return null;\r\n }\r\n\r\n // UnaryPrefixExpression\r\n if (token == Token.PLUS_PLUS || token == Token.MINUS_MINUS) {\r\n if (\r\n operand.kind != NodeKind.IDENTIFIER &&\r\n operand.kind != NodeKind.ELEMENTACCESS &&\r\n operand.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n operand.range\r\n );\r\n }\r\n }\r\n return Node.createUnaryPrefixExpression(token, operand, tn.range(startPos, tn.pos));\r\n }\r\n\r\n var expr: Expression | null = null;\r\n switch (token) {\r\n\r\n case Token.NULL: return Node.createNullExpression(tn.range());\r\n case Token.TRUE: return Node.createTrueExpression(tn.range());\r\n case Token.FALSE: return Node.createFalseExpression(tn.range());\r\n\r\n // ParenthesizedExpression\r\n // FunctionExpression\r\n case Token.OPENPAREN: {\r\n\r\n // determine whether this is a function expression\r\n if (tn.skip(Token.CLOSEPAREN)) { // must be a function expression (fast route)\r\n return this.parseFunctionExpressionCommon(\r\n tn,\r\n Node.createEmptyIdentifierExpression(tn.range(startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n let state = tn.mark();\r\n let again = true;\r\n do {\r\n switch (tn.next(IdentifierHandling.PREFER)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT: {\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n switch (tn.next()) {\r\n\r\n // if we got here, check for arrow\r\n case Token.CLOSEPAREN: {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n again = false;\r\n break;\r\n }\r\n // fall-through\r\n }\r\n // function expression\r\n case Token.COLON: { // type annotation\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.QUESTION: // optional parameter or ternary\r\n case Token.COMMA: {\r\n break; // continue\r\n }\r\n // parenthesized expression\r\n // case Token.EQUALS: // missing type annotation for simplicity\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n // parenthesized expression\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n } while (again);\r\n tn.reset(state);\r\n\r\n // parse parenthesized\r\n expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return Node.createParenthesizedExpression(expr, tn.range(startPos, tn.pos));\r\n }\r\n // ArrayLiteralExpression\r\n case Token.OPENBRACKET: {\r\n let elementExpressions = new Array();\r\n while (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (tn.peek() == Token.COMMA) {\r\n expr = null; // omitted\r\n } else {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n }\r\n elementExpressions.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACKET)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n }\r\n // ObjectLiteralExpression\r\n case Token.OPENBRACE: {\r\n let startPos = tn.tokenPos;\r\n let names = new Array();\r\n let values = new Array();\r\n let name: IdentifierExpression;\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n if (!tn.skipIdentifier()) {\r\n if (!tn.skip(Token.STRINGLITERAL)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(),\r\n );\r\n return null;\r\n }\r\n name = Node.createIdentifierExpression(tn.readString(), tn.range());\r\n name.set(CommonFlags.QUOTED);\r\n } else {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n 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 element of this.program.moduleLevelExports.values()) this.visitElement(element);\r\n var todo = this.todo;\r\n for (let i = 0; i < todo.length; ) this.visitElement(todo[i]);\r\n }\r\n\r\n /** Visits an element.*/\r\n visitElement(element: Element): void {\r\n if (element.is(CommonFlags.PRIVATE) && !this.includePrivate) return;\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitGlobal(element);\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.visitFunctionInstances(element);\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n this.visitClassInstances(element);\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n if ((element).is(CommonFlags.COMPILED)) this.visitField(element);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prop = element;\r\n let getter = prop.getterPrototype;\r\n if (getter) this.visitFunctionInstances(getter);\r\n let setter = prop.setterPrototype;\r\n if (setter) this.visitFunctionInstances(setter);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n if (hasCompiledMember(element)) this.visitNamespace(element);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n\r\n private visitFunctionInstances(element: FunctionPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitFunction(instance);\r\n }\r\n }\r\n\r\n private visitClassInstances(element: ClassPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitClass(instance);\r\n }\r\n }\r\n\r\n abstract visitGlobal(element: Global): void;\r\n abstract visitEnum(element: Enum): void;\r\n abstract visitFunction(element: Function): void;\r\n abstract visitClass(element: Class): void;\r\n abstract visitInterface(element: Interface): void;\r\n abstract visitField(element: Field): void;\r\n abstract visitNamespace(element: Element): void;\r\n}\r\n\r\n/** A WebIDL definitions builder. */\r\nexport class IDLBuilder extends ExportsWalker {\r\n\r\n /** Builds WebIDL definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new IDLBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n if (isConst) {\r\n switch (element.constantValueKind) {\r\n case ConstantValueKind.INTEGER: {\r\n sb.push(\" = \");\r\n sb.push(i64_to_string(element.constantIntegerValue));\r\n break;\r\n }\r\n case ConstantValueKind.FLOAT: {\r\n sb.push(\" = \");\r\n sb.push(element.constantFloatValue.toString());\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n let isConst = (member).is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"readonly \");\r\n sb.push(\"unsigned long \");\r\n sb.push(name);\r\n if (isConst) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n }\r\n for (let member of members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) this.visitElement(member);\r\n }\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(this.typeToString(parameters[i]));\r\n sb.push(\" \");\r\n sb.push(signature.getParameterName(i));\r\n }\r\n sb.push(\");\\n\");\r\n var members = element.members;\r\n if (members && members.size) {\r\n indent(sb, this.indentLevel);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n // TODO\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n // TODO\r\n }\r\n\r\n visitNamespace(element: Namespace): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"byte\";\r\n case TypeKind.I16: return \"short\";\r\n case TypeKind.I32: return \"long\";\r\n case TypeKind.I64: return \"long long\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"long long\" : \"long\";\r\n case TypeKind.U8: return \"octet\";\r\n case TypeKind.U16: return \"unsigned short\";\r\n case TypeKind.U32: return \"unsigned long\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"unsigned long long\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"unsigned long long\" : \"unsigned long\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"boolean\";\r\n case TypeKind.F32: return \"unrestricted float\";\r\n case TypeKind.F64: return \"unrestricted double\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"interface ASModule {\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n/** A TypeScript definitions builder. */\r\nexport class TSDBuilder extends ExportsWalker {\r\n\r\n /** Builds TypeScript definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new TSDBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.STATIC)) {\r\n if (isConst) sb.push(\"static readonly \");\r\n else sb.push(\"static \");\r\n } else {\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"var \");\r\n }\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"enum \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n let numMembers = members.size;\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n indent(sb, this.indentLevel);\r\n sb.push(name);\r\n if (member.is(CommonFlags.INLINED)) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\",\\n\");\r\n --numMembers;\r\n }\r\n }\r\n if (numMembers) this.visitNamespace(element);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n if (element.isAny(CommonFlags.PRIVATE | CommonFlags.SET)) return;\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.GET)) {\r\n sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally\r\n sb.push(\": \");\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\";\\n\");\r\n return;\r\n } else {\r\n if (!element.isAny(CommonFlags.STATIC | CommonFlags.INSTANCE)) sb.push(\"function \");\r\n sb.push(element.simpleName);\r\n }\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(signature.getParameterName(i));\r\n sb.push(\": \");\r\n sb.push(this.typeToString(parameters[i]));\r\n }\r\n if (element.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.SET)) {\r\n sb.push(\")\");\r\n } else {\r\n sb.push(\"): \");\r\n sb.push(this.typeToString(signature.returnType));\r\n }\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n var isInterface = element.kind == ElementKind.INTERFACE;\r\n indent(sb, this.indentLevel++);\r\n if (isInterface) {\r\n sb.push(\"interface \");\r\n } else {\r\n if (element.is(CommonFlags.ABSTRACT)) sb.push(\"abstract \");\r\n sb.push(\"class \");\r\n }\r\n sb.push(element.simpleName);\r\n var base = element.base;\r\n if (base && base.is(CommonFlags.COMPILED | CommonFlags.MODULE_EXPORT)) {\r\n sb.push(\" extends \");\r\n sb.push(base.simpleName); // TODO: fqn\r\n }\r\n sb.push(\" {\\n\");\r\n var members = element.prototype.members; // static\r\n if (members) {\r\n for (let member of members.values()) {\r\n this.visitElement(member);\r\n }\r\n }\r\n var ctor = element.constructorInstance;\r\n if (ctor) this.visitFunction(ctor);\r\n members = element.members; // instance\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n if (element.is(CommonFlags.PRIVATE)) return;\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.READONLY)) sb.push(\"readonly \");\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitNamespace(element: Element): void {\r\n var members = element.members;\r\n if (members && members.size) {\r\n let sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"namespace \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"I64\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"I64\" : \"i32\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"U64\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"U64\" : \"u32\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"declare module ASModule {\\n\");\r\n sb.push(\" type i8 = number;\\n\");\r\n sb.push(\" type i16 = number;\\n\");\r\n sb.push(\" type i32 = number;\\n\");\r\n sb.push(\" type u8 = number;\\n\");\r\n sb.push(\" type u16 = number;\\n\");\r\n sb.push(\" type u32 = number;\\n\");\r\n sb.push(\" type f32 = number;\\n\");\r\n sb.push(\" type f64 = number;\\n\");\r\n sb.push(\" type bool = any;\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n sb.push(\"export default ASModule;\\n\");\r\n return this.sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n/** Tests if a namespace-like element has at least one compiled member. */\r\nfunction hasCompiledMember(element: Element): bool {\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (member.is(CommonFlags.COMPILED) || hasCompiledMember(member)) return true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n","/**\r\n * A decompiler that generates low-level AssemblyScript from WebAssembly binaries.\r\n * @module decompiler\r\n *//***/\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n ExpressionId,\r\n UnaryOp,\r\n BinaryOp,\r\n HostOp,\r\n FunctionRef,\r\n ExpressionRef,\r\n Index,\r\n getFunctionName,\r\n getFunctionBody,\r\n getFunctionParamCount,\r\n getFunctionParamType,\r\n getFunctionResultType,\r\n getExpressionId,\r\n getExpressionType,\r\n getBlockName,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getIfCondition,\r\n getIfTrue,\r\n getIfFalse,\r\n getLoopName,\r\n getLoopBody,\r\n getBreakName,\r\n getBreakCondition,\r\n getGetLocalIndex,\r\n getSetLocalIndex,\r\n getSetLocalValue,\r\n getLoadOffset,\r\n getLoadPtr,\r\n getStoreOffset,\r\n getStorePtr,\r\n getStoreValue,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getUnaryOp,\r\n getUnaryValue,\r\n getBinaryOp,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getSelectThen,\r\n getSelectElse,\r\n getSelectCondition,\r\n getDropValue,\r\n getReturnValue,\r\n getHostOp,\r\n getHostOperand\r\n} from \"./module\";\r\n\r\n// TODO :-)\r\n\r\nexport class Decompiler {\r\n\r\n static decompile(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n }\r\n\r\n text: string[] = [];\r\n functionId: i32 = 0;\r\n\r\n constructor() { }\r\n\r\n /** Decompiles a module to an AST that can then be serialized. */\r\n decompile(module: Module): void {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n decompileFunction(func: FunctionRef): void {\r\n var name = getFunctionName(func) || \"$\" + this.functionId.toString(10);\r\n var body = getFunctionBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (let i: Index = 0, k: Index = getFunctionParamCount(func); i < k; ++i) {\r\n if (i > 0) this.push(\", \");\r\n this.push(\"$\");\r\n this.push(i.toString(10));\r\n this.push(\": \");\r\n this.push(nativeTypeToType(getFunctionParamType(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(getFunctionResultType(func)));\r\n this.push(\" \");\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"\\n}\\n\");\r\n }\r\n ++this.functionId;\r\n }\r\n\r\n decompileExpression(expr: ExpressionRef): void {\r\n var id = getExpressionId(expr);\r\n var type = getExpressionType(expr);\r\n\r\n var nested: ExpressionRef;\r\n var string: string | null;\r\n var i: Index, k: Index;\r\n\r\n switch (id) {\r\n case ExpressionId.Block: { // TODO: magic\r\n if ((string = getBlockName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = getBlockChildCount(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(getBlockChild(expr, i));\r\n }\r\n this.push(\"}\\n\");\r\n return;\r\n }\r\n case ExpressionId.If: {\r\n if (type == NativeType.None) {\r\n this.push(\"if (\");\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(getIfTrue(expr));\r\n if (nested = getIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(getIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(getIfFalse(expr));\r\n }\r\n return;\r\n }\r\n case ExpressionId.Loop: {\r\n if ((string = getLoopName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(getLoopBody(expr));\r\n this.push(\"while (0);\\n\");\r\n }\r\n case ExpressionId.Break: {\r\n if (nested = getBreakCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = getBreakName(expr)) != null) {\r\n this.push(\"break \");\r\n this.push(string);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"break;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Switch:\r\n case ExpressionId.Call:\r\n case ExpressionId.CallImport:\r\n case ExpressionId.CallIndirect: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.GetLocal: {\r\n this.push(\"$\");\r\n this.push(getGetLocalIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(getSetLocalIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(getSetLocalValue(expr));\r\n return;\r\n }\r\n case ExpressionId.GetGlobal:\r\n case ExpressionId.SetGlobal: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.Load: {\r\n this.push(\"load<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getLoadOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getLoadPtr(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Store: {\r\n this.push(\"store<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getStoreOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getStorePtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getStoreValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Const: {\r\n switch (type) {\r\n case NativeType.I32: {\r\n this.push(getConstValueI32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.I64: {\r\n this.push(\r\n i64_to_string(\r\n i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(getConstValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(getConstValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NegF32:\r\n case UnaryOp.NegF64: {\r\n this.push(\"-\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: {\r\n this.push(\"!\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Binary: { // TODO: precedence\r\n switch (getBinaryOp(expr)) {\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.SubI32:\r\n case BinaryOp.SubI64:\r\n case BinaryOp.SubF32:\r\n case BinaryOp.SubF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.MulI32:\r\n case BinaryOp.MulI64:\r\n case BinaryOp.MulF32:\r\n case BinaryOp.MulF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivI32:\r\n case BinaryOp.DivI64:\r\n case BinaryOp.DivF32:\r\n case BinaryOp.DivF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n case ExpressionId.Select: {\r\n this.push(\"select<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.decompileExpression(getSelectThen(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectElse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(getDropValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = getReturnValue(expr)) {\r\n this.push(\"return \");\r\n this.decompileExpression(nested);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"return;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Host: {\r\n switch (getHostOp(expr)) {\r\n case HostOp.CurrentMemory: {\r\n this.push(\"current_memory()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"grow_memory(\");\r\n this.decompileExpression(getHostOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Nop: {\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Unreachable: {\r\n this.push(\"unreachable()\");\r\n return;\r\n }\r\n case ExpressionId.AtomicCmpxchg:\r\n case ExpressionId.AtomicRMW:\r\n case ExpressionId.AtomicWait:\r\n case ExpressionId.AtomicWake:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n private push(text: string): void {\r\n // mostly here so we can add debugging if necessary\r\n this.text.push(text);\r\n }\r\n\r\n finish(): string {\r\n var ret = this.text.join(\"\");\r\n this.text = [];\r\n return ret;\r\n }\r\n}\r\n\r\nfunction nativeTypeToType(type: NativeType): string {\r\n switch (type) {\r\n case NativeType.None: return \"void\";\r\n case NativeType.I32: return \"i32\";\r\n case NativeType.I64: return \"i64\";\r\n case NativeType.F32: return \"f32\";\r\n case NativeType.F64: return \"f64\";\r\n case NativeType.Unreachable: throw new Error(\"unreachable type\");\r\n case NativeType.Auto: throw new Error(\"auto type\");\r\n default: throw new Error(\"unexpected type\");\r\n }\r\n}\r\n","/**\r\n * Low-level C-like compiler API.\r\n * @module index\r\n *//***/\r\n\r\nimport {\r\n Compiler,\r\n Options,\r\n Target,\r\n Feature\r\n} from \"./compiler\";\r\n\r\nimport {\r\n Decompiler\r\n} from \"./decompiler\";\r\n\r\nimport {\r\n IDLBuilder,\r\n TSDBuilder\r\n} from \"./definitions\";\r\n\r\nimport {\r\n DiagnosticMessage,\r\n DiagnosticCategory,\r\n formatDiagnosticMessage\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module\r\n} from \"./module\";\r\n\r\nimport {\r\n Parser\r\n} from \"./parser\";\r\n\r\nimport {\r\n Program\r\n} from \"./program\";\r\n\r\n/** Parses a source file. If `parser` has been omitted a new one is created. */\r\nexport function parseFile(text: string, path: string, isEntry: bool = false,\r\n parser: Parser | null = null\r\n): Parser {\r\n if (!parser) parser = new Parser();\r\n parser.parseFile(text, path, isEntry);\r\n return parser;\r\n}\r\n\r\n/** Obtains the next required file's path. Returns `null` once complete. */\r\nexport function nextFile(parser: Parser): string | null {\r\n return parser.nextFile();\r\n}\r\n\r\n/** Obtains the next diagnostic message. Returns `null` once complete. */\r\nexport function nextDiagnostic(parser: Parser): DiagnosticMessage | null {\r\n var program = parser.program;\r\n return program.diagnosticsOffset < program.diagnostics.length\r\n ? program.diagnostics[program.diagnosticsOffset++]\r\n : null;\r\n}\r\n\r\n/** Formats a diagnostic message to a string. */\r\nexport { formatDiagnosticMessage as formatDiagnostic };\r\n\r\n/** Tests whether a diagnostic is informatory. */\r\nexport function isInfo(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.INFO;\r\n}\r\n\r\n/** Tests whether a diagnostic is a warning. */\r\nexport function isWarning(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.WARNING;\r\n}\r\n\r\n/** Tests whether a diagnostic is an error. */\r\nexport function isError(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.ERROR;\r\n}\r\n\r\n/** Creates a new set of compiler options. */\r\nexport function createOptions(): Options {\r\n return new Options();\r\n}\r\n\r\n/** Sets the `target` option. */\r\nexport function setTarget(options: Options, target: Target): void {\r\n options.target = target;\r\n}\r\n\r\n/** Sets the `noTreeShaking` option. */\r\nexport function setNoTreeShaking(options: Options, noTreeShaking: bool): void {\r\n options.noTreeShaking = noTreeShaking;\r\n}\r\n\r\n/** Sets the `noAssert` option. */\r\nexport function setNoAssert(options: Options, noAssert: bool): void {\r\n options.noAssert = noAssert;\r\n}\r\n\r\n/** Sets the `importMemory` option. */\r\nexport function setImportMemory(options: Options, importMemory: bool): void {\r\n options.importMemory = importMemory;\r\n}\r\n\r\n/** Sets the `importTable` option. */\r\nexport function setImportTable(options: Options, importTable: bool): void {\r\n options.importTable = importTable;\r\n}\r\n\r\n/** Sets the `sourceMap` option. */\r\nexport function setSourceMap(options: Options, sourceMap: bool): void {\r\n options.sourceMap = sourceMap;\r\n}\r\n\r\n/** Sets the `memoryBase` option. */\r\nexport function setMemoryBase(options: Options, memoryBase: u32): void {\r\n options.memoryBase = memoryBase;\r\n}\r\n\r\n/** Sets a 'globalAliases' value. */\r\nexport function setGlobalAlias(options: Options, name: string, alias: string): void {\r\n var globalAliases = options.globalAliases;\r\n if (!globalAliases) options.globalAliases = globalAliases = new Map();\r\n globalAliases.set(name, alias);\r\n}\r\n\r\n/** Sign extension operations. */\r\nexport const FEATURE_SIGN_EXTENSION = Feature.SIGN_EXTENSION;\r\n/** Mutable global imports and exports. */\r\nexport const FEATURE_MUTABLE_GLOBAL = Feature.MUTABLE_GLOBAL;\r\n\r\n/** Enables a specific feature. */\r\nexport function enableFeature(options: Options, feature: Feature): void {\r\n options.features |= feature;\r\n}\r\n\r\n/** Gives the compiler a hint at the optimize levels that will be used later on. */\r\nexport function setOptimizeLevelHints(options: Options, optimizeLevel: i32, shrinkLevel: i32): void {\r\n options.optimizeLevelHint = optimizeLevel;\r\n options.shrinkLevelHint = shrinkLevel;\r\n}\r\n\r\n/** Finishes parsing. */\r\nexport function finishParsing(parser: Parser): Program {\r\n return parser.finish();\r\n}\r\n\r\n/** Compiles the sources computed by the parser to a module. */\r\nexport function compileProgram(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n}\r\n\r\n/** Decompiles a module to its (low level) source. */\r\nexport function decompileModule(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n}\r\n\r\n/** Builds WebIDL definitions for the specified program. */\r\nexport function buildIDL(program: Program): string {\r\n return IDLBuilder.build(program);\r\n}\r\n\r\n/** Builds TypeScript definitions for the specified program. */\r\nexport function buildTSD(program: Program): string {\r\n return TSDBuilder.build(program);\r\n}\r\n\r\n/** Prefix indicating a library file. */\r\nexport { LIBRARY_PREFIX } from \"./common\";\r\n","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n","const Long = global.Long || require(\"long\");\r\n\r\nglobal.i64_zero = Long.ZERO;\r\n\r\nglobal.i64_one = Long.ONE;\r\n\r\nglobal.i64_new = function(lo, hi) {\r\n return Long.fromBits(lo, hi);\r\n};\r\n\r\nglobal.i64_low = function(value) {\r\n return value.low;\r\n};\r\n\r\nglobal.i64_high = function(value) {\r\n return value.high;\r\n};\r\n\r\nglobal.i64_add = function(left, right) {\r\n return left.add(right);\r\n};\r\n\r\nglobal.i64_sub = function(left, right) {\r\n return left.sub(right);\r\n};\r\n\r\nglobal.i64_mul = function(left, right) {\r\n return left.mul(right);\r\n};\r\n\r\nglobal.i64_div = function(left, right) {\r\n return left.div(right);\r\n};\r\n\r\nglobal.i64_div_u = function(left, right) {\r\n return left.toUnsigned().div(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_rem = function(left, right) {\r\n return left.mod(right);\r\n};\r\n\r\nglobal.i64_rem_u = function(left, right) {\r\n return left.toUnsigned().mod(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_and = function(left, right) {\r\n return left.and(right);\r\n};\r\n\r\nglobal.i64_or = function(left, right) {\r\n return left.or(right);\r\n};\r\n\r\nglobal.i64_xor = function(left, right) {\r\n return left.xor(right);\r\n};\r\n\r\nglobal.i64_shl = function(left, right) {\r\n return left.shl(right);\r\n};\r\n\r\nglobal.i64_shr = function(left, right) {\r\n return left.shr(right);\r\n};\r\n\r\nglobal.i64_shr_u = function(left, right) {\r\n return left.shru(right);\r\n};\r\n\r\nglobal.i64_not = function(value) {\r\n return value.not();\r\n};\r\n\r\nglobal.i64_eq = function(left, right) {\r\n return left.eq(right);\r\n};\r\n\r\nglobal.i64_ne = function(left, right) {\r\n return left.ne(right);\r\n};\r\n\r\nglobal.i64_align = function(value, alignment) {\r\n assert(alignment && (alignment & (alignment - 1)) == 0);\r\n var mask = Long.fromInt(alignment - 1);\r\n return value.add(mask).and(mask.not());\r\n};\r\n\r\nglobal.i64_is_i8 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i8.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i8.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i16 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i16.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i16.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i32 = function(value) {\r\n return (value.high === 0 && value.low >= 0)\r\n || (value.high === -1 && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_u8 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u8.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u16 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u16.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u32 = function(value) {\r\n return value.high === 0;\r\n};\r\n\r\nglobal.i64_is_bool = function(value) {\r\n return value.high === 0 && (value.low === 0 || value.low === 1);\r\n};\r\n\r\nconst minSafeF32 = Long.fromNumber(f32.MIN_SAFE_INTEGER);\r\nconst maxSafeF32 = Long.fromNumber(f32.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f32 = function(value) {\r\n return value.gte(minSafeF32) && value.lte(maxSafeF32);\r\n};\r\n\r\nconst minSafeF64 = Long.fromNumber(f64.MIN_SAFE_INTEGER);\r\nconst maxSafeF64 = Long.fromNumber(f64.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f64 = function(value) {\r\n return value.gte(minSafeF64) && value.lte(maxSafeF64);\r\n};\r\n\r\nglobal.i64_to_f32 = function(value) {\r\n return global.Math.fround(value.toNumber());\r\n};\r\n\r\nglobal.i64_to_f64 = function(value) {\r\n return value.toNumber();\r\n};\r\n\r\nglobal.i64_to_string = function(value, unsigned) {\r\n return (unsigned ? value.toUnsigned() : value).toString(10);\r\n};\r\n","const F64 = new Float64Array(1);\r\nconst F32 = new Float32Array(F64.buffer);\r\nconst I32 = new Int32Array(F64.buffer);\r\n\r\nglobal.f32_as_i32 = function(value) {\r\n F32[0] = value;\r\n return I32[0];\r\n};\r\n\r\nglobal.i32_as_f32 = function(value) {\r\n I32[0] = value;\r\n return F32[0];\r\n};\r\n\r\nglobal.f64_as_i64 = function(value) {\r\n F64[0] = value;\r\n return i64_new(I32[0], I32[1]);\r\n};\r\n\r\nglobal.i64_as_f64 = function(value) {\r\n I32[0] = i64_low(value);\r\n I32[1] = i64_high(value);\r\n return F64[0];\r\n};\r\n","/** @module util *//***/\r\n\r\n/** Reads a 32-bit integer from the specified buffer. */\r\nexport function readI32(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset ]\r\n | buffer[offset + 1] << 8\r\n | buffer[offset + 2] << 16\r\n | buffer[offset + 3] << 24;\r\n}\r\n\r\n/** Writes a 32-bit integer to the specified buffer. */\r\nexport function writeI32(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset ] = value;\r\n buffer[offset + 1] = value >>> 8;\r\n buffer[offset + 2] = value >>> 16;\r\n buffer[offset + 3] = value >>> 24;\r\n}\r\n\r\n/** Reads a 64-bit integer from the specified buffer. */\r\nexport function readI64(buffer: Uint8Array, offset: i32): I64 {\r\n var lo = readI32(buffer, offset);\r\n var hi = readI32(buffer, offset + 4);\r\n return i64_new(lo, hi);\r\n}\r\n\r\n/** Writes a 64-bit integer to the specified buffer. */\r\nexport function writeI64(value: I64, buffer: Uint8Array, offset: i32): void {\r\n writeI32(i64_low(value), buffer, offset);\r\n writeI32(i64_high(value), buffer, offset + 4);\r\n}\r\n\r\n/** Reads a 32-bit float from the specified buffer. */\r\nexport function readF32(buffer: Uint8Array, offset: i32): f32 {\r\n return i32_as_f32(readI32(buffer, offset));\r\n}\r\n\r\n/** Writes a 32-bit float to the specified buffer. */\r\nexport function writeF32(value: f32, buffer: Uint8Array, offset: i32): void {\r\n writeI32(f32_as_i32(value), buffer, offset);\r\n}\r\n\r\n/** Reads a 64-bit float from the specified buffer. */\r\nexport function readF64(buffer: Uint8Array, offset: i32): f64 {\r\n return i64_as_f64(readI64(buffer, offset));\r\n}\r\n\r\n/** Writes a 64-bit float to the specified buffer. */\r\nexport function writeF64(value: f64, buffer: Uint8Array, offset: i32): void {\r\n var valueI64 = f64_as_i64(value);\r\n writeI32(i64_low(valueI64), buffer, offset);\r\n writeI32(i64_high(valueI64), buffer, offset + 4);\r\n}\r\n","/** @module util *//***/\r\n\r\nconst indentX1 = \" \";\r\nconst indentX2 = \" \";\r\nconst indentX4 = \" \";\r\n\r\n/** Creates an indentation matching the number of specified levels. */\r\nexport function indent(sb: string[], level: i32): void {\r\n while (level >= 4) {\r\n sb.push(indentX4);\r\n level -= 4;\r\n }\r\n if (level >= 2) {\r\n sb.push(indentX2);\r\n level -= 2;\r\n }\r\n if (level) {\r\n sb.push(indentX1);\r\n }\r\n}\r\n","/** @module util *//***/\r\n\r\nimport {\r\n CharCode\r\n} from \"./charcode\";\r\n\r\nconst separator = CharCode.SLASH;\r\n\r\n/**\r\n * Normalizes the specified path, removing interior placeholders.\r\n * Expects a posix-compatible relative path (not Windows compatible).\r\n */\r\nexport function normalizePath(path: string): string {\r\n var pos = 0;\r\n var len = path.length;\r\n\r\n // trim leading './'\r\n while (pos + 1 < len &&\r\n path.charCodeAt(pos) == CharCode.DOT &&\r\n path.charCodeAt(pos + 1) == separator\r\n ) {\r\n pos += 2;\r\n }\r\n\r\n if (pos > 0 || len < path.length) {\r\n path = path.substring(pos, len);\r\n len -= pos;\r\n pos = 0;\r\n }\r\n\r\n var atEnd: bool;\r\n while (pos + 1 < len) {\r\n atEnd = false;\r\n\r\n // we are only interested in '/.' sequences ...\r\n if (\r\n path.charCodeAt(pos) == separator &&\r\n path.charCodeAt(pos + 1) == CharCode.DOT\r\n ) {\r\n // '/.' ( '/' | $ )\r\n atEnd = pos + 2 == len;\r\n if (atEnd ||\r\n pos + 2 < len &&\r\n path.charCodeAt(pos + 2) == separator\r\n ) {\r\n path = atEnd\r\n ? path.substring(0, pos)\r\n : path.substring(0, pos) + path.substring(pos + 2);\r\n len -= 2;\r\n continue;\r\n }\r\n\r\n // '/.' ( './' | '.' $ )\r\n atEnd = pos + 3 == len;\r\n if (atEnd && path.charCodeAt(pos + 2) == CharCode.DOT ||\r\n pos + 3 < len &&\r\n path.charCodeAt(pos + 2) == CharCode.DOT &&\r\n path.charCodeAt(pos + 3) == separator\r\n ) {\r\n // find preceeding '/'\r\n let ipos = pos;\r\n while (--ipos >= 0) {\r\n if (path.charCodeAt(ipos) == separator) {\r\n if (pos - ipos != 3 ||\r\n path.charCodeAt(ipos + 1) != CharCode.DOT ||\r\n path.charCodeAt(ipos + 2) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = atEnd\r\n ? path.substring(0, ipos)\r\n : path.substring(0, ipos) + path.substring(pos + 3);\r\n len -= pos + 3 - ipos;\r\n pos = ipos - 1; // incremented again at end of loop\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // if there's no preceeding '/', trim start if non-empty\r\n if (ipos < 0 && pos > 0) {\r\n if (pos != 2 ||\r\n path.charCodeAt(0) != CharCode.DOT ||\r\n path.charCodeAt(1) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = path.substring(pos + 4);\r\n len = path.length;\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n pos++;\r\n }\r\n return len > 0 ? path : \".\";\r\n}\r\n\r\n/** Resolves the specified path relative to the specified origin. */\r\nexport function resolvePath(normalizedPath: string, origin: string): string {\r\n if (normalizedPath.startsWith(\"std/\")) {\r\n return normalizedPath;\r\n }\r\n return normalizePath(\r\n dirname(origin) + String.fromCharCode(separator) + normalizedPath\r\n );\r\n}\r\n\r\n/** Obtains the directory portion of a normalized path. */\r\nexport function dirname(normalizedPath: string): string {\r\n var pos = normalizedPath.length;\r\n while (--pos > 0) {\r\n if (normalizedPath.charCodeAt(pos) == separator) {\r\n return normalizedPath.substring(0, pos);\r\n }\r\n }\r\n return \".\";\r\n}\r\n","/** @module util *//***/\r\n\r\n/** An enum of named character codes. */\r\nexport const enum CharCode {\r\n\r\n NULL = 0,\r\n LINEFEED = 0x0A,\r\n CARRIAGERETURN = 0x0D,\r\n LINESEPARATOR = 0x2028,\r\n PARAGRAPHSEPARATOR = 0x2029,\r\n NEXTLINE = 0x0085,\r\n\r\n SPACE = 0x20,\r\n NONBREAKINGSPACE = 0xA0,\r\n ENQUAD = 0x2000,\r\n EMQUAD = 0x2001,\r\n ENSPACE = 0x2002,\r\n EMSPACE = 0x2003,\r\n THREEPEREMSPACE = 0x2004,\r\n FOURPEREMSPACE = 0x2005,\r\n SIXPEREMSPACE = 0x2006,\r\n FIGURESPACE = 0x2007,\r\n PUNCTUATIONSPACE = 0x2008,\r\n THINSPACE = 0x2009,\r\n HAIRSPACE = 0x200A,\r\n ZEROWIDTHSPACE = 0x200B,\r\n NARROWNOBREAKSPACE = 0x202F,\r\n IDEOGRAPHICSPACE = 0x3000,\r\n MATHEMATICALSPACE = 0x205F,\r\n OGHAM = 0x1680,\r\n\r\n _ = 0x5F,\r\n\r\n _0 = 0x30,\r\n _1 = 0x31,\r\n _2 = 0x32,\r\n _3 = 0x33,\r\n _4 = 0x34,\r\n _5 = 0x35,\r\n _6 = 0x36,\r\n _7 = 0x37,\r\n _8 = 0x38,\r\n _9 = 0x39,\r\n\r\n a = 0x61,\r\n b = 0x62,\r\n c = 0x63,\r\n d = 0x64,\r\n e = 0x65,\r\n f = 0x66,\r\n g = 0x67,\r\n h = 0x68,\r\n i = 0x69,\r\n j = 0x6A,\r\n k = 0x6B,\r\n l = 0x6C,\r\n m = 0x6D,\r\n n = 0x6E,\r\n o = 0x6F,\r\n p = 0x70,\r\n q = 0x71,\r\n r = 0x72,\r\n s = 0x73,\r\n t = 0x74,\r\n u = 0x75,\r\n v = 0x76,\r\n w = 0x77,\r\n x = 0x78,\r\n y = 0x79,\r\n z = 0x7A,\r\n\r\n A = 0x41,\r\n B = 0x42,\r\n C = 0x43,\r\n D = 0x44,\r\n E = 0x45,\r\n F = 0x46,\r\n G = 0x47,\r\n H = 0x48,\r\n I = 0x49,\r\n J = 0x4A,\r\n K = 0x4B,\r\n L = 0x4C,\r\n M = 0x4D,\r\n N = 0x4E,\r\n O = 0x4F,\r\n P = 0x50,\r\n Q = 0x51,\r\n R = 0x52,\r\n S = 0x53,\r\n T = 0x54,\r\n U = 0x55,\r\n V = 0x56,\r\n W = 0x57,\r\n X = 0x58,\r\n Y = 0x59,\r\n Z = 0x5a,\r\n\r\n AMPERSAND = 0x26,\r\n ASTERISK = 0x2A,\r\n AT = 0x40,\r\n BACKSLASH = 0x5C,\r\n BACKTICK = 0x60,\r\n BAR = 0x7C,\r\n CARET = 0x5E,\r\n CLOSEBRACE = 0x7D,\r\n CLOSEBRACKET = 0x5D,\r\n CLOSEPAREN = 0x29,\r\n COLON = 0x3A,\r\n COMMA = 0x2C,\r\n DOLLAR = 0x24,\r\n DOT = 0x2E,\r\n DOUBLEQUOTE = 0x22,\r\n EQUALS = 0x3D,\r\n EXCLAMATION = 0x21,\r\n GREATERTHAN = 0x3E,\r\n HASH = 0x23,\r\n LESSTHAN = 0x3C,\r\n MINUS = 0x2D,\r\n OPENBRACE = 0x7B,\r\n OPENBRACKET = 0x5B,\r\n OPENPAREN = 0x28,\r\n PERCENT = 0x25,\r\n PLUS = 0x2B,\r\n QUESTION = 0x3F,\r\n SEMICOLON = 0x3B,\r\n SINGLEQUOTE = 0x27,\r\n SLASH = 0x2F,\r\n TILDE = 0x7E,\r\n\r\n BACKSPACE = 0x08,\r\n FORMFEED = 0x0C,\r\n BYTEORDERMARK = 0xFEFF,\r\n TAB = 0x09,\r\n VERTICALTAB = 0x0B\r\n}\r\n\r\n/** Tests if the specified character code is some sort of line break. */\r\nexport function isLineBreak(c: CharCode): bool {\r\n switch (c) {\r\n case CharCode.LINEFEED:\r\n case CharCode.CARRIAGERETURN:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: {\r\n return true;\r\n }\r\n default: {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is some sort of white space. */\r\nexport function isWhiteSpace(c: i32): bool {\r\n switch (c) {\r\n case CharCode.SPACE:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.NONBREAKINGSPACE:\r\n case CharCode.NEXTLINE:\r\n case CharCode.OGHAM:\r\n case CharCode.NARROWNOBREAKSPACE:\r\n case CharCode.MATHEMATICALSPACE:\r\n case CharCode.IDEOGRAPHICSPACE:\r\n case CharCode.BYTEORDERMARK: {\r\n return true;\r\n }\r\n default: {\r\n return c >= CharCode.ENQUAD && c <= CharCode.ZEROWIDTHSPACE;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is a valid decimal digit. */\r\nexport function isDecimalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._9;\r\n}\r\n\r\n/** Tests if the specified character code is a valid octal digit. */\r\nexport function isOctalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._7;\r\n}\r\n\r\n/** Tests if the specified character code is a valid start of an identifier. */\r\nexport function isIdentifierStart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierStart(c);\r\n}\r\n\r\n/** Tests if the specified character code is a valid keyword character. */\r\nexport function isKeywordCharacter(c: i32): bool {\r\n return c >= CharCode.a && c <= CharCode.z;\r\n}\r\n\r\n/** Tests if the specified character code is a valid part of an identifier. */\r\nexport function isIdentifierPart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c >= CharCode._0 && c <= CharCode._9\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierPart(c);\r\n}\r\n\r\n// storing as u16 to save memory\r\nconst unicodeIdentifierStart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514,\r\n 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774,\r\n 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969,\r\n 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088,\r\n 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384,\r\n 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474,\r\n 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529,\r\n 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613,\r\n 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705,\r\n 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784,\r\n 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873,\r\n 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958,\r\n 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986,\r\n 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125,\r\n 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240,\r\n 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333,\r\n 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455,\r\n 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634,\r\n 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725,\r\n 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757,\r\n 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840,\r\n 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186,\r\n 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293,\r\n 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696,\r\n 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798,\r\n 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992,\r\n 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872,\r\n 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016,\r\n 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389,\r\n 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688,\r\n 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141,\r\n 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424,\r\n 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025,\r\n 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130,\r\n 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188,\r\n 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469,\r\n 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505,\r\n 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520,\r\n 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670,\r\n 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720,\r\n 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540,\r\n 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893,\r\n 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538,\r\n 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888,\r\n 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015,\r\n 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259,\r\n 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520,\r\n 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695,\r\n 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739,\r\n 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798,\r\n 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243,\r\n 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285,\r\n 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323,\r\n 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019,\r\n 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474,\r\n 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\nconst unicodeIdentifierPart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415,\r\n 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520,\r\n 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788,\r\n 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112,\r\n 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423,\r\n 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482,\r\n 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525,\r\n 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602,\r\n 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632,\r\n 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693,\r\n 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757,\r\n 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821,\r\n 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884,\r\n 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929,\r\n 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972,\r\n 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018,\r\n 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088,\r\n 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157,\r\n 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216,\r\n 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285,\r\n 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340,\r\n 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424,\r\n 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515,\r\n 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570,\r\n 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720,\r\n 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751,\r\n 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789,\r\n 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895,\r\n 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028,\r\n 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304,\r\n 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744,\r\n 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808,\r\n 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108,\r\n 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902,\r\n 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099,\r\n 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272,\r\n 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516,\r\n 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783,\r\n 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155,\r\n 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676,\r\n 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027,\r\n 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134,\r\n 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205,\r\n 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417,\r\n 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477,\r\n 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517,\r\n 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559,\r\n 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686,\r\n 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728,\r\n 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449,\r\n 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799,\r\n 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512,\r\n 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783,\r\n 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072,\r\n 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309,\r\n 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584,\r\n 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741,\r\n 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808,\r\n 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203,\r\n 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275,\r\n 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321,\r\n 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008,\r\n 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140,\r\n 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382,\r\n 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\n\r\nfunction lookupInUnicodeMap(code: u16, map: u16[]): bool {\r\n if (code < map[0]) return false;\r\n\r\n var lo = 0;\r\n var hi = map.length;\r\n var mid: i32;\r\n\r\n while (lo + 1 < hi) {\r\n mid = lo + (hi - lo) / 2;\r\n mid -= mid % 2;\r\n if (map[mid] <= code && code <= map[mid + 1]) {\r\n return true;\r\n }\r\n if (code < map[mid]) {\r\n hi = mid;\r\n } else {\r\n lo = mid + 2;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction isUnicodeIdentifierStart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierStart);\r\n}\r\n\r\nfunction isUnicodeIdentifierPart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierPart);\r\n}\r\n","/**\r\n * Built-in elements providing WebAssembly core functionality.\r\n * @module builtins\r\n *//***/\r\n\r\n import {\r\n Compiler,\r\n ConversionKind,\r\n WrapMode\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Expression,\r\n LiteralKind,\r\n LiteralExpression,\r\n StringLiteralExpression\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags\r\n} from \"./types\";\r\n\r\nimport {\r\n BinaryOp,\r\n UnaryOp,\r\n HostOp,\r\n NativeType,\r\n ExpressionRef,\r\n ExpressionId,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI64High,\r\n getConstValueI64Low,\r\n getConstValueI32\r\n} from \"./module\";\r\n\r\nimport {\r\n ElementKind,\r\n FunctionPrototype,\r\n Class,\r\n Field,\r\n OperatorKind,\r\n FlowFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n ReportMode\r\n} from \"./resolver\";\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 (operands.length != 1) {\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 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 compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\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 (operands.length != 1) {\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 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 compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\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 \"current_memory\": { // current_memory() -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.CurrentMemory);\r\n }\r\n case \"grow_memory\": { // grow_memory(pages: i32) -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n arg0 = module.createUnreachable();\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.GrowMemory, null, [ arg0 ]);\r\n }\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n case \"move_memory\": { // move_memory(dest: usize, src: usize: n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.MoveMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n case \"set_memory\": { // set_memory(dest: usize, value: u8, n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n Type.u32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.SetMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n\r\n // other\r\n\r\n case \"changetype\": { // changetype(value: *) -> T\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpressionRetainType(\r\n operands[0],\r\n typeArguments[0],\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.size != typeArguments[0].size) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // if (reportNode.range.source.sourceKind != SourceKind.STDLIB)\r\n // compiler.warning(DiagnosticCode.Operation_is_unsafe, reportNode.range);\r\n return arg0; // any usize to any usize\r\n }\r\n case \"assert\": { // assert(isTrueish: T, message?: string) -> T with T != null\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else if (operands.length > 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.bool, WrapMode.WRAP);\r\n }\r\n\r\n let type = compiler.currentType;\r\n compiler.currentType = type.nonNullableType;\r\n\r\n // just return ifTrueish if assertions are disabled, or simplify if dropped anyway\r\n if (compiler.options.noAssert) {\r\n if (contextualType == Type.void) {\r\n compiler.currentType = Type.void;\r\n return module.createNop();\r\n }\r\n return arg0;\r\n }\r\n\r\n let abort = compileAbort(compiler, operands.length == 2 ? operands[1] : null, reportNode);\r\n\r\n compiler.currentType = type.nonNullableType;\r\n\r\n if (contextualType == Type.void) { // simplify if dropped anyway\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n // TODO: also check for NaN in float assertions, as in `Boolean(NaN) -> false`?\r\n case TypeKind.F32: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n arg0,\r\n module.createF32(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n arg0,\r\n module.createF64(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n default: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.I64)\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F32)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f64, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F64)\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unchecked\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = compiler.currentFunction.flow;\r\n flow.set(FlowFlags.UNCHECKED_CONTEXT);\r\n ret = compiler.compileExpressionRetainType(operands[0], contextualType, WrapMode.NONE);\r\n flow.unset(FlowFlags.UNCHECKED_CONTEXT);\r\n return ret;\r\n }\r\n case \"call_indirect\": { // call_indirect(target: Function | u32, ...args: *[]) -> T\r\n if (operands.length < 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let returnType: Type;\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n returnType = typeArguments[0];\r\n } else {\r\n returnType = contextualType;\r\n }\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n if (compiler.currentType.kind != TypeKind.U32) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let numOperands = operands.length - 1;\r\n let operandExprs = new Array(numOperands);\r\n let signatureParts = new Array(numOperands + 1);\r\n let nativeReturnType = returnType.toNativeType();\r\n let nativeParamTypes = new Array(numOperands);\r\n for (let i = 0; i < numOperands; ++i) {\r\n operandExprs[i] = compiler.compileExpressionRetainType(operands[1 + i], Type.i32, WrapMode.NONE);\r\n let operandType = compiler.currentType;\r\n signatureParts[i] = operandType.toSignatureString();\r\n nativeParamTypes[i] = operandType.toNativeType();\r\n }\r\n signatureParts[numOperands] = returnType.toSignatureString();\r\n let typeName = signatureParts.join(\"\");\r\n let typeRef = module.getFunctionTypeBySignature(nativeReturnType, nativeParamTypes);\r\n if (!typeRef) typeRef = module.addFunctionType(typeName, nativeReturnType, nativeParamTypes);\r\n compiler.currentType = returnType;\r\n // of course this can easily result in a 'RuntimeError: function signature mismatch' trap and\r\n // thus must be used with care. it exists because it *might* be useful in specific scenarios.\r\n return module.createCallIndirect(arg0, operandExprs, typeName);\r\n }\r\n\r\n // conversions\r\n\r\n case \"i8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"isize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"usize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"bool\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.bool;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.bool,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n var expr = deferASMCall(compiler, prototype, operands, contextualType, reportNode);\r\n if (expr) {\r\n if (typeArguments && typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return expr;\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n}\r\n\r\n/** Defers an inline-assembler-like call to a built-in function. */\r\nfunction deferASMCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (prototype.internalName) {\r\n\r\n // TODO: Operators can't be just deferred (don't have a corresponding generic built-in)\r\n // add, sub, mul, div_s, div_u, rem_s, rem_u\r\n // and, or, xor, shl, shr_u, shr_s\r\n // eq, eqz, ne, lt_s, lt_u, le_s, le_u, gt_s, gt_u, ge_s, ge_u\r\n\r\n case \"i32.clz\": return deferASM(\"clz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.clz\": return deferASM(\"clz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.ctz\": return deferASM(\"ctz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.ctz\": return deferASM(\"ctz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.popcnt\": return deferASM(\"popcnt\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.popcnt\": return deferASM(\"popcnt\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotl\": return deferASM(\"rotl\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotl\": return deferASM(\"rotl\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotr\": return deferASM(\"rotr\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotr\": return deferASM(\"rotr\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.abs\": return deferASM(\"abs\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.abs\": return deferASM(\"abs\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.max\": return deferASM(\"max\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.max\": return deferASM(\"max\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.min\": return deferASM(\"min\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.min\": return deferASM(\"min\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.ceil\": return deferASM(\"ceil\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.ceil\": return deferASM(\"ceil\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.floor\": return deferASM(\"floor\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.floor\": return deferASM(\"floor\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.copysign\": return deferASM(\"copysign\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.copysign\": return deferASM(\"copysign\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.nearest\": return deferASM(\"nearest\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.nearest\": return deferASM(\"nearest\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.reinterpret_f32\": return deferASM(\"reinterpret\", compiler, Type.i32, operands, Type.f32, reportNode);\r\n case \"i64.reinterpret_f64\": return deferASM(\"reinterpret\", compiler, Type.i64, operands, Type.f64, reportNode);\r\n case \"f32.reinterpret_i32\": return deferASM(\"reinterpret\", compiler, Type.f32, operands, Type.i32, reportNode);\r\n case \"f64.reinterpret_i64\": return deferASM(\"reinterpret\", compiler, Type.f64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.sqrt\": return deferASM(\"sqrt\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.sqrt\": return deferASM(\"sqrt\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.trunc\": return deferASM(\"trunc\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.trunc\": return deferASM(\"trunc\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u32, reportNode);\r\n case \"i32.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u32, reportNode);\r\n case \"i32.load\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u64, reportNode);\r\n case \"i64.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u64, reportNode);\r\n case \"i64.load32_s\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.load32_u\": return deferASM(\"load\", compiler, Type.u32, operands, Type.u64, reportNode);\r\n case \"i64.load\": return deferASM(\"load\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.load\": return deferASM(\"load\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.load\": return deferASM(\"load\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.store\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.store32\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.store\": return deferASM(\"store\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.store\": return deferASM(\"store\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.store\": return deferASM(\"store\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n }\r\n return 0;\r\n}\r\n\r\n/** A helper for deferring inline-assembler-like calls to built-in functions. */\r\nfunction deferASM(\r\n name: string,\r\n compiler: Compiler,\r\n typeArgument: Type,\r\n operands: Expression[],\r\n valueType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var prototype = assert(compiler.program.elementsLookup.get(name));\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return compileCall(compiler, prototype, [ typeArgument ], operands, valueType, reportNode);\r\n}\r\n\r\n/** Evaluates the constant type of a type argument *or* expression. */\r\nfunction evaluateConstantType(\r\n compiler: Compiler,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n reportNode: Node\r\n): Type | null {\r\n if (operands.length == 0) { // requires type argument\r\n if (!typeArguments || typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return null;\r\n }\r\n return typeArguments[0];\r\n }\r\n if (operands.length == 1) { // optional type argument\r\n if (typeArguments) {\r\n if (typeArguments.length == 1) {\r\n compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n if (typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return null;\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n } else {\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n return compiler.currentType;\r\n }\r\n if (typeArguments && typeArguments.length > 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return null;\r\n}\r\n\r\n/** Evaluates a `constantOffset` argument.*/\r\nfunction evaluateConstantOffset(compiler: Compiler, expression: Expression): i32 {\r\n var expr: ExpressionRef;\r\n var value: i32;\r\n if (compiler.options.isWasm64) {\r\n expr = compiler.precomputeExpression(expression, Type.usize64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I64 ||\r\n getConstValueI64High(expr) != 0 ||\r\n (value = getConstValueI64Low(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n } else {\r\n expr = compiler.precomputeExpression(expression, Type.usize32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I32 ||\r\n (value = getConstValueI32(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n }\r\n return value;\r\n}\r\n\r\nconst allocateInternalName = \"allocate_memory\";\r\n\r\n/** Compiles a memory allocation for an instance of the specified class. */\r\nexport function compileAllocate(\r\n compiler: Compiler,\r\n classInstance: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n assert(classInstance.program == program);\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n\r\n var allocatePrototype = program.elementsLookup.get(allocateInternalName);\r\n if (!allocatePrototype) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, allocateInternalName\r\n );\r\n program.info(\r\n DiagnosticCode.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (allocatePrototype.kind != ElementKind.FUNCTION_PROTOTYPE) {\r\n program.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n reportNode.range, allocatePrototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n var allocateInstance = compiler.resolver.resolveFunction(allocatePrototype, null);\r\n if (!(allocateInstance && compiler.compileFunction(allocateInstance))) return module.createUnreachable();\r\n\r\n compiler.currentType = classInstance.type;\r\n return module.createCall(\r\n allocateInstance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(classInstance.currentMemoryOffset)\r\n : module.createI32(classInstance.currentMemoryOffset)\r\n ],\r\n options.nativeSizeType\r\n );\r\n}\r\n\r\nconst abortInternalName = \"abort\";\r\n\r\n/** Compiles an abort wired to the conditionally imported 'abort' function. */\r\nexport function compileAbort(\r\n compiler: Compiler,\r\n message: Expression | null,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n var module = compiler.module;\r\n\r\n var stringType = program.typesLookup.get(\"string\"); // might be intended\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortPrototype = program.elementsLookup.get(abortInternalName); // might be intended\r\n if (!abortPrototype || abortPrototype.kind != ElementKind.FUNCTION_PROTOTYPE) return module.createUnreachable();\r\n\r\n var abortInstance = compiler.resolver.resolveFunction(abortPrototype, null);\r\n if (!(abortInstance && compiler.compileFunction(abortInstance))) return module.createUnreachable();\r\n\r\n var messageArg = message != null\r\n ? compiler.compileExpression(message, stringType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : stringType.toNativeZero(module);\r\n\r\n var filenameArg = compiler.compileStaticString(reportNode.range.source.normalizedPath);\r\n\r\n compiler.currentType = Type.void;\r\n return module.createBlock(null, [\r\n module.createCallImport(\r\n abortInstance.internalName, [\r\n messageArg,\r\n filenameArg,\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ],\r\n NativeType.None\r\n ),\r\n module.createUnreachable()\r\n ]);\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__24__;","// Copy Binaryen exports to global scope\r\n\r\nconst binaryen = global.Binaryen || require(\"binaryen\");\r\n\r\nfor (var key in binaryen)\r\n if (key.startsWith(\"_Binaryen\") || key.startsWith(\"_Relooper\"))\r\n global[key] = binaryen[key];\r\n\r\n// Utilize Binaryen's heap\r\n\r\nglobal.allocate_memory = function(size) {\r\n if (!size) return 0; // should be safe in our case\r\n return binaryen._malloc(size);\r\n};\r\n\r\nglobal.free_memory = function(ptr) {\r\n if (ptr) binaryen._free(ptr);\r\n};\r\n\r\nglobal.move_memory = function(dest, src, n) {\r\n return binaryen._memmove(dest, src, n);\r\n};\r\n\r\nglobal.store = function(ptr, val) {\r\n binaryen.HEAPU8[ptr] = val;\r\n};\r\n\r\nglobal.load = function(ptr) {\r\n return binaryen.HEAPU8[ptr];\r\n};\r\n\r\n// Implement module stubs\r\n\r\nconst Module = require(\"../../module\").Module;\r\n\r\nModule.prototype.toText = function() {\r\n return new binaryen.Module(this.ref).emitText();\r\n};\r\n\r\nModule.prototype.toAsmjs = function() {\r\n return new binaryen.Module(this.ref).emitAsmjs();\r\n};\r\n","module.exports = globalScope => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n\r\n globalScope[\"allocate_memory\"] = function allocate_memory(size) {\r\n if (!(size >>>= 0)) return 0;\r\n\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7)\r\n HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n\r\n return ptr;\r\n };\r\n\r\n globalScope[\"free_memory\"] = function free_memory(ptr) {\r\n // TODO\r\n };\r\n\r\n globalScope[\"move_memory\"] = function move_memory(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n };\r\n\r\n globalScope[\"store\"] = function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n };\r\n\r\n globalScope[\"load\"] = function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n };\r\n};\r\n","/** @module std/portable *//***/\r\n\r\nvar globalScope = typeof window !== \"undefined\" && window || typeof global !== \"undefined\" && global || self;\r\n\r\nglobalScope.ASC_TARGET = 0;\r\n\r\nObject.defineProperties(\r\n globalScope[\"i8\"] = function i8(value) { return value << 24 >> 24; }\r\n, {\r\n \"MIN_VALUE\": { value: -128, writable: false },\r\n \"MAX_VALUE\": { value: 127, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i16\"] = function i16(value) { return value << 16 >> 16; }\r\n, {\r\n \"MIN_VALUE\": { value: -32768, writable: false },\r\n \"MAX_VALUE\": { value: 32767, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i32\"] = globalScope[\"isize\"] = function i32(value) { return value | 0; }\r\n, {\r\n \"MIN_VALUE\": { value: -2147483648, writable: false },\r\n \"MAX_VALUE\": { value: 2147483647, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u8\"] = function u8(value) { return value & 0xff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 255, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u16\"] = function u16(value) { return value & 0xffff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 65535, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u32\"] = globalScope[\"usize\"] = function u32(value) { return value >>> 0; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 4294967295, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"bool\"] = function bool(value) { return !!value; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 1, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f32\"] = function f32(value) { return Math.fround(value); }\r\n, {\r\n \"MIN_VALUE\": { value: Math.fround(-3.40282347e+38), writable: false },\r\n \"MAX_VALUE\": { value: Math.fround(3.40282347e+38), writable: false },\r\n \"MIN_POSITIVE_VALUE\": { value: Math.fround(1.175494351e-38), writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -16777215, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 16777215, writable: false },\r\n \"EPSILON\": { value: Math.fround(1.19209290e-07), writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f64\"] = function f64(value) { return +value; }\r\n, {\r\n \"MIN_VALUE\": { value: -1.7976931348623157e+308, writable: false },\r\n \"MAX_VALUE\": { value: 1.7976931348623157e+308, writable: false },\r\n \"MIN_POSITIVE_VALUE\": { value: 2.2250738585072014e-308 , writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -9007199254740991, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 9007199254740991, writable: false },\r\n \"EPSILON\": { value: 2.2204460492503131e-16, writable: false }\r\n});\r\n\r\nglobalScope[\"clz\"] = Math.clz32;\r\n\r\nglobalScope[\"ctz\"] = function ctz(value) {\r\n var c = Math.clz32(value & -value);\r\n return value ? 31 - c : c;\r\n};\r\n\r\nglobalScope[\"popcnt\"] = function popcnt(value) {\r\n value -= value >>> 1 & 0x55555555;\r\n value = (value & 0x33333333) + (value >>> 2 & 0x33333333);\r\n return (((value + (value >>> 4)) & 0x0F0F0F0F) * 0x01010101) >>> 24;\r\n};\r\n\r\nglobalScope[\"rotl\"] = function rotl(value, shift) {\r\n shift &= 31;\r\n return (value << shift) | (value >>> (32 - shift));\r\n};\r\n\r\nglobalScope[\"rotr\"] = function rotr(value, shift) {\r\n shift &= 31;\r\n return (value >>> shift) | (value << (32 - shift));\r\n};\r\n\r\nglobalScope[\"abs\"] = Math.abs;\r\n\r\nglobalScope[\"max\"] = Math.max;\r\n\r\nglobalScope[\"min\"] = Math.min;\r\n\r\nglobalScope[\"ceil\"] = Math.ceil;\r\n\r\nglobalScope[\"floor\"] = Math.floor;\r\n\r\n// Adopt code from https://github.com/rfk/wasm-polyfill\r\nglobalScope[\"nearest\"] = function nearest(value) {\r\n if (Math.abs(value - Math.trunc(value)) === 0.5) {\r\n return 2.0 * Math.round(value * 0.5);\r\n }\r\n return Math.round(value);\r\n};\r\n\r\nglobalScope[\"select\"] = function select(ifTrue, ifFalse, condition) {\r\n return condition ? ifTrue : ifFalse;\r\n};\r\n\r\nglobalScope[\"sqrt\"] = Math.sqrt;\r\n\r\nglobalScope[\"trunc\"] = Math.trunc;\r\n\r\nglobalScope[\"copysign\"] = function copysign(x, y) {\r\n return Math.abs(x) * Math.sign(y);\r\n};\r\n\r\nglobalScope[\"bswap\"] = function bswap(value) {\r\n var a = value >> 8 & 0x00FF00FF;\r\n var b = (value & 0x00FF00FF) << 8;\r\n value = a | b;\r\n a = value >> 16 & 0x0000FFFF;\r\n b = (value & 0x0000FFFF) << 16;\r\n return a | b;\r\n};\r\n\r\nglobalScope[\"bswap16\"] = function bswap16(value) {\r\n return ((value << 8) & 0xFF00) | ((value >> 8) & 0x00FF) | (value & 0xFFFF0000);\r\n};\r\n\r\nfunction UnreachableError() {\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, UnreachableError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nUnreachableError.prototype = Object.create(Error.prototype);\r\nUnreachableError.prototype.name = \"UnreachableError\";\r\nUnreachableError.prototype.message = \"unreachable\";\r\n\r\nglobalScope[\"unreachable\"] = function unreachable() {\r\n throw new UnreachableError();\r\n};\r\n\r\nfunction AssertionError(message) {\r\n this.message = message || \"assertion failed\";\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, AssertionError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nAssertionError.prototype = Object.create(Error.prototype);\r\nAssertionError.prototype.name = \"AssertionError\";\r\n\r\nglobalScope[\"assert\"] = function assert(isTrueish, message) {\r\n if (isTrueish) return isTrueish;\r\n throw new AssertionError(message);\r\n};\r\n\r\nglobalScope[\"changetype\"] = function changetype(value) {\r\n return value;\r\n};\r\n\r\nglobalScope[\"parseI32\"] = function parseI32(str, radix) {\r\n return parseInt(str, undefined) | 0;\r\n};\r\n\r\nString[\"fromCharCodes\"] = function fromCharCodes(arr) {\r\n return String.fromCharCode.apply(String, arr);\r\n};\r\n\r\nString[\"fromCodePoints\"] = function fromCodePoints(arr) {\r\n return String.fromCodePoint.apply(String, arr);\r\n};\r\n\r\nglobalScope[\"isInteger\"] = Number.isInteger;\r\n\r\nglobalScope[\"isFloat\"] = function isFloat(arg) {\r\n return typeof arg === \"number\";\r\n};\r\n\r\nglobalScope[\"isReference\"] = function isClass(arg) {\r\n return typeof arg === \"object\" || typeof arg === \"string\";\r\n};\r\n\r\nglobalScope[\"isString\"] = function isString(arg) {\r\n return typeof arg === \"string\" || arg instanceof String;\r\n};\r\n\r\nglobalScope[\"isArray\"] = Array.isArray;\r\n\r\nglobalScope[\"unchecked\"] = function(expr) {\r\n return expr;\r\n};\r\n\r\nglobalScope[\"fmod\"] = function fmod(x, y) {\r\n return x % y;\r\n};\r\n\r\nglobalScope[\"fmodf\"] = function fmodf(x, y) {\r\n return Math.fround(x % y);\r\n};\r\n\r\nglobalScope[\"JSMath\"] = Math;\r\n\r\nrequire(\"./memory\")(globalScope);\r\n","/**\r\n * JavaScript glue code.\r\n * @module glue/js\r\n * @preferred\r\n *//***/\r\n\r\n/// \r\n\r\nimport \"../../../std/portable/index\";\r\nimport \"./binaryen\";\r\nimport \"./float\";\r\nimport \"./i64\";\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/src/compiler.ts b/src/compiler.ts index e69f7c87..f38cc229 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -265,8 +265,8 @@ export class Compiler extends DiagnosticEmitter { currentFunction: Function; /** Current outer function in compilation, if compiling a function expression. */ currentOuterFunction: Function | null = null; - /** Current inline function in compilation. */ - currentInlineFunction: Function | null = null; + /** Current inline functions stack. */ + currentInlineFunctions: Function[] = []; /** Current enum in compilation. */ currentEnum: Enum | null = null; /** Current type in compilation. */ @@ -5259,20 +5259,16 @@ export class Compiler extends DiagnosticEmitter { // Inline if explicitly requested if (inline) { assert(!instance.is(CommonFlags.TRAMPOLINE)); // doesn't make sense - if (instance === this.currentInlineFunction) { - // skip inlining when trying to inline a function into itself and print a warning when - // instead compiling the function the normal way. - if (instance === this.currentFunction) { - this.warning( - DiagnosticCode.Function_0_cannot_be_inlined_into_itself, - reportNode.range, instance.internalName - ); - } + if (this.currentInlineFunctions.includes(instance)) { + this.warning( + DiagnosticCode.Function_0_cannot_be_inlined_into_itself, + reportNode.range, instance.internalName + ); } else { - this.currentInlineFunction = instance; - let ret = this.compileCallInlineUnchecked(instance, argumentExpressions, reportNode, thisArg); - this.currentInlineFunction = null; - return ret; + this.currentInlineFunctions.push(instance); + let expr = this.compileCallInlineUnchecked(instance, argumentExpressions, reportNode, thisArg); + this.currentInlineFunctions.pop(); + return expr; } } diff --git a/tests/compiler/inlining-recursive.optimized.wat b/tests/compiler/inlining-recursive.optimized.wat index d8bcba55..5930ed18 100644 --- a/tests/compiler/inlining-recursive.optimized.wat +++ b/tests/compiler/inlining-recursive.optimized.wat @@ -2,8 +2,16 @@ (type $v (func)) (memory $0 0) (export "foo" (func $inlining-recursive/foo)) + (export "baz" (func $inlining-recursive/baz)) + (export "bar" (func $inlining-recursive/bar)) (export "memory" (memory $0)) (func $inlining-recursive/foo (; 0 ;) (type $v) (call $inlining-recursive/foo) ) + (func $inlining-recursive/baz (; 1 ;) (type $v) + (call $inlining-recursive/bar) + ) + (func $inlining-recursive/bar (; 2 ;) (type $v) + (call $inlining-recursive/baz) + ) ) diff --git a/tests/compiler/inlining-recursive.ts b/tests/compiler/inlining-recursive.ts index deadeb06..21689c60 100644 --- a/tests/compiler/inlining-recursive.ts +++ b/tests/compiler/inlining-recursive.ts @@ -1,4 +1,18 @@ +// direct + @inline export function foo(): void { foo(); } + +// indirect + +@inline +export function bar(): void { + baz(); +} + +@inline +export function baz(): void { + bar(); +} diff --git a/tests/compiler/inlining-recursive.untouched.wat b/tests/compiler/inlining-recursive.untouched.wat index c5378fd0..d168467c 100644 --- a/tests/compiler/inlining-recursive.untouched.wat +++ b/tests/compiler/inlining-recursive.untouched.wat @@ -3,10 +3,22 @@ (global $HEAP_BASE i32 (i32.const 8)) (memory $0 0) (export "foo" (func $inlining-recursive/foo)) + (export "baz" (func $inlining-recursive/baz)) + (export "bar" (func $inlining-recursive/bar)) (export "memory" (memory $0)) (func $inlining-recursive/foo (; 0 ;) (type $v) (block $inlining-recursive/foo|inlined.0 (call $inlining-recursive/foo) ) ) + (func $inlining-recursive/baz (; 1 ;) (type $v) + (call $inlining-recursive/bar) + ) + (func $inlining-recursive/bar (; 2 ;) (type $v) + (block $inlining-recursive/baz|inlined.0 + (block $inlining-recursive/bar|inlined.0 + (call $inlining-recursive/baz) + ) + ) + ) )