diff --git a/dist/assemblyscript.js b/dist/assemblyscript.js index de2bc55e..918c6338 100644 --- a/dist/assemblyscript.js +++ b/dist/assemblyscript.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("binaryen")):"function"==typeof define&&define.amd?define(["binaryen"],t):"object"==typeof exports?exports.assemblyscript=t(require("binaryen")):e.assemblyscript=t(e.binaryen)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=28)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NONE=0]="NONE",e[e.IMPORT=1]="IMPORT",e[e.EXPORT=2]="EXPORT",e[e.DECLARE=4]="DECLARE",e[e.CONST=8]="CONST",e[e.LET=16]="LET",e[e.STATIC=32]="STATIC",e[e.READONLY=64]="READONLY",e[e.ABSTRACT=128]="ABSTRACT",e[e.PUBLIC=256]="PUBLIC",e[e.PRIVATE=512]="PRIVATE",e[e.PROTECTED=1024]="PROTECTED",e[e.GET=2048]="GET",e[e.SET=4096]="SET",e[e.AMBIENT=8192]="AMBIENT",e[e.GENERIC=16384]="GENERIC",e[e.GENERIC_CONTEXT=32768]="GENERIC_CONTEXT",e[e.INSTANCE=65536]="INSTANCE",e[e.CONSTRUCTOR=131072]="CONSTRUCTOR",e[e.ARROW=262144]="ARROW",e[e.MODULE_EXPORT=524288]="MODULE_EXPORT",e[e.MODULE_IMPORT=1048576]="MODULE_IMPORT",e[e.BUILTIN=2097152]="BUILTIN",e[e.COMPILED=4194304]="COMPILED",e[e.INLINED=8388608]="INLINED",e[e.SCOPED=16777216]="SCOPED",e[e.TRAMPOLINE=33554432]="TRAMPOLINE",e[e.VIRTUAL=67108864]="VIRTUAL",e[e.MAIN=134217728]="MAIN"}(t.CommonFlags||(t.CommonFlags={})),t.PATH_DELIMITER="/",t.PARENT_SUBST="..",t.GETTER_PREFIX="get:",t.SETTER_PREFIX="set:",t.INSTANCE_DELIMITER="#",t.STATIC_DELIMITER=".",t.INNER_DELIMITER="~",t.LIBRARY_SUBST="~lib",t.LIBRARY_PREFIX=t.LIBRARY_SUBST+t.PATH_DELIMITER,t.FILESPACE_PREFIX="file:"},function(e,t,r){"use strict";function n(e){for(var r in e)t.hasOwnProperty(r)||(t[r]=e[r])}Object.defineProperty(t,"__esModule",{value:!0}),n(r(21)),n(r(20)),n(r(19)),n(r(18))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(9),a=r(1),s=r(9);function o(e){switch(e){case n.INFO:return"INFO";case n.WARNING:return"WARNING";case n.ERROR:return"ERROR";default:return assert(!1),""}}function c(e){switch(e){case n.INFO:return t.COLOR_BLUE;case n.WARNING:return t.COLOR_YELLOW;case n.ERROR:return t.COLOR_RED;default:return assert(!1),""}}t.DiagnosticCode=s.DiagnosticCode,t.diagnosticCodeToString=s.diagnosticCodeToString,function(e){e[e.INFO=0]="INFO",e[e.WARNING=1]="WARNING",e[e.ERROR=2]="ERROR"}(n=t.DiagnosticCategory||(t.DiagnosticCategory={})),t.diagnosticCategoryToString=o,t.COLOR_BLUE="",t.COLOR_YELLOW="",t.COLOR_RED="",t.COLOR_RESET="",t.diagnosticCategoryToColor=c;var p=function(){function e(e,t,r){this.range=null,this.code=e,this.category=t,this.message=r}return e.create=function(t,r,n,a,s){void 0===n&&(n=null),void 0===a&&(a=null),void 0===s&&(s=null);var o=i.diagnosticCodeToString(t);return null!=n&&(o=o.replace("{0}",n)),null!=a&&(o=o.replace("{1}",a)),null!=s&&(o=o.replace("{2}",s)),new e(t,r,o)},e.createInfo=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.INFO,r,i)},e.createWarning=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.WARNING,r,i)},e.createError=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.ERROR,r,i)},e.prototype.withRange=function(e){return this.range=e,this},e.prototype.toString=function(){return this.range?o(this.category)+" "+this.code.toString(10)+': "'+this.message+'" in '+this.range.source.normalizedPath+":"+this.range.line.toString(10)+":"+this.range.column.toString(10):o(this.category)+" "+this.code.toString(10)+": "+this.message},e}();function l(e,r){void 0===r&&(r=!1);for(var n=e.source.text,i=n.length,s=e.start,o=e.end;s>0&&!a.isLineBreak(n.charCodeAt(s-1));)s--;for(;o=0;--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)}}();Object.defineProperty(t,"__esModule",{value:!0});var i=r(0),a=r(8);t.Token=a.Token,t.Range=a.Range;var s,o=r(1);!function(e){e[e.SOURCE=0]="SOURCE",e[e.TYPE=1]="TYPE",e[e.TYPEPARAMETER=2]="TYPEPARAMETER",e[e.PARAMETER=3]="PARAMETER",e[e.SIGNATURE=4]="SIGNATURE",e[e.IDENTIFIER=5]="IDENTIFIER",e[e.ASSERTION=6]="ASSERTION",e[e.BINARY=7]="BINARY",e[e.CALL=8]="CALL",e[e.COMMA=9]="COMMA",e[e.ELEMENTACCESS=10]="ELEMENTACCESS",e[e.FALSE=11]="FALSE",e[e.FUNCTION=12]="FUNCTION",e[e.INSTANCEOF=13]="INSTANCEOF",e[e.LITERAL=14]="LITERAL",e[e.NEW=15]="NEW",e[e.NULL=16]="NULL",e[e.PARENTHESIZED=17]="PARENTHESIZED",e[e.PROPERTYACCESS=18]="PROPERTYACCESS",e[e.TERNARY=19]="TERNARY",e[e.SUPER=20]="SUPER",e[e.THIS=21]="THIS",e[e.TRUE=22]="TRUE",e[e.CONSTRUCTOR=23]="CONSTRUCTOR",e[e.UNARYPOSTFIX=24]="UNARYPOSTFIX",e[e.UNARYPREFIX=25]="UNARYPREFIX",e[e.BLOCK=26]="BLOCK",e[e.BREAK=27]="BREAK",e[e.CONTINUE=28]="CONTINUE",e[e.DO=29]="DO",e[e.EMPTY=30]="EMPTY",e[e.EXPORT=31]="EXPORT",e[e.EXPORTIMPORT=32]="EXPORTIMPORT",e[e.EXPRESSION=33]="EXPRESSION",e[e.FOR=34]="FOR",e[e.IF=35]="IF",e[e.IMPORT=36]="IMPORT",e[e.RETURN=37]="RETURN",e[e.SWITCH=38]="SWITCH",e[e.THROW=39]="THROW",e[e.TRY=40]="TRY",e[e.VARIABLE=41]="VARIABLE",e[e.VOID=42]="VOID",e[e.WHILE=43]="WHILE",e[e.CLASSDECLARATION=44]="CLASSDECLARATION",e[e.ENUMDECLARATION=45]="ENUMDECLARATION",e[e.ENUMVALUEDECLARATION=46]="ENUMVALUEDECLARATION",e[e.FIELDDECLARATION=47]="FIELDDECLARATION",e[e.FUNCTIONDECLARATION=48]="FUNCTIONDECLARATION",e[e.IMPORTDECLARATION=49]="IMPORTDECLARATION",e[e.INTERFACEDECLARATION=50]="INTERFACEDECLARATION",e[e.METHODDECLARATION=51]="METHODDECLARATION",e[e.NAMESPACEDECLARATION=52]="NAMESPACEDECLARATION",e[e.TYPEDECLARATION=53]="TYPEDECLARATION",e[e.VARIABLEDECLARATION=54]="VARIABLEDECLARATION",e[e.DECORATOR=55]="DECORATOR",e[e.EXPORTMEMBER=56]="EXPORTMEMBER",e[e.SWITCHCASE=57]="SWITCHCASE",e[e.COMMENT=58]="COMMENT"}(s=t.NodeKind||(t.NodeKind={})),t.nodeIsConstantValue=function(e){switch(e){case s.LITERAL:case s.NULL:case s.TRUE:case s.FALSE:return!0}return!1},t.nodeIsCallable=function(e){switch(e){case s.IDENTIFIER:case s.CALL:case s.ELEMENTACCESS:case s.PROPERTYACCESS:return!0}return!1},t.nodeIsGenericCallable=function(e){switch(e){case s.IDENTIFIER:case s.PROPERTYACCESS:return!0}return!1};var c=function(){function e(){this.parent=null,this.flags=i.CommonFlags.NONE}return e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.isAny=function(e){return 0!=(this.flags&e)},e.prototype.set=function(e){this.flags|=e},e.createType=function(e,t,r,n){var i=new l;return i.range=n,i.name=e,e.parent=i,i.typeArguments=t,t&&Re(t,i),i.isNullable=r,i},e.createOmittedType=function(t){return e.createType(e.createIdentifierExpression("",t),null,!1,t)},e.createTypeParameter=function(e,t,r){var n=new u;return n.range=r,n.name=e,e.parent=n,n.extendsType=t,t&&(t.parent=n),n},e.createParameter=function(e,t,r,n,i){var a=new h;return a.range=i,a.name=e,e.parent=a,a.type=t,t&&(t.parent=a),a.initializer=r,r&&(r.parent=a),a.parameterKind=n,a},e.createSignature=function(e,t,r,n,i){var a=new _;return a.range=i,a.parameters=e,Re(e,a),a.returnType=t,t.parent=a,a.explicitThisType=r,r&&(r.parent=a),a.isNullable=n,a},e.createDecorator=function(e,t,r){var n=new y;return n.range=r,n.name=e,e.parent=n,n.arguments=t,t&&Re(t,n),n.decoratorKind=m(e),n},e.createComment=function(e,t,r){var n=new g;return n.range=r,n.commentKind=t,n.text=e,n},e.createIdentifierExpression=function(e,t){var r=new f;return r.range=t,r.text=e,r},e.createEmptyIdentifierExpression=function(e){var t=new f;return t.range=e,t.text="",t},e.createArrayLiteralExpression=function(e,t){var r=new v;return r.range=t,r.elementExpressions=e,function(e,t){for(var r=0,n=e.length;r=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==Y.ENTRY},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLibrary",{get:function(){return this.sourceKind==Y.LIBRARY},enumerable:!0,configurable:!0}),t}(c);t.Source=q;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=be(this,!0)),this.cachedProgramLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"fileLevelInternalName",{get:function(){return this.cachedFileLevelInternalName||(this.cachedFileLevelInternalName=be(this,!1)),this.cachedFileLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevel",{get:function(){var e=this.parent;return!!e&&(!(e.kind==s.VARIABLE&&!(e=e.parent))&&e.kind==s.SOURCE)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevelExport",{get:function(){var e=this.parent;return!(!e||e.kind==s.VARIABLE&&!(e=e.parent))&&(e.kind==s.NAMESPACEDECLARATION?this.is(i.CommonFlags.EXPORT)&&e.isTopLevelExport:e.kind==s.CLASSDECLARATION?this.is(i.CommonFlags.STATIC)&&e.isTopLevelExport:e.kind==s.SOURCE&&this.is(i.CommonFlags.EXPORT))},enumerable:!0,configurable:!0}),t.prototype.needsExplicitExport=function(e){return e.name.text!=e.externalName.text||this.range.source!=e.range.source||!this.isTopLevelExport},t}(Q);t.DeclarationStatement=j;var Z=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t}(j);t.VariableLikeDeclarationStatement=Z;var $=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BLOCK,t}return n(t,e),t}(Q);t.BlockStatement=$;var J=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BREAK,t}return n(t,e),t}(Q);t.BreakStatement=J;var ee=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=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CONTINUE,t}return n(t,e),t}(Q);t.ContinueStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.DO,t}return n(t,e),t}(Q);t.DoStatement=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EMPTY,t}return n(t,e),t}(Q);t.EmptyStatement=ne;var ie=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=ie;var ae=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=ae;var se=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=se;var oe=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=oe;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORT,t}return n(t,e),t}(Q);t.ExportStatement=ce;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPRESSION,t}return n(t,e),t}(Q);t.ExpressionStatement=pe;var le=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}(Z);t.FieldDeclaration=le;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FOR,t}return n(t,e),t}(Q);t.ForStatement=ue;var he=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=he;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return n(t,e),t}(Q);t.IfStatement=de;var _e=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=_e;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORT,t}return n(t,e),t}(Q);t.ImportStatement=me;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return n(t,e),t}(ee);t.InterfaceDeclaration=ye;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return n(t,e),t}(he);t.MethodDeclaration=ge;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.NAMESPACEDECLARATION,t}return n(t,e),t}(j);t.NamespaceDeclaration=Te;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return n(t,e),t}(Q);t.ReturnStatement=Ee;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCHCASE,t}return n(t,e),t}(c);t.SwitchCase=fe;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCH,t}return n(t,e),t}(Q);t.SwitchStatement=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.THROW,t}return n(t,e),t}(Q);t.ThrowStatement=ve;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TRY,t}return n(t,e),t}(Q);t.TryStatement=Ae;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return n(t,e),t}(j);t.TypeDeclaration=Ne;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLEDECLARATION,t}return n(t,e),t}(Z);t.VariableDeclaration=Ce;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return n(t,e),t}(Q);t.VariableStatement=Se;var Oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VOID,t}return n(t,e),t}(Q);t.VoidStatement=Oe;var Le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return n(t,e),t}(Q);function be(e,t){void 0===t&&(t=!1);var r=e.name.text,n=e.parent;return n&&(e.kind!=s.VARIABLEDECLARATION||n.kind!=s.VARIABLE||(n=n.parent))?n.kind==s.CLASSDECLARATION?be(n,t)+(e.is(i.CommonFlags.STATIC)?i.STATIC_DELIMITER:i.INSTANCE_DELIMITER)+r:n.kind==s.NAMESPACEDECLARATION||n.kind==s.ENUMDECLARATION?be(n,t)+i.STATIC_DELIMITER+r:t?r:e.range.source.internalPath+i.PATH_DELIMITER+r:r}function ke(e){return e.endsWith(".ts")&&(e=e.substring(0,e.length-3)),e}function Re(e,t){for(var r=0,n=e.length;r=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return s};Object.defineProperty(t,"__esModule",{value:!0});var s,o=r(0),c=r(2),p=r(7),l=r(4),u=r(3),h=function(){return function(){}}(),d=function(){return function(){}}(),_=function(){return function(){}}();function m(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 y,g,T=new Map,E=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.resolvedThisExpression=null,r.resolvedElementExpression=null,r.sources=[],r}return n(t,e),t.prototype.getSource=function(e){for(var t=this.sources,r=0,n=t.length;r",u+="<"+I+">")}else if(t){var v=t.get(u);if(v)return v}}return(_=this.typesLookup.get(h))||(_=this.typesLookup.get(u))?_:(r&&this.error(c.DiagnosticCode.Cannot_find_name_0,a.name.range,u),null)},t.prototype.resolveTypeArguments=function(e,t,r,n){void 0===r&&(r=null),void 0===n&&(n=null);var i=e.length,a=t?t.length:0;if(i!=a)return a?this.error(c.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.Range.join(t[0].range,t[a-1].range),i.toString(10),a.toString(10)):n&&this.error(c.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range.atEnd,i.toString(10),"0"),null;for(var s=new Array(i),o=0;o"),c=new R(this,K,G,O||d,t),this.instances.set(s,c),this.program.instancesLookup.set(K,c),c},t.prototype.resolvePartial=function(e){assert(this.is(o.CommonFlags.INSTANCE));var r=assert(this.classPrototype);if(!e||!e.length)return this;var n=this.simpleName,i=p.typesToString(e),a=new t(this.program,n,r.internalName+"<"+i+">"+o.INSTANCE_DELIMITER+n,this.declaration,r,this.decoratorFlags);return a.flags=this.flags,a.operatorKind=this.operatorKind,a.classTypeArguments=e,a},t.prototype.resolveUsingTypeArguments=function(e,t,r){var n=null;return!this.is(o.CommonFlags.GENERIC)||(assert(null!=e&&0!=e.length),n=this.program.resolveTypeArguments(assert(this.declaration.typeParameters),e,t,r))?this.resolve(n,t):null},t.prototype.resolveBuiltinTypeArguments=function(e,t){assert(this.is(o.CommonFlags.BUILTIN));var r=null;if(e){var n=e.length;r=new Array(n);for(var i=0;i=0),assert(null!=e.type),e.type.toNativeType()){case 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",F+="<"+E+">"),(f=new P(this,x,F,e,k)).contextualTypeArguments=t,this.instances.set(E,f),this.program.instancesLookup.set(F,f);var D=0;if(k&&(D=k.currentMemoryOffset,k.members)){f.members||(f.members=new Map);try{for(var w=i(k.members.values()),M=w.next();!M.done;M=w.next()){var G=M.value;f.members.set(G.simpleName,G)}}catch(e){u={error:e}}finally{try{M&&!M.done&&(h=w.return)&&h.call(w)}finally{if(u)throw u.error}}}if(this.constructorPrototype){var K=this.constructorPrototype.resolvePartial(e);K&&(f.constructorInstance=K.resolve())}if(this.instanceMembers)try{for(var z=i(this.instanceMembers.values()),V=z.next();!V.done;V=z.next()){var H=V.value;switch(H.kind){case y.FIELD_PROTOTYPE:f.members||(f.members=new Map);var X=H.declaration;if(!X.type)throw new Error("type expected");var W=this.program.resolveType(X.type,f.contextualTypeArguments);if(!W)break;var Y=new B(H,F+o.INSTANCE_DELIMITER+H.simpleName,W,X,f);switch(W.byteSize){case 1:break;case 2:1&D&&++D;break;case 4:3&D&&(D=1+(3|D));break;case 8:7&D&&(D=1+(7|D));break;default:assert(!1)}Y.memoryOffset=D,D+=W.byteSize,f.members.set(H.simpleName,Y);break;case y.FUNCTION_PROTOTYPE:f.members||(f.members=new Map);var Q=H.resolvePartial(e);Q&&(Q.internalName=F+o.INSTANCE_DELIMITER+Q.simpleName,f.members.set(H.simpleName,Q));break;case y.PROPERTY:f.members||(f.members=new Map);var q=assert(H.getterPrototype),j=H.setterPrototype,Z=new U(this.program,H.simpleName,F+o.INSTANCE_DELIMITER+H.simpleName,this),$=q.resolvePartial(e);if(!$)return null;if($.internalName=F+o.INSTANCE_DELIMITER+$.simpleName,Z.getterPrototype=$,j){var J=j.resolvePartial(e);if(!J)return null;J.internalName=F+o.INSTANCE_DELIMITER+J.simpleName,Z.setterPrototype=J}f.members.set(H.simpleName,Z);break;default:assert(!1)}}}catch(e){d={error:e}}finally{try{V&&!V.done&&(_=z.return)&&_.call(z)}finally{if(d)throw d.error}}try{for(var ee=i(this.overloadPrototypes),te=ee.next();!te.done;te=ee.next()){var re=a(te.value,2),ne=re[0],ie=re[1];assert(ne!=s.INVALID);var ae=void 0;if(ie.is(o.CommonFlags.INSTANCE)){var se=ie.resolvePartial(e);if(!se)continue;ae=se.resolve()}else ae=ie.resolve();if(ae){var oe=f.overloads;oe||(f.overloads=oe=new Map),oe.set(ne,ae)}}}catch(e){m={error:e}}finally{try{te&&!te.done&&(T=ee.return)&&T.call(ee)}finally{if(m)throw m.error}}return f.currentMemoryOffset=D,f},t.prototype.resolveUsingTypeArguments=function(e,t,r){var n=null;if(this.is(o.CommonFlags.GENERIC)){if(assert(null!=e&&0!=e.length),!(n=this.program.resolveTypeArguments(this.declaration.typeParameters,e,t,r)))return null}else assert(null==e||!e.length);return this.resolve(n,t)},t.prototype.toString=function(){return this.simpleName},t}(I);t.ClassPrototype=D;var P=function(e){function t(t,r,n,s,o){var c,p;void 0===s&&(s=null),void 0===o&&(o=null);var l=e.call(this,t.program,r,n)||this;if(l.kind=y.CLASS,l.contextualTypeArguments=null,l.currentMemoryOffset=0,l.constructorInstance=null,l.overloads=null,l.prototype=t,l.flags=t.flags,l.decoratorFlags=t.decoratorFlags,l.typeArguments=s,l.type=t.program.options.usizeType.asClass(l),l.base=o,o){var u=o.contextualTypeArguments;if(u){l.contextualTypeArguments||(l.contextualTypeArguments=new Map);try{for(var h=i(u),d=h.next();!d.done;d=h.next()){var _=a(d.value,2),m=_[0],g=_[1];l.contextualTypeArguments.set(m,g)}}catch(e){c={error:e}}finally{try{d&&!d.done&&(p=h.return)&&p.call(h)}finally{if(c)throw c.error}}}}var T,E,f=l.prototype.declaration;if(f){var I=f.typeParameters;if(s){if((E=s.length)!=I.length)throw new Error("type argument count mismatch");if(E)for(l.contextualTypeArguments||(l.contextualTypeArguments=new Map),T=0;T=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 K(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==y.FUNCTION);var _=d.signature.returnType;return!d.flow.is(2)||K(_,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 K(e,t){var r=e.byteSize,n=t.byteSize;return!e.is(4)||r>n||e.is(1)!=t.is(1)}t.Flow=G},function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);!function(e){e[e.I8=0]="I8",e[e.I16=1]="I16",e[e.I32=2]="I32",e[e.I64=3]="I64",e[e.ISIZE=4]="ISIZE",e[e.U8=5]="U8",e[e.U16=6]="U16",e[e.U32=7]="U32",e[e.U64=8]="U64",e[e.USIZE=9]="USIZE",e[e.BOOL=10]="BOOL",e[e.F32=11]="F32",e[e.F64=12]="F64",e[e.VOID=13]="VOID"}(t.TypeKind||(t.TypeKind={})),function(e){e[e.NONE=0]="NONE",e[e.SIGNED=1]="SIGNED",e[e.UNSIGNED=2]="UNSIGNED",e[e.INTEGER=4]="INTEGER",e[e.FLOAT=8]="FLOAT",e[e.POINTER=16]="POINTER",e[e.SHORT=32]="SHORT",e[e.LONG=64]="LONG",e[e.VALUE=128]="VALUE",e[e.REFERENCE=256]="REFERENCE",e[e.NULLABLE=512]="NULLABLE"}(t.TypeFlags||(t.TypeFlags={}));var i=function(){function e(e,t,r){this.cachedNullableType=null,this.kind=e,this.flags=t,this.size=r,this.byteSize=ceil(r/8),this.classReference=null,this.signatureReference=null,this.nonNullableType=this}return Object.defineProperty(e.prototype,"intType",{get:function(){switch(this.kind){case 0: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,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(2),o=r(4),c=r(1);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.posi;)if(c.isLineBreak(n.charCodeAt(this.tokenPos))){this.nextTokenOnNewLine=!0;break}this.pos=i,this.token=s,this.tokenPos=o}return this.nextToken},t.prototype.skipIdentifier=function(){return this.skip(i.IDENTIFIER,a.PREFER)},t.prototype.skipIdentifierName=function(){return this.skip(i.IDENTIFIER,a.ALWAYS)},t.prototype.skip=function(e,t){void 0===t&&(t=a.DEFAULT);var r=this.pos,n=this.token,s=this.tokenPos,o=i32.MAX_VALUE;switch(e){case i.GREATERTHAN:o=1}return this.token=this.unsafeNext(t,o),this.token==e?(this.nextToken=-1,!0):(this.pos=r,this.token=n,this.tokenPos=s,!1)},t.prototype.mark=function(){var e;return _?(e=_,_=null):e=new d,e.pos=this.pos,e.token=this.token,e.tokenPos=this.tokenPos,e},t.prototype.discard=function(e){_=e},t.prototype.reset=function(e){this.pos=e.pos,this.token=e.token,this.tokenPos=e.tokenPos,this.nextToken=-1},t.prototype.range=function(e,t){return void 0===e&&(e=-1),void 0===t&&(t=-1),e<0?(e=this.tokenPos,t=this.pos):t<0&&(t=e),new u(this.source,e,t)},t.prototype.readIdentifier=function(){for(var e=this.source.text,t=this.pos;++this.pos=this.end){n+=e.substring(r,this.pos),this.error(s.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.end));break}var i=e.charCodeAt(this.pos);if(i==t){n+=e.substring(r,this.pos++);break}if(92!=i){if(c.isLineBreak(i)){n+=e.substring(r,this.pos),this.error(s.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.pos));break}++this.pos}else n+=e.substring(r,this.pos),n+=this.readEscapeSequence(),r=this.pos}return n},t.prototype.readEscapeSequence=function(){if(++this.pos>=this.end)return this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(this.end)),"";var e=this.source.text,t=e.charCodeAt(this.pos++);switch(t){case 48:return"\0";case 98:return"\b";case 116:return"\t";case 110:return"\n";case 118:return"\v";case 102:return"\f";case 114:return"\r";case 39:return"'";case 34:return'"';case 117:return this.pos=this.end){this.error(s.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.end));break}if(92!=e.charCodeAt(this.pos)){var n=e.charCodeAt(this.pos);if(47==n&&!r)break;if(c.isLineBreak(n)){this.error(s.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.pos));break}++this.pos,r=!1}else++this.pos,r=!0}return e.substring(t,this.pos)},t.prototype.readRegexpFlags=function(){for(var e=this.source.text,t=this.pos,r=0;this.pos57)&&95!=r)break;t++}return!0},t.prototype.readInteger=function(){var e=this.source.text;if(48==e.charCodeAt(this.pos)&&this.pos+2=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else if(o>=65&&o<=70)r=i64_add(i64_mul(r,n),i64_new(10+o-65,0));else if(o>=97&&o<=102)r=i64_add(i64_mul(r,n),i64_new(10+o-97,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readDecimalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(10,0),i=t;this.pos=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readOctalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(8,0),i=t;this.pos=48&&o<=55)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}++this.pos}return this.pos==t?this.error(s.DiagnosticCode.Octal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readBinaryInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(2,0),i=i64_new(1,0),a=t;this.pos=48&&n<=57)t=16*t+n-48;else if(n>=65&&n<=70)t=16*t+10+n-65;else{if(!(n>=97&&n<=102))return this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(this.pos-1,this.pos)),"";t=16*t+10+n-97}if(0==--e)break}return e?(this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(this.pos)),""):String.fromCharCode(t)},t.prototype.readExtendedUnicodeEscape=function(){var e=this.pos,t=this.readHexInteger(),r=i64_low(t),n=!1;assert(!i64_high(t)),r>1114111&&(this.error(s.DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,this.range(e,this.pos)),n=!0);var i=this.source.text;return this.pos>=this.end?(this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(e,this.end)),n=!0):125==i.charCodeAt(this.pos)?++this.pos:(this.error(s.DiagnosticCode.Unterminated_Unicode_escape_sequence,this.range(e,this.pos)),n=!0),n?"":r<65536?String.fromCharCode(r):String.fromCharCode(55296+((r-65536)/1024|0),(r-65536)%1024+56320)},t.prototype.finish=function(){},t}(s.DiagnosticEmitter);t.Tokenizer=h;var d=function(){return function(){}}();t.State=d;var _=null},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Operation_not_supported=100]="Operation_not_supported",e[e.Operation_is_unsafe=101]="Operation_is_unsafe",e[e.Conversion_from_type_0_to_1_requires_an_explicit_cast=200]="Conversion_from_type_0_to_1_requires_an_explicit_cast",e[e.Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit=201]="Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit",e[e.Type_0_cannot_be_changed_to_type_1=202]="Type_0_cannot_be_changed_to_type_1",e[e.Type_0_cannot_be_reinterpreted_as_type_1=203]="Type_0_cannot_be_reinterpreted_as_type_1",e[e.Basic_type_0_cannot_be_nullable=204]="Basic_type_0_cannot_be_nullable",e[e.Cannot_export_a_mutable_global=205]="Cannot_export_a_mutable_global",e[e.Compiling_constant_with_non_constant_initializer_as_mutable=206]="Compiling_constant_with_non_constant_initializer_as_mutable",e[e.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa=207]="Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa",e[e.Unmanaged_classes_cannot_implement_interfaces=208]="Unmanaged_classes_cannot_implement_interfaces",e[e.Invalid_regular_expression_flags=209]="Invalid_regular_expression_flags",e[e.Implementation_0_must_match_the_signature_1=210]="Implementation_0_must_match_the_signature_1",e[e.Class_0_is_sealed_and_cannot_be_extended=211]="Class_0_is_sealed_and_cannot_be_extended",e[e.Decorator_0_is_not_valid_here=212]="Decorator_0_is_not_valid_here",e[e.Duplicate_decorator=213]="Duplicate_decorator",e[e.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf=214]="An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf",e[e.Optional_parameter_must_have_an_initializer=215]="Optional_parameter_must_have_an_initializer",e[e.Unterminated_string_literal=1002]="Unterminated_string_literal",e[e.Identifier_expected=1003]="Identifier_expected",e[e._0_expected=1005]="_0_expected",e[e.A_file_cannot_have_a_reference_to_itself=1006]="A_file_cannot_have_a_reference_to_itself",e[e.Trailing_comma_not_allowed=1009]="Trailing_comma_not_allowed",e[e.Unexpected_token=1012]="Unexpected_token",e[e.A_rest_parameter_must_be_last_in_a_parameter_list=1014]="A_rest_parameter_must_be_last_in_a_parameter_list",e[e.Parameter_cannot_have_question_mark_and_initializer=1015]="Parameter_cannot_have_question_mark_and_initializer",e[e.A_required_parameter_cannot_follow_an_optional_parameter=1016]="A_required_parameter_cannot_follow_an_optional_parameter",e[e.Enum_member_must_have_initializer=1061]="Enum_member_must_have_initializer",e[e.Statements_are_not_allowed_in_ambient_contexts=1036]="Statements_are_not_allowed_in_ambient_contexts",e[e.Initializers_are_not_allowed_in_ambient_contexts=1039]="Initializers_are_not_allowed_in_ambient_contexts",e[e._0_modifier_cannot_be_used_here=1042]="_0_modifier_cannot_be_used_here",e[e.A_rest_parameter_cannot_be_optional=1047]="A_rest_parameter_cannot_be_optional",e[e.A_rest_parameter_cannot_have_an_initializer=1048]="A_rest_parameter_cannot_have_an_initializer",e[e.A_set_accessor_must_have_exactly_one_parameter=1049]="A_set_accessor_must_have_exactly_one_parameter",e[e.A_set_accessor_parameter_cannot_have_an_initializer=1052]="A_set_accessor_parameter_cannot_have_an_initializer",e[e.A_get_accessor_cannot_have_parameters=1054]="A_get_accessor_cannot_have_parameters",e[e.Type_parameters_cannot_appear_on_a_constructor_declaration=1092]="Type_parameters_cannot_appear_on_a_constructor_declaration",e[e.Type_annotation_cannot_appear_on_a_constructor_declaration=1093]="Type_annotation_cannot_appear_on_a_constructor_declaration",e[e.An_accessor_cannot_have_type_parameters=1094]="An_accessor_cannot_have_type_parameters",e[e.A_set_accessor_cannot_have_a_return_type_annotation=1095]="A_set_accessor_cannot_have_a_return_type_annotation",e[e.Type_parameter_list_cannot_be_empty=1098]="Type_parameter_list_cannot_be_empty",e[e.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement=1104]="A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement",e[e.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement=1105]="A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement",e[e.A_return_statement_can_only_be_used_within_a_function_body=1108]="A_return_statement_can_only_be_used_within_a_function_body",e[e.Expression_expected=1109]="Expression_expected",e[e.Type_expected=1110]="Type_expected",e[e.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement=1113]="A_default_clause_cannot_appear_more_than_once_in_a_switch_statement",e[e.Duplicate_label_0=1114]="Duplicate_label_0",e[e.Octal_literals_are_not_allowed_in_strict_mode=1121]="Octal_literals_are_not_allowed_in_strict_mode",e[e.Digit_expected=1124]="Digit_expected",e[e.Hexadecimal_digit_expected=1125]="Hexadecimal_digit_expected",e[e.Unexpected_end_of_text=1126]="Unexpected_end_of_text",e[e.Invalid_character=1127]="Invalid_character",e[e._case_or_default_expected=1130]="_case_or_default_expected",e[e.A_declare_modifier_cannot_be_used_in_an_already_ambient_context=1038]="A_declare_modifier_cannot_be_used_in_an_already_ambient_context",e[e.Type_argument_expected=1140]="Type_argument_expected",e[e.String_literal_expected=1141]="String_literal_expected",e[e.Line_break_not_permitted_here=1142]="Line_break_not_permitted_here",e[e.Declaration_expected=1146]="Declaration_expected",e[e._const_declarations_must_be_initialized=1155]="_const_declarations_must_be_initialized",e[e.Unterminated_regular_expression_literal=1161]="Unterminated_regular_expression_literal",e[e.Interface_declaration_cannot_have_implements_clause=1176]="Interface_declaration_cannot_have_implements_clause",e[e.Binary_digit_expected=1177]="Binary_digit_expected",e[e.Octal_digit_expected=1178]="Octal_digit_expected",e[e.An_implementation_cannot_be_declared_in_ambient_contexts=1183]="An_implementation_cannot_be_declared_in_ambient_contexts",e[e.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive=1198]="An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive",e[e.Unterminated_Unicode_escape_sequence=1199]="Unterminated_Unicode_escape_sequence",e[e.Decorators_are_not_valid_here=1206]="Decorators_are_not_valid_here",e[e._abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration=1242]="_abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration",e[e.A_class_may_only_extend_another_class=1311]="A_class_may_only_extend_another_class",e[e.A_parameter_property_cannot_be_declared_using_a_rest_parameter=1317]="A_parameter_property_cannot_be_declared_using_a_rest_parameter",e[e.Duplicate_identifier_0=2300]="Duplicate_identifier_0",e[e.Cannot_find_name_0=2304]="Cannot_find_name_0",e[e.Module_0_has_no_exported_member_1=2305]="Module_0_has_no_exported_member_1",e[e.Generic_type_0_requires_1_type_argument_s=2314]="Generic_type_0_requires_1_type_argument_s",e[e.Type_0_is_not_generic=2315]="Type_0_is_not_generic",e[e.Type_0_is_not_assignable_to_type_1=2322]="Type_0_is_not_assignable_to_type_1",e[e.Index_signature_is_missing_in_type_0=2329]="Index_signature_is_missing_in_type_0",e[e._this_cannot_be_referenced_in_current_location=2332]="_this_cannot_be_referenced_in_current_location",e[e._super_can_only_be_referenced_in_a_derived_class=2335]="_super_can_only_be_referenced_in_a_derived_class",e[e.Property_0_does_not_exist_on_type_1=2339]="Property_0_does_not_exist_on_type_1",e[e.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures=2349]="Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures",e[e.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature=2351]="Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature",e[e.A_function_whose_declared_type_is_not_void_must_return_a_value=2355]="A_function_whose_declared_type_is_not_void_must_return_a_value",e[e.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access=2357]="The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access",e[e.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access=2364]="The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access",e[e.Operator_0_cannot_be_applied_to_types_1_and_2=2365]="Operator_0_cannot_be_applied_to_types_1_and_2",e[e._get_and_set_accessor_must_have_the_same_type=2380]="_get_and_set_accessor_must_have_the_same_type",e[e.Constructor_implementation_is_missing=2390]="Constructor_implementation_is_missing",e[e.Function_implementation_is_missing_or_not_immediately_following_the_declaration=2391]="Function_implementation_is_missing_or_not_immediately_following_the_declaration",e[e.Multiple_constructor_implementations_are_not_allowed=2392]="Multiple_constructor_implementations_are_not_allowed",e[e.Duplicate_function_implementation=2393]="Duplicate_function_implementation",e[e.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local=2395]="Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local",e[e.Type_0_has_no_property_1=2460]="Type_0_has_no_property_1",e[e.The_0_operator_cannot_be_applied_to_type_1=2469]="The_0_operator_cannot_be_applied_to_type_1",e[e.Export_declaration_conflicts_with_exported_declaration_of_0=2484]="Export_declaration_conflicts_with_exported_declaration_of_0",e[e.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property=2540]="Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property",e[e.The_target_of_an_assignment_must_be_a_variable_or_a_property_access=2541]="The_target_of_an_assignment_must_be_a_variable_or_a_property_access",e[e.Index_signature_in_type_0_only_permits_reading=2542]="Index_signature_in_type_0_only_permits_reading",e[e.Expected_0_arguments_but_got_1=2554]="Expected_0_arguments_but_got_1",e[e.Expected_at_least_0_arguments_but_got_1=2555]="Expected_at_least_0_arguments_but_got_1",e[e.Expected_0_type_arguments_but_got_1=2558]="Expected_0_type_arguments_but_got_1",e[e.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums=2651]="A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums",e[e.Namespace_0_has_no_exported_member_1=2694]="Namespace_0_has_no_exported_member_1",e[e.File_0_not_found=6054]="File_0_not_found",e[e.Numeric_separators_are_not_allowed_here=6188]="Numeric_separators_are_not_allowed_here",e[e.Multiple_consecutive_numeric_separators_are_not_permitted=6189]="Multiple_consecutive_numeric_separators_are_not_permitted"}(t.DiagnosticCode||(t.DiagnosticCode={})),t.diagnosticCodeToString=function(e){switch(e){case 100:return"Operation not supported.";case 101:return"Operation is unsafe.";case 200:return"Conversion from type '{0}' to '{1}' requires an explicit cast.";case 201:return"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.";case 202:return"Type '{0}' cannot be changed to type '{1}'.";case 203:return"Type '{0}' cannot be reinterpreted as type '{1}'.";case 204:return"Basic type '{0}' cannot be nullable.";case 205:return"Cannot export a mutable global.";case 206:return"Compiling constant with non-constant initializer as mutable.";case 207:return"Unmanaged classes cannot extend managed classes and vice-versa.";case 208:return"Unmanaged classes cannot implement interfaces.";case 209:return"Invalid regular expression flags.";case 210:return"Implementation '{0}' must match the signature '{1}'.";case 211:return"Class '{0}' is sealed and cannot be extended.";case 212:return"Decorator '{0}' is not valid here.";case 213:return"Duplicate decorator.";case 214:return"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.";case 215:return"Optional parameter must have an initializer.";case 1002:return"Unterminated string literal.";case 1003:return"Identifier expected.";case 1005:return"'{0}' expected.";case 1006:return"A file cannot have a reference to itself.";case 1009:return"Trailing comma not allowed.";case 1012:return"Unexpected token.";case 1014:return"A rest parameter must be last in a parameter list.";case 1015:return"Parameter cannot have question mark and initializer.";case 1016:return"A required parameter cannot follow an optional parameter.";case 1061:return"Enum member must have initializer.";case 1036:return"Statements are not allowed in ambient contexts.";case 1039:return"Initializers are not allowed in ambient contexts.";case 1042:return"'{0}' modifier cannot be used here.";case 1047:return"A rest parameter cannot be optional.";case 1048:return"A rest parameter cannot have an initializer.";case 1049:return"A 'set' accessor must have exactly one parameter.";case 1052:return"A 'set' accessor parameter cannot have an initializer.";case 1054:return"A 'get' accessor cannot have parameters.";case 1092:return"Type parameters cannot appear on a constructor declaration.";case 1093:return"Type annotation cannot appear on a constructor declaration.";case 1094:return"An accessor cannot have type parameters.";case 1095:return"A 'set' accessor cannot have a return type annotation.";case 1098:return"Type parameter list cannot be empty.";case 1104:return"A 'continue' statement can only be used within an enclosing iteration statement.";case 1105:return"A 'break' statement can only be used within an enclosing iteration or switch statement.";case 1108:return"A 'return' statement can only be used within a function body.";case 1109:return"Expression expected.";case 1110:return"Type expected.";case 1113:return"A 'default' clause cannot appear more than once in a 'switch' statement.";case 1114:return"Duplicate label '{0}'.";case 1121:return"Octal literals are not allowed in strict mode.";case 1124:return"Digit expected.";case 1125:return"Hexadecimal digit expected.";case 1126:return"Unexpected end of text.";case 1127:return"Invalid character.";case 1130:return"'case' or 'default' expected.";case 1038:return"A 'declare' modifier cannot be used in an already ambient context.";case 1140:return"Type argument expected.";case 1141:return"String literal expected.";case 1142:return"Line break not permitted here.";case 1146:return"Declaration expected.";case 1155:return"'const' declarations must be initialized.";case 1161:return"Unterminated regular expression literal.";case 1176:return"Interface declaration cannot have 'implements' clause.";case 1177:return"Binary digit expected.";case 1178:return"Octal digit expected.";case 1183:return"An implementation cannot be declared in ambient contexts.";case 1198:return"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.";case 1199:return"Unterminated Unicode escape sequence.";case 1206:return"Decorators are not valid here.";case 1242:return"'abstract' modifier can only appear on a class, method, or property declaration.";case 1311:return"A class may only extend another class.";case 1317:return"A parameter property cannot be declared using a rest parameter.";case 2300:return"Duplicate identifier '{0}'.";case 2304:return"Cannot find name '{0}'.";case 2305:return"Module '{0}' has no exported member '{1}'.";case 2314:return"Generic type '{0}' requires {1} type argument(s).";case 2315:return"Type '{0}' is not generic.";case 2322:return"Type '{0}' is not assignable to type '{1}'.";case 2329:return"Index signature is missing in type '{0}'.";case 2332:return"'this' cannot be referenced in current location.";case 2335:return"'super' can only be referenced in a derived class.";case 2339:return"Property '{0}' does not exist on type '{1}'.";case 2349:return"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.";case 2351:return"Cannot use 'new' with an expression whose type lacks a construct signature.";case 2355:return"A function whose declared type is not 'void' must return a value.";case 2357:return"The operand of an increment or decrement operator must be a variable or a property access.";case 2364:return"The left-hand side of an assignment expression must be a variable or a property access.";case 2365:return"Operator '{0}' cannot be applied to types '{1}' and '{2}'.";case 2380:return"'get' and 'set' accessor must have the same type.";case 2390:return"Constructor implementation is missing.";case 2391:return"Function implementation is missing or not immediately following the declaration.";case 2392:return"Multiple constructor implementations are not allowed.";case 2393:return"Duplicate function implementation.";case 2395:return"Individual declarations in merged declaration '{0}' must be all exported or all local.";case 2460:return"Type '{0}' has no property '{1}'.";case 2469:return"The '{0}' operator cannot be applied to type '{1}'.";case 2484:return"Export declaration conflicts with exported declaration of '{0}'.";case 2540:return"Cannot assign to '{0}' because it is a constant or a read-only property.";case 2541:return"The target of an assignment must be a variable or a property access.";case 2542:return"Index signature in type '{0}' only permits reading.";case 2554:return"Expected {0} arguments, but got {1}.";case 2555:return"Expected at least {0} arguments, but got {1}.";case 2558:return"Expected {0} type arguments, but got {1}.";case 2651:return"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.";case 2694:return"Namespace '{0}' has no exported member '{1}'.";case 6054:return"File '{0}' not found.";case 6188:return"Numeric separators are not allowed here.";case 6189:return"Multiple consecutive numeric separators are not permitted.";default:return""}}},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}};Object.defineProperty(t,"__esModule",{value:!0});var a,s=r(22),o=r(2),c=r(3),p=r(0),l=r(5),u=r(8),h=r(4),d=r(7),_=r(1);!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,T=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.currentOuterFunction=null,n.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,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,E(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,E(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=e.resolveUsingTypeArguments(t,r,i);return a?(a.outerScope=n,this.compileFunction(a)?a:null):null},t.prototype.ensureFunctionType=function(e,t,r){void 0===r&&(r=null);var n,i=e?e.length:0,a=0;if(r?((n=new Array(1+i))[0]=r.toNativeType(),a=1):n=new Array(i),e)for(var s=0;s=0)return e.functionTableIndex;var t=this.functionTable,r=t.length;return!e.is(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,T=!0,E=!0,f=!0;for(_=0;_=0&&(g&&s.set(1),T&&s.set(2),E&&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}g=this.currentType}var E=!1;if(m.is(p.CommonFlags.CONST))if(T)if(T=this.precomputeExpressionRef(T),c.getExpressionId(T)==c.ExpressionId.Const){var f=new l.Local(r,y,-1,g);switch(c.getExpressionType(T)){case c.NativeType.I32:f=f.withConstantIntegerValue(i64_new(c.getConstValueI32(T),0));break;case c.NativeType.I64:f=f.withConstantIntegerValue(i64_new(c.getConstValueI64Low(T),c.getConstValueI64High(T)));break;case c.NativeType.F32:f=f.withConstantFloatValue(c.getConstValueF32(T));break;case c.NativeType.F64:f=f.withConstantFloatValue(c.getConstValueF64(T));break;default:return assert(!1),this.module.createUnreachable()}var I=n.flow.scopedLocals;if(I){if(I.has(y))return this.error(o.DiagnosticCode.Duplicate_identifier_0,m.name.range,y),this.module.createUnreachable()}else n.flow.scopedLocals=I=new Map;I.set(y,f),E=!0}else this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,m.range);else this.error(o.DiagnosticCode._const_declarations_must_be_initialized,m.range);if(!E){f=void 0;f=m.isAny(p.CommonFlags.LET|p.CommonFlags.CONST)||_.is(2048)?_.addScopedLocal(g,y,!1,m):n.addLocal(g,y,m),T?(u.push(this.compileAssignmentWithValue(m.name,T)),f.type.is(36)&&_.setLocalWrapped(f.index,!_.canOverflow(T,g))):f.type.is(36)&&_.setLocalWrapped(f.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:assert(!1),i=this.module.createUnreachable()}var a=this.currentType;return 0!=r&&a!=t?(i=this.convertExpression(i,a,t,r,n,e),this.currentType=t):1==n&&(i=this.ensureSmallIntegerWrap(i,a)),this.options.sourceMap&&this.addDebugLocation(i,e.range),i},t.prototype.compileExpressionRetainType=function(e,t,r){return this.compileExpression(e,t==d.Type.void?d.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r,n){return this.precomputeExpressionRef(this.compileExpression(e,t,r,n))},t.prototype.precomputeExpressionRef=function(e){var t=this.module,r=this.currentType.toNativeType(),n=t.addTemporaryFunction(r,null,e);t.runPasses(["precompute"],n);var i=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 T=void 0;if(11==this.currentType.kind){if(i=this.compileExpression(m,d.Type.f32,1,0),a=this.currentType,!(T=this.f32PowInstance)){if(!(E=this.program.elementsLookup.get("Mathf"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),p=h.createUnreachable();break}if(!(f=E.members?E.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=T=f.resolve()}}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,!(T=this.f64PowInstance)){if(!(E=this.program.elementsLookup.get("Math"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),p=h.createUnreachable();break}if(!(f=E.members?E.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=T=f.resolve()}p=T&&this.compileFunction(T)?this.makeCallDirect(T,[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(!(T=this.f32ModInstance)){if(!(E=this.program.elementsLookup.get("Mathf"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),p=h.createUnreachable();break}if(!(f=E.members?E.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=T=f.resolve()}p=T&&this.compileFunction(T)?this.makeCallDirect(T,[r,i]):h.createUnreachable();break;case 12:if(!(T=this.f64ModInstance)){var E,f;if(!(E=this.program.elementsLookup.get("Math"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),p=h.createUnreachable();break}if(!(f=E.members?E.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=T=f.resolve()}p=T&&this.compileFunction(T)?this.makeCallDirect(T,[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,N=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));p=h.createIf(this.makeIsTrueish(h.createTeeLocal(N.index,r),this.currentType),i,h.createGetLocal(assert(N).index,this.currentType.toNativeType()))}break;case u.Token.BAR_BAR:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,i=this.compileExpression(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,N=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));p=h.createIf(this.makeIsTrueish(h.createTeeLocal(N.index,r),this.currentType),h.createGetLocal(assert(N).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,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=c.resolve();if(!p)return this.module.createUnreachable();assert(1==p.signature.parameterTypes.length),n=p.signature.parameterTypes[0];break}return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,s.internalName),this.module.createUnreachable();case l.ElementKind.CLASS:if(i.resolvedElementExpression){var u=a.flow.is(4096),h=s.lookupOverload(l.OperatorKind.INDEXED_SET,u);if(!h)return s.lookupOverload(l.OperatorKind.INDEXED_GET,u)?this.error(o.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,s.internalName):this.error(o.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,s.internalName),this.module.createUnreachable();assert(2==h.signature.parameterTypes.length),n=h.signature.parameterTypes[1];break}default:return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}assert(n!=d.Type.void);var _=this.compileExpression(t,n,1,0);return this.compileAssignmentWithValue(e,_,r!=d.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.program.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.program.resolvedThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0);a=i.type;this.currentType=r?a:d.Type.void;c=a.toNativeType();if(10==a.kind&&(t=this.ensureSmallIntegerWrap(t,a)),r){s=(L=this.currentFunction).flow;var y=L.getAndFreeTempLocal(a,!s.canOverflow(t,a)).index;return n.createBlock(null,[n.createSetLocal(y,t),n.createStore(a.byteSize,m,n.createGetLocal(y,c),c,i.memoryOffset),n.createGetLocal(y,c)],c)}return n.createStore(a.byteSize,m,t,c,i.memoryOffset);case l.ElementKind.PROPERTY:var g=i.setterPrototype;if(g){var T=g.resolve();if(!T)return n.createUnreachable();if(!r){if(T.is(p.CommonFlags.INSTANCE)){_=assert(this.program.resolvedThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0);return this.makeCallDirect(T,[m,t])}return this.makeCallDirect(T,[t])}var E=i.getterPrototype;assert(null!=E);var f=E.resolve();if(!f)return n.createUnreachable();var I=(R=f.signature.returnType).toNativeType();if(T.is(p.CommonFlags.INSTANCE)){_=assert(this.program.resolvedThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0),y=this.currentFunction.getAndFreeTempLocal(R,!1).index;return n.createBlock(null,[this.makeCallDirect(T,[n.createTeeLocal(y,m),t]),this.makeCallDirect(f,[n.createGetLocal(y,I)])],I)}return n.createBlock(null,[this.makeCallDirect(T,[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.program.resolvedElementExpression;if(v){var A=this.currentFunction.flow.is(4096),N=i.lookupOverload(l.OperatorKind.INDEXED_GET,A);if(!N)return this.error(o.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.internalName),n.createUnreachable();var C=i.lookupOverload(l.OperatorKind.INDEXED_SET,A);if(!C)return this.error(o.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.internalName),this.currentType=r?N.signature.returnType:d.Type.void,n.createUnreachable();var S=i.type,O=(_=assert(this.program.resolvedThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0),this.compileExpression(v,d.Type.i32,1,0));if(r){var L,b=(L=this.currentFunction).getTempLocal(S,!1),k=L.getAndFreeTempLocal(this.currentType,!1),R=N.signature.returnType;return this.currentFunction.freeTempLocal(b),n.createBlock(null,[this.makeCallDirect(C,[n.createTeeLocal(b.index,m),n.createTeeLocal(k.index,O),t]),this.makeCallDirect(N,[n.createGetLocal(b.index,b.type.toNativeType()),n.createGetLocal(k.index,k.type.toNativeType())])],R.toNativeType())}return this.makeCallDirect(C,[m,O,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.program.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=u.resolveUsingTypeArguments(_,this.currentFunction.flow.contextualTypeArguments,e)}else{if(u.is(p.CommonFlags.GENERIC)){for(var y=new Map,g=assert(u.declaration.typeParameters),T=g.length,E=0;Es&&!i)||(this.error(o.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,s.toString(),t.toString()),!1)},t.prototype.compileCallDirect=function(e,t,r,n,i){void 0===n&&(n=0),void 0===i&&(i=!1);var a=t.length,s=e.signature;if(!this.checkCallSignature(s,a,0!=n,r))return this.module.createUnreachable();if(i)return assert(!e.is(p.CommonFlags.TRAMPOLINE)),this.compileCallInlineUnchecked(e,t,r,n);var o=n?a+1:a,c=new Array(o),l=0;n&&(c[0]=n,l=1);for(var u=s.parameterTypes,h=0;h=i);var o=this.module;if(!this.compileFunction(e))return o.createUnreachable();var c=e.signature.returnType,l=e.is(p.CommonFlags.MODULE_IMPORT);if(r=a),this.ensureFunctionType(e.parameterTypes,e.returnType,e.thisType);var c=this.module;if(n=0),this.currentType=E,this.module.createGetLocal(f,E.toNativeType());case l.ElementKind.GLOBAL:if(!this.compileGlobal(T))return this.module.createUnreachable();var I=T.type;return assert(I!=d.Type.void),T.is(p.CommonFlags.INLINED)?this.compileInlineConstant(T,t,r):(this.currentType=I,this.module.createGetGlobal(T.internalName,I.toNativeType()));case l.ElementKind.ENUMVALUE:return T.is(p.CommonFlags.COMPILED)?(this.currentType=d.Type.i32,T.is(p.CommonFlags.INLINED)?this.module.createI32(T.constantValue):this.module.createGetGlobal(T.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=T.resolve(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.program.resolveType(e.isType);return this.currentType=d.Type.bool,a?i.is(512)&&!a.is(512)?i.nonNullableType.isAssignableTo(a)?r.createBinary(i.is(64)?c.BinaryOp.NeI64:c.BinaryOp.NeI32,n,i.toNativeZero(r)):r.createI32(0):r.createI32(i.isAssignableTo(a,!0)?1:0):r.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){void 0===r&&(r=!1);var n=this.module;switch(e.literalKind){case h.LiteralKind.ARRAY:assert(!r);var i=t.classReference;return i&&i.prototype==this.program.arrayPrototype?this.compileArrayLiteral(assert(i.typeArguments)[0],e.elementExpressions,e):(this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable());case h.LiteralKind.FLOAT:var a=e.value;return r&&(a=-a),t==d.Type.f32?n.createF32(a):(this.currentType=d.Type.f64,n.createF64(a));case h.LiteralKind.INTEGER:var s=e.value;switch(r&&(s=i64_sub(i64_new(0),s)),t.kind){case 0:if(i64_is_i8(s))return n.createI32(i64_low(s));break;case 5:if(i64_is_u8(s))return n.createI32(i64_low(s));break;case 1:if(i64_is_i16(s))return n.createI32(i64_low(s));break;case 6:if(i64_is_u16(s))return n.createI32(i64_low(s));break;case 2:if(i64_is_i32(s))return n.createI32(i64_low(s));break;case 7:if(i64_is_u32(s))return n.createI32(i64_low(s));break;case 10:if(i64_is_bool(s))return n.createI32(i64_low(s));break;case 4:if(!this.options.isWasm64){if(i64_is_i32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 9:if(!this.options.isWasm64){if(i64_is_u32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 3:case 8:return n.createI64(i64_low(s),i64_high(s));case 11:if(i64_is_f32(s))return n.createF32(i64_to_f32(s));break;case 12:if(i64_is_f64(s))return n.createF64(i64_to_f64(s));break;case 13:break;default:return assert(!1),n.createUnreachable()}return i64_is_i32(s)?(this.currentType=d.Type.i32,n.createI32(i64_low(s))):i64_is_u32(s)?(this.currentType=d.Type.u32,n.createI32(i64_low(s))):(this.currentType=d.Type.i64,n.createI64(i64_low(s),i64_high(s)));case h.LiteralKind.STRING:return assert(!r),this.compileStaticString(e.value)}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,n.createUnreachable()},t.prototype.compileStaticString=function(e){var t=this.module,r=this.options,n=this.stringSegments,i=n.get(e);if(!i){var a=e.length,s=new Uint8Array(4+2*a);s[0]=255&a,s[1]=a>>>8&255,s[2]=a>>>16&255,s[3]=a>>>24&255;for(var o=0;o>>8&255;i=this.addMemorySegment(s,r.usizeType.byteSize),n.set(e,i)}var c=i.offset,p=this.program.typesLookup.get("string");return this.currentType=p||r.usizeType,r.isWasm64?t.createI64(i64_low(c),i64_high(c)):(assert(i64_is_i32(c)),t.createI32(i64_low(c)))},t.prototype.compileArrayLiteral=function(e,t,r){var n=!0,i=this.module,a=assert(this.program.arrayPrototype);if(!a||a.kind!=l.ElementKind.CLASS_PROTOTYPE)return i.createUnreachable();var s=a.resolve([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,T=0;T=0);var _=this.compileExpressionRetainType(h,this.options.usizeType,0);return this.currentType=a.type,i.createLoad(a.type.byteSize,a.type.is(5),_,a.type.toNativeType(),a.memoryOffset);case l.ElementKind.PROPERTY:var m=a.getterPrototype;if(m){var y=m.resolve(null);if(!y)return i.createUnreachable();var g=y.signature;if(!this.checkCallSignature(g,0,y.is(p.CommonFlags.INSTANCE),e))return i.createUnreachable();var T=0!=(y.decoratorFlags&l.DecoratorFlags.INLINE);if(y.is(p.CommonFlags.INSTANCE)){u=assert(y.parent);assert(u.kind==l.ElementKind.CLASS);h=assert(n.resolvedThisExpression),_=this.compileExpressionRetainType(h,this.options.usizeType,0);return this.currentType=g.returnType,this.compileCallDirect(y,[],e,_,T)}return this.currentType=g.returnType,this.compileCallDirect(y,[],e,0,T)}return this.error(o.DiagnosticCode.Property_0_does_not_exist_on_type_1,e.range,a.simpleName,a.parent.toString()),i.createUnreachable()}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),i.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 T=d.Type.commonCompatible(_,g,!1);return T?(h=this.convertExpression(h,_,T,1,0,r),y=this.convertExpression(y,g,T,1,0,n),this.currentType=T,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,T=g.toNativeType(),E=y.prototype.declaration;if(assert(!y.isAny(p.CommonFlags.CONST)),E.initializer)h.push(a.createStore(g.byteSize,a.createGetLocal(u.index,c),this.compileExpression(E.initializer,g,1,0),T,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,T):g.toNativeZero(a),T,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 E(e,t){switch(void 0===t&&(t=e.simpleName),e.kind){case l.ElementKind.FUNCTION:return(r=e.parent||e.prototype.parent)?E(r)+(e.is(p.CommonFlags.INSTANCE)?p.INSTANCE_DELIMITER:p.STATIC_DELIMITER)+t:t;case l.ElementKind.FIELD:case l.ElementKind.ENUMVALUE:return E(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)?E(r)+p.STATIC_DELIMITER+t:t;default:var r;return(r=e.parent)?E(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=T},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var i=r(0),a=r(5),s=r(8),o=r(2),c=r(1),p=r(4),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,1)))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,1))?null:p.Node.createEnumValueDeclaration(r,n,t,s.Range.join(r.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=s.Token.SEMICOLON&&e.nextToken!=s.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=p.Node.createReturnStatement(t,e.range());return e.skip(s.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){for(var t=new Array;!e.skip(s.Token.GREATERTHAN);){var r=this.parseTypeParameter(e);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.GREATERTHAN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),">"),null}}return 0===t.length&&this.error(o.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range()),t},t.prototype.parseTypeParameter=function(e){if(e.next()==s.Token.IDENTIFIER){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(s.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return p.Node.createTypeParameter(t,r,s.Range.join(t.range,e.range()))}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e,t){void 0===t&&(t=!1);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,1))))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.parseClassMember=function(e,t){for(var r=e.pos,n=new Array;e.skip(s.Token.AT);){var a=this.parseDecorator(e);if(!a)break;n.push(a)}var c=t.flags&i.CommonFlags.AMBIENT;e.skip(s.Token.PUBLIC)?c|=i.CommonFlags.PUBLIC:e.skip(s.Token.PRIVATE)?c|=i.CommonFlags.PRIVATE:e.skip(s.Token.PROTECTED)&&(c|=i.CommonFlags.PROTECTED);var l=0,u=0,h=0,d=0;e.skip(s.Token.STATIC)?(c|=i.CommonFlags.STATIC,l=e.tokenPos,u=e.pos):(e.skip(s.Token.ABSTRACT)?(c|=i.CommonFlags.ABSTRACT|i.CommonFlags.INSTANCE,h=e.tokenPos,d=e.pos):c|=i.CommonFlags.INSTANCE,t.flags&i.CommonFlags.GENERIC&&(c|=i.CommonFlags.GENERIC_CONTEXT));var _=0,m=0;e.skip(s.Token.READONLY)&&(c|=i.CommonFlags.READONLY,_=e.tokenPos,m=e.pos);var y=e.mark(),g=!1,T=!1,E=!1,f=0,I=0;if(e.skip(s.Token.GET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(y):(c|=i.CommonFlags.GET,T=!0,f=e.tokenPos,I=e.pos,c&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(_,m),"readonly")):e.skip(s.Token.SET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(y):(c|=i.CommonFlags.SET|i.CommonFlags.SET,E=!0,f=e.tokenPos,I=e.pos,c&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(_,m),"readonly")):e.skip(s.Token.CONSTRUCTOR)&&(g=!0,(c|=i.CommonFlags.CONSTRUCTOR)&i.CommonFlags.STATIC&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(l,u),"static"),c&i.CommonFlags.ABSTRACT&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(h,d),"abstract"),c&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(_,m),"readonly")),!g&&!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var v=g?p.Node.createConstructorExpression(e.range()):p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),A=null;if(e.skip(s.Token.LESSTHAN)){var N=e.tokenPos;if(!(A=this.parseTypeParameters(e)))return null;g?this.error(o.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range(N,e.pos)):T||E?this.error(o.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(N,e.pos)):c|=i.CommonFlags.GENERIC}if(e.skip(s.Token.OPENPAREN)){var C=e.tokenPos,S=this.parseParameters(e,g);if(!S)return null;var O=this.parseParametersThis;if(g)for(var L=0,b=S.length;L"),null):null;case s.Token.IDENTIFIER:return p.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case s.Token.THIS:return p.Node.createThisExpression(e.range(r,e.pos));case s.Token.CONSTRUCTOR:return p.Node.createConstructorExpression(e.range(r,e.pos));case s.Token.SUPER:return p.Node.createSuperExpression(e.range(r,e.pos));case s.Token.STRINGLITERAL:return p.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case s.Token.INTEGERLITERAL:return p.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case s.Token.FLOATLITERAL:return p.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case s.Token.SLASH:var d=e.readRegexpPattern();return e.skip(s.Token.SLASH)?p.Node.createRegexpLiteralExpression(d,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(o.DiagnosticCode._0_expected,e.range(),"/"),null);case s.Token.FUNCTION:return this.parseFunctionExpression(e);default:return this.error(o.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){var t=e.mark();if(!e.skip(s.Token.LESSTHAN))return null;var r=new Array;do{if(e.peek()===s.Token.GREATERTHAN)break;var n=this.parseType(e,!0,!0);if(!n)return e.reset(t),null;r.push(n)}while(e.skip(s.Token.COMMA));return e.skip(s.Token.GREATERTHAN)&&e.skip(s.Token.OPENPAREN)?r:(e.reset(t),null)},t.prototype.parseArguments=function(e){for(var t=new Array;!e.skip(s.Token.CLOSEPAREN);){var r=this.parseExpression(e,1);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return t},t.prototype.parseExpression=function(e,t){void 0===t&&(t=0);var r=this.parseExpressionStart(e);if(!r)return null;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>0?1:0);if(!g)return null;r=p.Node.createTernaryExpression(r,y,g,e.range(i,e.pos));break;case s.Token.COMMA:var T=[r];do{if(!(r=this.parseExpression(e,1)))return null;T.push(r)}while(e.skip(s.Token.COMMA));r=p.Node.createCommaExpression(T,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 E=u;if(E.expression.kind!=p.NodeKind.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,E.expression.range),null;E.expression=p.Node.createPropertyAccessExpression(r,E.expression,e.range(i,e.pos)),r=E}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}(o.DiagnosticEmitter);function h(e){switch(e){case s.Token.COMMA:return 0;case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:return 3;case s.Token.QUESTION:return 4;case s.Token.BAR_BAR:return 5;case s.Token.AMPERSAND_AMPERSAND:return 6;case s.Token.BAR:return 7;case s.Token.CARET:return 8;case s.Token.AMPERSAND:return 9;case s.Token.EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS:case s.Token.EQUALS_EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS_EQUALS:return 10;case s.Token.AS:case s.Token.IN:case s.Token.INSTANCEOF:case s.Token.LESSTHAN:case s.Token.GREATERTHAN:case s.Token.LESSTHAN_EQUALS:case s.Token.GREATERTHAN_EQUALS:return 11;case s.Token.LESSTHAN_LESSTHAN:case s.Token.GREATERTHAN_GREATERTHAN:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 12;case s.Token.PLUS:case s.Token.MINUS:return 13;case s.Token.ASTERISK:case s.Token.SLASH:case s.Token.PERCENT:return 14;case s.Token.ASTERISK_ASTERISK:return 15;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:return 17;case s.Token.DOT:case s.Token.NEW:case s.Token.OPENBRACKET:return 19;default:return-1}}function d(e){switch(e){case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:case s.Token.QUESTION:case s.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=u,function(e){e[e.COMMA=0]="COMMA",e[e.SPREAD=1]="SPREAD",e[e.YIELD=2]="YIELD",e[e.ASSIGNMENT=3]="ASSIGNMENT",e[e.CONDITIONAL=4]="CONDITIONAL",e[e.LOGICAL_OR=5]="LOGICAL_OR",e[e.LOGICAL_AND=6]="LOGICAL_AND",e[e.BITWISE_OR=7]="BITWISE_OR",e[e.BITWISE_XOR=8]="BITWISE_XOR",e[e.BITWISE_AND=9]="BITWISE_AND",e[e.EQUALITY=10]="EQUALITY",e[e.RELATIONAL=11]="RELATIONAL",e[e.SHIFT=12]="SHIFT",e[e.ADDITIVE=13]="ADDITIVE",e[e.MULTIPLICATIVE=14]="MULTIPLICATIVE",e[e.EXPONENTIATED=15]="EXPONENTIATED",e[e.UNARY_PREFIX=16]="UNARY_PREFIX",e[e.UNARY_POSTFIX=17]="UNARY_POSTFIX",e[e.CALL=18]="CALL",e[e.MEMBERACCESS=19]="MEMBERACCESS",e[e.GROUPING=20]="GROUPING",e[e.INVALID=-1]="INVALID"}(t.Precedence||(t.Precedence={}))},function(e,t,r){"use strict";var n=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(1),p=function(){function e(e,t){void 0===t&&(t=!1),this.todo=[],this.seen=new Set,this.program=e,this.includePrivate}return e.prototype.walk=function(){var e,t;try{for(var r=i(this.program.moduleLevelExports.values()),n=r.next();!n.done;n=r.next()){var a=n.value;this.visitElement(a)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}for(var s=this.todo;00&&this.push(", "),this.push("$"),this.push(i.toString(10)),this.push(": "),this.push(a(n.getFunctionParamType(e,i)));this.push("): "),this.push(a(n.getFunctionResultType(e))),this.push(" "),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("{\n"),this.decompileExpression(r),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("\n}\n"),++this.functionId},e.prototype.decompileExpression=function(e){var t,r,i,s,o=n.getExpressionId(e),c=n.getExpressionType(e);switch(o){case n.ExpressionId.Block:for(null!=(r=n.getBlockName(e))&&(this.push(r),this.push(": ")),this.push("{\n"),s=n.getBlockChildCount(e),i=0;i("),this.push(n.getLoadOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getLoadPtr(e)),void this.push(")");case n.ExpressionId.Store:return this.push("store<"),this.push(a(c)),this.push(">("),this.push(n.getStoreOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getStorePtr(e)),this.push(", "),this.decompileExpression(n.getStoreValue(e)),void this.push(")");case n.ExpressionId.Const:switch(c){case n.NativeType.I32:return void this.push(n.getConstValueI32(e).toString(10));case n.NativeType.I64:return void this.push(i64_to_string(i64_new(n.getConstValueI64Low(e),n.getConstValueI64High(e))));case n.NativeType.F32:return void this.push(n.getConstValueF32(e).toString(10));case n.NativeType.F64:return void this.push(n.getConstValueF64(e).toString(10))}break;case n.ExpressionId.Unary:switch(n.getUnaryOp(e)){case n.UnaryOp.ClzI32:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI32:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI32:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NegF32:case n.UnaryOp.NegF64:return this.push("-"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.AbsF32:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF32:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF32:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF32:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF32:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF32:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.EqzI32:case n.UnaryOp.EqzI64:return this.push("!"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ClzI64:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI64:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI64:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.AbsF64:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF64:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF64:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF64:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF64:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF64:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ExtendI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ExtendU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.WrapI64:case n.UnaryOp.TruncF32ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretF32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretF64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ConvertI32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.PromoteF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.DemoteF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretI32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretI64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")")}break;case n.ExpressionId.Binary:switch(n.getBinaryOp(e)){case n.BinaryOp.AddI32:case n.BinaryOp.AddI64:case n.BinaryOp.AddF32:case n.BinaryOp.AddF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" + "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.SubI32:case n.BinaryOp.SubI64:case n.BinaryOp.SubF32:case n.BinaryOp.SubF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" - "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.MulI32:case n.BinaryOp.MulI64:case n.BinaryOp.MulF32:case n.BinaryOp.MulF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" * "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivI32:case n.BinaryOp.DivI64:case n.BinaryOp.DivF32:case n.BinaryOp.DivF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RemI32:case n.BinaryOp.RemI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.AndI32:case n.BinaryOp.AndI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" & "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.OrI32:case n.BinaryOp.OrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" | "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.XorI32:case n.BinaryOp.XorI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" ^ "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShlI32:case n.BinaryOp.ShlI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" << "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrU32:case n.BinaryOp.ShrU64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >>> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrI32:case n.BinaryOp.ShrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI32:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI32:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.EqI32:case n.BinaryOp.EqI64:case n.BinaryOp.EqF32:case n.BinaryOp.EqF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" == "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.NeI32:case n.BinaryOp.NeI64:case n.BinaryOp.NeF32:case n.BinaryOp.NeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" != "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtI32:case n.BinaryOp.LtI64:case n.BinaryOp.LtF32:case n.BinaryOp.LtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeI32:case n.BinaryOp.LeI64:case n.BinaryOp.LeF32:case n.BinaryOp.LeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtI32:case n.BinaryOp.GtI64:case n.BinaryOp.GtF32:case n.BinaryOp.GtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeI32:case n.BinaryOp.GeI64:case n.BinaryOp.GeF32:case n.BinaryOp.GeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI64:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI64:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.LtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.CopysignF32:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF32:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF32:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.CopysignF64:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF64:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF64:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")")}return;case n.ExpressionId.Select:return this.push("select<"),this.push(a(c)),this.push(">("),this.decompileExpression(n.getSelectThen(e)),this.push(", "),this.decompileExpression(n.getSelectElse(e)),this.push(", "),this.decompileExpression(n.getSelectCondition(e)),void this.push(")");case n.ExpressionId.Drop:return this.decompileExpression(n.getDropValue(e)),void this.push(";\n");case n.ExpressionId.Return:return void((t=n.getReturnValue(e))?(this.push("return "),this.decompileExpression(t),this.push(";\n")):this.push("return;\n"));case n.ExpressionId.Host:switch(n.getHostOp(e)){case n.HostOp.CurrentMemory:return void this.push("current_memory()");case n.HostOp.GrowMemory:return this.push("grow_memory("),this.decompileExpression(n.getHostOperand(e,0)),void this.push(")")}break;case n.ExpressionId.Nop:return void this.push(";\n");case n.ExpressionId.Unreachable:return void this.push("unreachable()");case n.ExpressionId.AtomicCmpxchg:case n.ExpressionId.AtomicRMW:case n.ExpressionId.AtomicWait:case n.ExpressionId.AtomicWake:}throw new Error("not implemented")},e.prototype.push=function(e){this.text.push(e)},e.prototype.finish=function(){var e=this.text.join("");return this.text=[],e},e}();function a(e){switch(e){case n.NativeType.None:return"void";case n.NativeType.I32:return"i32";case n.NativeType.I64:return"i64";case n.NativeType.F32:return"f32";case n.NativeType.F64:return"f64";case n.NativeType.Unreachable:throw new Error("unreachable type");case n.NativeType.Auto:throw new Error("auto type");default:throw new Error("unexpected type")}}t.Decompiler=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(10),i=r(13),a=r(12),s=r(2);t.formatDiagnostic=s.formatDiagnosticMessage;var o=r(11);t.parseFile=function(e,t,r,n){return void 0===r&&(r=!1),void 0===n&&(n=null),n||(n=new o.Parser),n.parseFile(e,t,r),n},t.nextFile=function(e){return e.nextFile()},t.nextDiagnostic=function(e){var t=e.program;return t.diagnosticsOffset>>=0)&&e<256)&&(n=s[e])?n:(r=p(e,(0|e)<0?-1:0,!0),i&&(s[e]=r),r):(i=-128<=(e|=0)&&e<128)&&(n=a[e])?n:(r=p(e,e<0?-1:0,!1),i&&(a[e]=r),r)}function c(e,t){if(isNaN(e))return t?T:g;if(t){if(e<0)return T;if(e>=_)return A}else{if(e<=-m)return N;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},C.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},C.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((a=o).isZero())return p+s;for(;p.length<6;)p="0"+p;s=""+p+s}},C.getHighBits=function(){return this.high},C.getHighBitsUnsigned=function(){return this.high>>>0},C.getLowBits=function(){return this.low},C.getLowBitsUnsigned=function(){return this.low>>>0},C.getNumBitsAbs=function(){if(this.isNegative())return this.eq(N)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&0==(e&1<=0},C.isOdd=function(){return 1==(1&this.low)},C.isEven=function(){return 0==(1&this.low)},C.equals=function(e){return i(e)||(e=h(e)),(this.unsigned===e.unsigned||this.high>>>31!=1||e.high>>>31!=1)&&(this.high===e.high&&this.low===e.low)},C.eq=C.equals,C.notEquals=function(e){return!this.eq(e)},C.neq=C.notEquals,C.ne=C.notEquals,C.lessThan=function(e){return this.comp(e)<0},C.lt=C.lessThan,C.lessThanOrEqual=function(e){return this.comp(e)<=0},C.lte=C.lessThanOrEqual,C.le=C.lessThanOrEqual,C.greaterThan=function(e){return this.comp(e)>0},C.gt=C.greaterThan,C.greaterThanOrEqual=function(e){return this.comp(e)>=0},C.gte=C.greaterThanOrEqual,C.ge=C.greaterThanOrEqual,C.compare=function(e){if(i(e)||(e=h(e)),this.eq(e))return 0;var t=this.isNegative(),r=e.isNegative();return t&&!r?-1:!t&&r?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1},C.comp=C.compare,C.negate=function(){return!this.unsigned&&this.eq(N)?N:this.not().add(E)},C.neg=C.negate,C.add=function(e){i(e)||(e=h(e));var t=this.high>>>16,r=65535&this.high,n=this.low>>>16,a=65535&this.low,s=e.high>>>16,o=65535&e.high,c=e.low>>>16,l=0,u=0,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,u+=(d+=n+c)>>>16,l+=(u+=r+o)>>>16,l+=t+s,p((d&=65535)<<16|(_&=65535),(l&=65535)<<16|(u&=65535),this.unsigned)},C.subtract=function(e){return i(e)||(e=h(e)),this.add(e.neg())},C.sub=C.subtract,C.multiply=function(e){if(this.isZero())return g;if(i(e)||(e=h(e)),r)return p(r.mul(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned);if(e.isZero())return g;if(this.eq(N))return e.isOdd()?N:g;if(e.eq(N))return this.isOdd()?N:g;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(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,T=0,E=0;return T+=(E+=s*d)>>>16,m+=(T+=a*d)>>>16,T&=65535,m+=(T+=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((T&=65535)<<16|(E&=65535),(_&=65535)<<16|(m&=65535),this.unsigned)},C.mul=C.multiply,C.divide=function(e){if(i(e)||(e=h(e)),e.isZero())throw Error("division by zero");var t,n,a;if(r)return this.unsigned||-2147483648!==this.high||-1!==e.low||-1!==e.high?p((this.unsigned?r.div_u:r.div_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?T:g;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return T;if(e.gt(this.shru(1)))return f;a=T}else{if(this.eq(N))return e.eq(E)||e.eq(I)?N:e.eq(N)?E:(t=this.shr(1).div(e).shl(1)).eq(g)?e.isNegative()?E:I:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(N))return this.unsigned?T:g;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();a=g}for(n=this;n.gte(e);){t=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var s=Math.ceil(Math.log(t)/Math.LN2),o=s<=48?1:l(2,s-48),u=c(t),d=u.mul(e);d.isNegative()||d.gt(n);)d=(u=c(t-=o,this.unsigned)).mul(e);u.isZero()&&(u=E),a=a.add(u),n=n.sub(d)}return a},C.div=C.divide,C.modulo=function(e){return i(e)||(e=h(e)),r?p((this.unsigned?r.rem_u:r.rem_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this.sub(this.div(e).mul(e))},C.mod=C.modulo,C.rem=C.modulo,C.not=function(){return p(~this.low,~this.high,this.unsigned)},C.and=function(e){return i(e)||(e=h(e)),p(this.low&e.low,this.high&e.high,this.unsigned)},C.or=function(e){return i(e)||(e=h(e)),p(this.low|e.low,this.high|e.high,this.unsigned)},C.xor=function(e){return i(e)||(e=h(e)),p(this.low^e.low,this.high^e.high,this.unsigned)},C.shiftLeft=function(e){return i(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?p(this.low<>>32-e,this.unsigned):p(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):p(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},C.shr=C.shiftRight,C.shiftRightUnsigned=function(e){if(i(e)&&(e=e.toInt()),0===(e&=63))return this;var t=this.high;return e<32?p(this.low>>>e|t<<32-e,t>>>e,this.unsigned):p(32===e?t:t>>>e-32,0,this.unsigned)},C.shru=C.shiftRightUnsigned,C.shr_u=C.shiftRightUnsigned,C.toSigned=function(){return this.unsigned?p(this.low,this.high,!1):this},C.toUnsigned=function(){return this.unsigned?this:p(this.low,this.high,!0)},C.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},C.toBytesLE=function(){var e=this.high,t=this.low;return[255&t,t>>>8&255,t>>>16&255,t>>>24,255&e,e>>>8&255,e>>>16&255,e>>>24]},C.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,255&e,t>>>24,t>>>16&255,t>>>8&255,255&t]},n.fromBytes=function(e,t,r){return r?n.fromBytesLE(e,t):n.fromBytesBE(e,t)},n.fromBytesLE=function(e,t){return new n(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)},n.fromBytesBE=function(e,t){return new n(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}},function(e,t,r){(function(e){const t=e.Long||r(15);e.i64_zero=t.ZERO,e.i64_one=t.ONE,e.i64_new=function(e,r){return t.fromBits(e,r)},e.i64_low=function(e){return e.low},e.i64_high=function(e){return e.high},e.i64_add=function(e,t){return e.add(t)},e.i64_sub=function(e,t){return e.sub(t)},e.i64_mul=function(e,t){return e.mul(t)},e.i64_div=function(e,t){return e.div(t)},e.i64_div_u=function(e,t){return e.toUnsigned().div(t.toUnsigned()).toSigned()},e.i64_rem=function(e,t){return e.mod(t)},e.i64_rem_u=function(e,t){return e.toUnsigned().mod(t.toUnsigned()).toSigned()},e.i64_and=function(e,t){return e.and(t)},e.i64_or=function(e,t){return e.or(t)},e.i64_xor=function(e,t){return e.xor(t)},e.i64_shl=function(e,t){return e.shl(t)},e.i64_shr=function(e,t){return e.shr(t)},e.i64_shr_u=function(e,t){return e.shru(t)},e.i64_not=function(e){return e.not()},e.i64_eq=function(e,t){return e.eq(t)},e.i64_ne=function(e,t){return e.ne(t)},e.i64_align=function(e,r){assert(r&&0==(r&r-1));var n=t.fromInt(r-1);return e.add(n).and(n.not())},e.i64_is_i8=function(e){return 0===e.high&&e.low>=0&&e.low<=i8.MAX_VALUE||-1===e.high&&e.low>=i8.MIN_VALUE&&e.low<0},e.i64_is_i16=function(e){return 0===e.high&&e.low>=0&&e.low<=i16.MAX_VALUE||-1===e.high&&e.low>=i16.MIN_VALUE&&e.low<0},e.i64_is_i32=function(e){return 0===e.high&&e.low>=0||-1===e.high&&e.low<0},e.i64_is_u8=function(e){return 0===e.high&&e.low>=0&&e.low<=u8.MAX_VALUE},e.i64_is_u16=function(e){return 0===e.high&&e.low>=0&&e.low<=u16.MAX_VALUE},e.i64_is_u32=function(e){return 0===e.high},e.i64_is_bool=function(e){return 0===e.high&&(0===e.low||1===e.low)};const n=t.fromNumber(f32.MIN_SAFE_INTEGER),i=t.fromNumber(f32.MAX_SAFE_INTEGER);e.i64_is_f32=function(e){return e.gte(n)&&e.lte(i)};const a=t.fromNumber(f64.MIN_SAFE_INTEGER),s=t.fromNumber(f64.MAX_SAFE_INTEGER);e.i64_is_f64=function(e){return e.gte(a)&&e.lte(s)},e.i64_to_f32=function(t){return e.Math.fround(t.toNumber())},e.i64_to_f64=function(e){return e.toNumber()},e.i64_to_string=function(e,t){return(t?e.toUnsigned():e).toString(10)}}).call(this,r(6))},function(e,t,r){(function(e){const t=new Float64Array(1),r=new Float32Array(t.buffer),n=new Int32Array(t.buffer);e.f32_as_i32=function(e){return r[0]=e,n[0]},e.i32_as_f32=function(e){return n[0]=e,r[0]},e.f64_as_i64=function(e){return t[0]=e,i64_new(n[0],n[1])},e.i64_as_f64=function(e){return n[0]=i64_low(e),n[1]=i64_high(e),t[0]}}).call(this,r(6))},function(e,t,r){"use strict";function n(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24}function i(e,t,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function a(e,t){var r=n(e,t),i=n(e,t+4);return i64_new(r,i)}Object.defineProperty(t,"__esModule",{value:!0}),t.readI32=n,t.writeI32=i,t.readI64=a,t.writeI64=function(e,t,r){i(i64_low(e),t,r),i(i64_high(e),t,r+4)},t.readF32=function(e,t){return i32_as_f32(n(e,t))},t.writeF32=function(e,t,r){i(f32_as_i32(e),t,r)},t.readF64=function(e,t){return i64_as_f64(a(e,t))},t.writeF64=function(e,t,r){var n=f64_as_i64(e);i(i64_low(n),t,r),i(i64_high(n),t,r+4)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=" ",i=" ",a=" ";t.indent=function(e,t){for(;t>=4;)e.push(a),t-=4;t>=2&&(e.push(i),t-=2),t&&e.push(n)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=47;function i(e){for(var t,r=0,i=e.length;r+10||i=0;)if(e.charCodeAt(a)==n){r-a==3&&46==e.charCodeAt(a+1)&&46==e.charCodeAt(a+2)||(e=t?e.substring(0,a):e.substring(0,a)+e.substring(r+3),i-=r+3-a,r=a-1);break}if(a<0&&r>0&&(2!=r||46!=e.charCodeAt(0)||46!=e.charCodeAt(1))){i=(e=e.substring(r+4)).length;continue}}}r++}return i>0?e:"."}function a(e){for(var t=e.length;--t>0;)if(e.charCodeAt(t)==n)return e.substring(0,t);return"."}t.normalizePath=i,t.resolvePath=function(e,t){return e.startsWith("std/")?e:i(a(t)+String.fromCharCode(n)+e)},t.dirname=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NULL=0]="NULL",e[e.LINEFEED=10]="LINEFEED",e[e.CARRIAGERETURN=13]="CARRIAGERETURN",e[e.LINESEPARATOR=8232]="LINESEPARATOR",e[e.PARAGRAPHSEPARATOR=8233]="PARAGRAPHSEPARATOR",e[e.NEXTLINE=133]="NEXTLINE",e[e.SPACE=32]="SPACE",e[e.NONBREAKINGSPACE=160]="NONBREAKINGSPACE",e[e.ENQUAD=8192]="ENQUAD",e[e.EMQUAD=8193]="EMQUAD",e[e.ENSPACE=8194]="ENSPACE",e[e.EMSPACE=8195]="EMSPACE",e[e.THREEPEREMSPACE=8196]="THREEPEREMSPACE",e[e.FOURPEREMSPACE=8197]="FOURPEREMSPACE",e[e.SIXPEREMSPACE=8198]="SIXPEREMSPACE",e[e.FIGURESPACE=8199]="FIGURESPACE",e[e.PUNCTUATIONSPACE=8200]="PUNCTUATIONSPACE",e[e.THINSPACE=8201]="THINSPACE",e[e.HAIRSPACE=8202]="HAIRSPACE",e[e.ZEROWIDTHSPACE=8203]="ZEROWIDTHSPACE",e[e.NARROWNOBREAKSPACE=8239]="NARROWNOBREAKSPACE",e[e.IDEOGRAPHICSPACE=12288]="IDEOGRAPHICSPACE",e[e.MATHEMATICALSPACE=8287]="MATHEMATICALSPACE",e[e.OGHAM=5760]="OGHAM",e[e._=95]="_",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.AMPERSAND=38]="AMPERSAND",e[e.ASTERISK=42]="ASTERISK",e[e.AT=64]="AT",e[e.BACKSLASH=92]="BACKSLASH",e[e.BACKTICK=96]="BACKTICK",e[e.BAR=124]="BAR",e[e.CARET=94]="CARET",e[e.CLOSEBRACE=125]="CLOSEBRACE",e[e.CLOSEBRACKET=93]="CLOSEBRACKET",e[e.CLOSEPAREN=41]="CLOSEPAREN",e[e.COLON=58]="COLON",e[e.COMMA=44]="COMMA",e[e.DOLLAR=36]="DOLLAR",e[e.DOT=46]="DOT",e[e.DOUBLEQUOTE=34]="DOUBLEQUOTE",e[e.EQUALS=61]="EQUALS",e[e.EXCLAMATION=33]="EXCLAMATION",e[e.GREATERTHAN=62]="GREATERTHAN",e[e.HASH=35]="HASH",e[e.LESSTHAN=60]="LESSTHAN",e[e.MINUS=45]="MINUS",e[e.OPENBRACE=123]="OPENBRACE",e[e.OPENBRACKET=91]="OPENBRACKET",e[e.OPENPAREN=40]="OPENPAREN",e[e.PERCENT=37]="PERCENT",e[e.PLUS=43]="PLUS",e[e.QUESTION=63]="QUESTION",e[e.SEMICOLON=59]="SEMICOLON",e[e.SINGLEQUOTE=39]="SINGLEQUOTE",e[e.SLASH=47]="SLASH",e[e.TILDE=126]="TILDE",e[e.BACKSPACE=8]="BACKSPACE",e[e.FORMFEED=12]="FORMFEED",e[e.BYTEORDERMARK=65279]="BYTEORDERMARK",e[e.TAB=9]="TAB",e[e.VERTICALTAB=11]="VERTICALTAB"}(t.CharCode||(t.CharCode={})),t.isLineBreak=function(e){switch(e){case 10:case 13:case 8232:case 8233:return!0;default:return!1}},t.isWhiteSpace=function(e){switch(e){case 32:case 9:case 11:case 12:case 160:case 133:case 5760:case 8239:case 8287:case 12288:case 65279:return!0;default:return e>=8192&&e<=8203}},t.isDecimalDigit=function(e){return e>=48&&e<=57},t.isOctalDigit=function(e){return e>=48&&e<=55},t.isIdentifierStart=function(e){return e>=65&&e<=90||e>=97&&e<=122||36==e||95==e||e>127&&function(e){return!(e<0||e>65535)&&a(e,n)}(e)},t.isKeywordCharacter=function(e){return e>=97&&e<=122},t.isIdentifierPart=function(e){return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||36==e||95==e||e>127&&function(e){return!(e<0||e>65535)&&a(e,i)}(e)};var n=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1319,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2208,2208,2210,2220,2308,2361,2365,2365,2384,2384,2392,2401,2417,2423,2425,2431,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3133,3160,3161,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3424,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6176,6263,6272,6312,6314,6314,6320,6389,6400,6428,6480,6509,6512,6516,6528,6571,6593,6599,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7401,7404,7406,7409,7413,7414,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11823,11823,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42647,42656,42735,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43648,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44002,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],i=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1155,1159,1162,1319,1329,1366,1369,1369,1377,1415,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1520,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2048,2093,2112,2139,2208,2208,2210,2220,2276,2302,2304,2403,2406,2415,2417,2423,2425,2431,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024,3031,3031,3046,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3161,3168,3171,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311,3313,3314,3330,3331,3333,3340,3342,3344,3346,3386,3389,3396,3398,3400,3402,3406,3415,3415,3424,3427,3430,3439,3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4957,4959,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5908,5920,5940,5952,5971,5984,5996,5998,6e3,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6263,6272,6314,6320,6389,6400,6428,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6617,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7376,7378,7380,7414,7424,7654,7676,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8204,8205,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775,11823,11823,12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12442,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42647,42655,42737,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43047,43072,43123,43136,43204,43216,43225,43232,43255,43259,43259,43264,43309,43312,43347,43360,43388,43392,43456,43471,43481,43520,43574,43584,43597,43600,43609,43616,43638,43642,43643,43648,43714,43739,43741,43744,43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65062,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500];function a(e,t){if(e2?(r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),c.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",c.length.toString(10)),E.createUnreachable()):r&&1==r.length?(m=e.compileExpression(c[0],e.options.usizeType,1,0),(b=2==c.length?u(e,c[1]):0)<0?E.createUnreachable():(e.currentType=r[0],E.createLoad(r[0].byteSize,r[0].is(5),m,r[0].is(4)&&h.is(4)&&h.size>r[0].size?(e.currentType=h).toNativeType():(e.currentType=r[0]).toNativeType(),b))):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable());case"store":if(e.currentType=a.Type.void,c.length<2||c.length>3)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),c.length<2?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"2",c.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),E.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable();m=e.compileExpression(c[0],e.options.usizeType,1,0),y=e.compileExpression(c[1],r[0],r[0].is(4)?0:1,0);f=void 0;return r[0].is(4)&&(!e.currentType.is(4)||e.currentType.size1)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),E.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable();var L;if(!(L=r[0].classReference))return e.error(n.DiagnosticCode.Operation_not_supported,d.range),E.createUnreachable();var b=void 0;if(c.length){if(c[0].kind!=i.NodeKind.LITERAL||c[0].literalKind!=i.LiteralKind.STRING)return e.error(n.DiagnosticCode.String_literal_expected,c[0].range),E.createUnreachable();var k=c[0].value,R=L.members?L.members.get(k):null;if(!R||R.kind!=o.ElementKind.FIELD)return e.error(n.DiagnosticCode.Type_0_has_no_property_1,c[0].range,L.internalName,k),E.createUnreachable();b=R.memoryOffset}else b=L.currentMemoryOffset;return e.options.isWasm64?h.is(4)&&h.size<=32?(e.currentType=a.Type.u32,E.createI32(b)):E.createI64(b):h.is(4)&&64==h.size?(e.currentType=a.Type.u64,E.createI64(b)):E.createI32(b);case"select":if(3!=c.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),E.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),E.createUnreachable();m=e.compileExpression(c[0],r[0],1,0)}else m=e.compileExpressionRetainType(c[0],a.Type.i32,0);f=e.currentType;switch(y=e.compileExpression(c[1],f,1,0),g=e.makeIsTrueish(e.compileExpressionRetainType(c[2],a.Type.bool,0),e.currentType),e.currentType=f,e.currentType.kind){case 0:case 1:case 5:case 6:case 10:default:T=E.createSelect(m,y,g);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),T=E.createUnreachable()}return T;case"unreachable":return 0!=c.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createUnreachable();case"current_memory":return e.currentType=a.Type.i32,0!=c.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createHost(s.HostOp.CurrentMemory);case"grow_memory":return e.currentType=a.Type.i32,1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),m=E.createUnreachable()):m=e.compileExpression(c[0],a.Type.i32,1,0),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createHost(s.HostOp.GrowMemory,null,[m]);case"move_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=c.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),e.currentType=a.Type.void,E.createUnreachable();throw m=e.compileExpression(c[0],e.options.usizeType,1,0),y=e.compileExpression(c[1],e.options.usizeType,1,0),g=e.compileExpression(c[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"set_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=c.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),e.currentType=a.Type.void,E.createUnreachable();throw m=e.compileExpression(c[0],e.options.usizeType,1,0),y=e.compileExpression(c[1],a.Type.u32,1,0),g=e.compileExpression(c[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=r[0],E.createUnreachable()):(m=e.compileExpressionRetainType(c[0],r[0],0),e.currentType=r[0],e.currentType.size!=r[0].size?(e.error(n.DiagnosticCode.Operation_not_supported,d.range),E.createUnreachable()):m):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable());case"assert":if(c.length<1||c.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),c.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)):c.length>2&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",c.length.toString(10)),E.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),E.createUnreachable();m=e.compileExpression(c[0],r[0],1,1)}else m=e.compileExpressionRetainType(c[0],a.Type.bool,1);f=e.currentType;if(e.currentType=f.nonNullableType,e.options.noAssert)return h==a.Type.void?(e.currentType=a.Type.void,E.createNop()):m;var x=_(e,2==c.length?c[1]:null,d);if(e.currentType=f.nonNullableType,h==a.Type.void){switch(e.currentType.kind){default:T=E.createIf(E.createUnary(s.UnaryOp.EqzI32,m),x);break;case 3:case 8:T=E.createIf(E.createUnary(s.UnaryOp.EqzI64,m),x);break;case 4:case 9:T=E.createIf(E.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,m),x);break;case 11:T=E.createIf(E.createBinary(s.BinaryOp.EqF32,m,E.createF32(0)),x);break;case 12:T=E.createIf(E.createBinary(s.BinaryOp.EqF64,m,E.createF64(0)),x);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),T=x}e.currentType=a.Type.void}else switch(e.currentType.kind){case 0:case 1:case 5:case 6:case 10:A=e.currentFunction.flow,v=e.currentFunction.getAndFreeTempLocal(e.currentType,!A.canOverflow(m,e.currentType));T=E.createIf(E.createTeeLocal(v.index,m),E.createGetLocal(v.index,s.NativeType.I32),x);break;case 2:case 7:default:v=e.currentFunction.getAndFreeTempLocal(a.Type.i32,!1);T=E.createIf(E.createTeeLocal(v.index,m),E.createGetLocal(v.index,s.NativeType.I32),x);break;case 3:case 8:v=e.currentFunction.getAndFreeTempLocal(a.Type.i64,!1);T=E.createIf(E.createUnary(s.UnaryOp.EqzI64,E.createTeeLocal(v.index,m)),x,E.createGetLocal(v.index,s.NativeType.I64));break;case 4:case 9:v=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);T=E.createIf(E.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,E.createTeeLocal(v.index,m)),x,E.createGetLocal(v.index,e.options.nativeSizeType));break;case 11:v=e.currentFunction.getAndFreeTempLocal(a.Type.f32,!1);T=E.createIf(E.createBinary(s.BinaryOp.EqF32,E.createTeeLocal(v.index,m),E.createF32(0)),x,E.createGetLocal(v.index,s.NativeType.F32));break;case 12:v=e.currentFunction.getAndFreeTempLocal(a.Type.f64,!1);T=E.createIf(E.createBinary(s.BinaryOp.EqF64,E.createTeeLocal(v.index,m),E.createF64(0)),x,E.createGetLocal(v.index,s.NativeType.F64));break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),T=x}return T;case"unchecked":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),E.createUnreachable()):((A=e.currentFunction.flow).set(4096),T=e.compileExpressionRetainType(c[0],h,0),A.unset(4096),T);case"call_indirect":if(c.length<1)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),E.createUnreachable();var F=void 0;if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),E.createUnreachable();F=r[0]}else F=h;if(m=e.compileExpressionRetainType(c[0],a.Type.u32,0),7!=e.currentType.kind)return e.error(n.DiagnosticCode.Operation_not_supported,c[0].range),E.createUnreachable();for(var B=c.length-1,U=new Array(B),D=new Array(B+1),P=F.toNativeType(),w=new Array(B),M=0;M1&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,i.range,"1",t.length.toString(10)),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"1",r.length.toString(10)),null}function u(e,t){var r,i;return e.options.isWasm64?(r=e.precomputeExpression(t,a.Type.usize64,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I64||0!=s.getConstValueI64High(r)||(i=s.getConstValueI64Low(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)):(r=e.precomputeExpression(t,a.Type.usize32,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I32||(i=s.getConstValueI32(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)),i}t.compileCall=c;var h="allocate_memory";t.compileAllocate=function(e,t,r){var i=e.program;assert(t.program==i);var a=e.module,s=e.options,c=i.elementsLookup.get(h);if(!c)return i.error(n.DiagnosticCode.Cannot_find_name_0,r.range,h),i.info(n.DiagnosticCode.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf,r.range),a.createUnreachable();if(c.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.error(n.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,c.internalName),a.createUnreachable();var p=c.resolve();return p&&e.compileFunction(p)?(e.currentType=t.type,a.createCall(p.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],s.nativeSizeType)):a.createUnreachable()};var d="abort";function _(e,t,r){var n=e.program,i=e.module,c=n.typesLookup.get("string");if(!c)return i.createUnreachable();var p=n.elementsLookup.get(d);if(!p||p.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.createUnreachable();var l=p.resolve();if(!l||!e.compileFunction(l))return i.createUnreachable();var u=null!=t?e.compileExpression(t,c,1,0):c.toNativeZero(i),h=e.compileStaticString(r.range.source.normalizedPath);return e.currentType=a.Type.void,i.createBlock(null,[i.createCallImport(l.internalName,[u,h,i.createI32(r.range.line),i.createI32(r.range.column)],s.NativeType.None),i.createUnreachable()])}t.compileAbort=_},function(t,r){t.exports=e},function(e,t,r){(function(e){const t=e.Binaryen||r(23);for(var n in t)(n.startsWith("_Binaryen")||n.startsWith("_Relooper"))&&(e[n]=t[n]);e.allocate_memory=function(e){return e?t._malloc(e):0},e.free_memory=function(e){e&&t._free(e)},e.move_memory=function(e,r,n){return t._memmove(e,r,n)},e.store=function(e,r){t.HEAPU8[e]=r},e.load=function(e){return t.HEAPU8[e]};const i=r(3).Module;i.prototype.toText=function(){var e=t.print,r="";return t.print=function(e){r+=e+"\n"},_BinaryenModulePrint(this.ref),t.print=e,r},i.prototype.toAsmjs=function(){var e=t.print,r="";return t.print=function(e){r+=e+"\n"},_BinaryenModulePrintAsmjs(this.ref),t.print=e,r}}).call(this,r(6))},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(25)(t)}).call(this,r(6))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(26),r(24),r(17),r(16)},function(e,t,r){r(27),e.exports=r(14)}])}); +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("binaryen")):"function"==typeof define&&define.amd?define(["binaryen"],t):"object"==typeof exports?exports.assemblyscript=t(require("binaryen")):e.assemblyscript=t(e.binaryen)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=28)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NONE=0]="NONE",e[e.IMPORT=1]="IMPORT",e[e.EXPORT=2]="EXPORT",e[e.DECLARE=4]="DECLARE",e[e.CONST=8]="CONST",e[e.LET=16]="LET",e[e.STATIC=32]="STATIC",e[e.READONLY=64]="READONLY",e[e.ABSTRACT=128]="ABSTRACT",e[e.PUBLIC=256]="PUBLIC",e[e.PRIVATE=512]="PRIVATE",e[e.PROTECTED=1024]="PROTECTED",e[e.GET=2048]="GET",e[e.SET=4096]="SET",e[e.AMBIENT=8192]="AMBIENT",e[e.GENERIC=16384]="GENERIC",e[e.GENERIC_CONTEXT=32768]="GENERIC_CONTEXT",e[e.INSTANCE=65536]="INSTANCE",e[e.CONSTRUCTOR=131072]="CONSTRUCTOR",e[e.ARROW=262144]="ARROW",e[e.MODULE_EXPORT=524288]="MODULE_EXPORT",e[e.MODULE_IMPORT=1048576]="MODULE_IMPORT",e[e.BUILTIN=2097152]="BUILTIN",e[e.COMPILED=4194304]="COMPILED",e[e.INLINED=8388608]="INLINED",e[e.SCOPED=16777216]="SCOPED",e[e.TRAMPOLINE=33554432]="TRAMPOLINE",e[e.VIRTUAL=67108864]="VIRTUAL",e[e.MAIN=134217728]="MAIN"}(t.CommonFlags||(t.CommonFlags={})),t.PATH_DELIMITER="/",t.PARENT_SUBST="..",t.GETTER_PREFIX="get:",t.SETTER_PREFIX="set:",t.INSTANCE_DELIMITER="#",t.STATIC_DELIMITER=".",t.INNER_DELIMITER="~",t.LIBRARY_SUBST="~lib",t.LIBRARY_PREFIX=t.LIBRARY_SUBST+t.PATH_DELIMITER,t.FILESPACE_PREFIX="file:"},function(e,t,r){"use strict";function n(e){for(var r in e)t.hasOwnProperty(r)||(t[r]=e[r])}Object.defineProperty(t,"__esModule",{value:!0}),n(r(21)),n(r(20)),n(r(19)),n(r(18))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(9),a=r(1),s=r(9);function o(e){switch(e){case n.INFO:return"INFO";case n.WARNING:return"WARNING";case n.ERROR:return"ERROR";default:return assert(!1),""}}function c(e){switch(e){case n.INFO:return t.COLOR_BLUE;case n.WARNING:return t.COLOR_YELLOW;case n.ERROR:return t.COLOR_RED;default:return assert(!1),""}}t.DiagnosticCode=s.DiagnosticCode,t.diagnosticCodeToString=s.diagnosticCodeToString,function(e){e[e.INFO=0]="INFO",e[e.WARNING=1]="WARNING",e[e.ERROR=2]="ERROR"}(n=t.DiagnosticCategory||(t.DiagnosticCategory={})),t.diagnosticCategoryToString=o,t.COLOR_BLUE="",t.COLOR_YELLOW="",t.COLOR_RED="",t.COLOR_RESET="",t.diagnosticCategoryToColor=c;var p=function(){function e(e,t,r){this.range=null,this.code=e,this.category=t,this.message=r}return e.create=function(t,r,n,a,s){void 0===n&&(n=null),void 0===a&&(a=null),void 0===s&&(s=null);var o=i.diagnosticCodeToString(t);return null!=n&&(o=o.replace("{0}",n)),null!=a&&(o=o.replace("{1}",a)),null!=s&&(o=o.replace("{2}",s)),new e(t,r,o)},e.createInfo=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.INFO,r,i)},e.createWarning=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.WARNING,r,i)},e.createError=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.ERROR,r,i)},e.prototype.withRange=function(e){return this.range=e,this},e.prototype.toString=function(){return this.range?o(this.category)+" "+this.code.toString(10)+': "'+this.message+'" in '+this.range.source.normalizedPath+":"+this.range.line.toString(10)+":"+this.range.column.toString(10):o(this.category)+" "+this.code.toString(10)+": "+this.message},e}();function l(e,r){void 0===r&&(r=!1);for(var n=e.source.text,i=n.length,s=e.start,o=e.end;s>0&&!a.isLineBreak(n.charCodeAt(s-1));)s--;for(;o=0;--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)}}();Object.defineProperty(t,"__esModule",{value:!0});var i=r(0),a=r(8);t.Token=a.Token,t.Range=a.Range;var s,o=r(1);!function(e){e[e.SOURCE=0]="SOURCE",e[e.TYPE=1]="TYPE",e[e.TYPEPARAMETER=2]="TYPEPARAMETER",e[e.PARAMETER=3]="PARAMETER",e[e.SIGNATURE=4]="SIGNATURE",e[e.IDENTIFIER=5]="IDENTIFIER",e[e.ASSERTION=6]="ASSERTION",e[e.BINARY=7]="BINARY",e[e.CALL=8]="CALL",e[e.COMMA=9]="COMMA",e[e.ELEMENTACCESS=10]="ELEMENTACCESS",e[e.FALSE=11]="FALSE",e[e.FUNCTION=12]="FUNCTION",e[e.INSTANCEOF=13]="INSTANCEOF",e[e.LITERAL=14]="LITERAL",e[e.NEW=15]="NEW",e[e.NULL=16]="NULL",e[e.PARENTHESIZED=17]="PARENTHESIZED",e[e.PROPERTYACCESS=18]="PROPERTYACCESS",e[e.TERNARY=19]="TERNARY",e[e.SUPER=20]="SUPER",e[e.THIS=21]="THIS",e[e.TRUE=22]="TRUE",e[e.CONSTRUCTOR=23]="CONSTRUCTOR",e[e.UNARYPOSTFIX=24]="UNARYPOSTFIX",e[e.UNARYPREFIX=25]="UNARYPREFIX",e[e.BLOCK=26]="BLOCK",e[e.BREAK=27]="BREAK",e[e.CONTINUE=28]="CONTINUE",e[e.DO=29]="DO",e[e.EMPTY=30]="EMPTY",e[e.EXPORT=31]="EXPORT",e[e.EXPORTIMPORT=32]="EXPORTIMPORT",e[e.EXPRESSION=33]="EXPRESSION",e[e.FOR=34]="FOR",e[e.IF=35]="IF",e[e.IMPORT=36]="IMPORT",e[e.RETURN=37]="RETURN",e[e.SWITCH=38]="SWITCH",e[e.THROW=39]="THROW",e[e.TRY=40]="TRY",e[e.VARIABLE=41]="VARIABLE",e[e.VOID=42]="VOID",e[e.WHILE=43]="WHILE",e[e.CLASSDECLARATION=44]="CLASSDECLARATION",e[e.ENUMDECLARATION=45]="ENUMDECLARATION",e[e.ENUMVALUEDECLARATION=46]="ENUMVALUEDECLARATION",e[e.FIELDDECLARATION=47]="FIELDDECLARATION",e[e.FUNCTIONDECLARATION=48]="FUNCTIONDECLARATION",e[e.IMPORTDECLARATION=49]="IMPORTDECLARATION",e[e.INTERFACEDECLARATION=50]="INTERFACEDECLARATION",e[e.METHODDECLARATION=51]="METHODDECLARATION",e[e.NAMESPACEDECLARATION=52]="NAMESPACEDECLARATION",e[e.TYPEDECLARATION=53]="TYPEDECLARATION",e[e.VARIABLEDECLARATION=54]="VARIABLEDECLARATION",e[e.DECORATOR=55]="DECORATOR",e[e.EXPORTMEMBER=56]="EXPORTMEMBER",e[e.SWITCHCASE=57]="SWITCHCASE",e[e.COMMENT=58]="COMMENT"}(s=t.NodeKind||(t.NodeKind={})),t.nodeIsConstantValue=function(e){switch(e){case s.LITERAL:case s.NULL:case s.TRUE:case s.FALSE:return!0}return!1},t.nodeIsCallable=function(e){switch(e){case s.IDENTIFIER:case s.CALL:case s.ELEMENTACCESS:case s.PROPERTYACCESS:return!0}return!1},t.nodeIsGenericCallable=function(e){switch(e){case s.IDENTIFIER:case s.PROPERTYACCESS:return!0}return!1};var c=function(){function e(){this.parent=null,this.flags=i.CommonFlags.NONE}return e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.isAny=function(e){return 0!=(this.flags&e)},e.prototype.set=function(e){this.flags|=e},e.createType=function(e,t,r,n){var i=new l;return i.range=n,i.name=e,e.parent=i,i.typeArguments=t,t&&Re(t,i),i.isNullable=r,i},e.createOmittedType=function(t){return e.createType(e.createIdentifierExpression("",t),null,!1,t)},e.createTypeParameter=function(e,t,r){var n=new u;return n.range=r,n.name=e,e.parent=n,n.extendsType=t,t&&(t.parent=n),n},e.createParameter=function(e,t,r,n,i){var a=new h;return a.range=i,a.name=e,e.parent=a,a.type=t,t&&(t.parent=a),a.initializer=r,r&&(r.parent=a),a.parameterKind=n,a},e.createSignature=function(e,t,r,n,i){var a=new _;return a.range=i,a.parameters=e,Re(e,a),a.returnType=t,t.parent=a,a.explicitThisType=r,r&&(r.parent=a),a.isNullable=n,a},e.createDecorator=function(e,t,r){var n=new y;return n.range=r,n.name=e,e.parent=n,n.arguments=t,t&&Re(t,n),n.decoratorKind=m(e),n},e.createComment=function(e,t,r){var n=new g;return n.range=r,n.commentKind=t,n.text=e,n},e.createIdentifierExpression=function(e,t){var r=new f;return r.range=t,r.text=e,r},e.createEmptyIdentifierExpression=function(e){var t=new f;return t.range=e,t.text="",t},e.createArrayLiteralExpression=function(e,t){var r=new v;return r.range=t,r.elementExpressions=e,function(e,t){for(var r=0,n=e.length;r=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==Y.ENTRY},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLibrary",{get:function(){return this.sourceKind==Y.LIBRARY},enumerable:!0,configurable:!0}),t}(c);t.Source=q;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=be(this,!0)),this.cachedProgramLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"fileLevelInternalName",{get:function(){return this.cachedFileLevelInternalName||(this.cachedFileLevelInternalName=be(this,!1)),this.cachedFileLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevel",{get:function(){var e=this.parent;return!!e&&(!(e.kind==s.VARIABLE&&!(e=e.parent))&&e.kind==s.SOURCE)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevelExport",{get:function(){var e=this.parent;return!(!e||e.kind==s.VARIABLE&&!(e=e.parent))&&(e.kind==s.NAMESPACEDECLARATION?this.is(i.CommonFlags.EXPORT)&&e.isTopLevelExport:e.kind==s.CLASSDECLARATION?this.is(i.CommonFlags.STATIC)&&e.isTopLevelExport:e.kind==s.SOURCE&&this.is(i.CommonFlags.EXPORT))},enumerable:!0,configurable:!0}),t.prototype.needsExplicitExport=function(e){return e.name.text!=e.externalName.text||this.range.source!=e.range.source||!this.isTopLevelExport},t}(Q);t.DeclarationStatement=j;var Z=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t}(j);t.VariableLikeDeclarationStatement=Z;var $=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BLOCK,t}return n(t,e),t}(Q);t.BlockStatement=$;var J=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BREAK,t}return n(t,e),t}(Q);t.BreakStatement=J;var ee=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=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CONTINUE,t}return n(t,e),t}(Q);t.ContinueStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.DO,t}return n(t,e),t}(Q);t.DoStatement=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EMPTY,t}return n(t,e),t}(Q);t.EmptyStatement=ne;var ie=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=ie;var ae=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=ae;var se=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=se;var oe=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=oe;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORT,t}return n(t,e),t}(Q);t.ExportStatement=ce;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPRESSION,t}return n(t,e),t}(Q);t.ExpressionStatement=pe;var le=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}(Z);t.FieldDeclaration=le;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FOR,t}return n(t,e),t}(Q);t.ForStatement=ue;var he=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=he;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return n(t,e),t}(Q);t.IfStatement=de;var _e=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=_e;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORT,t}return n(t,e),t}(Q);t.ImportStatement=me;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return n(t,e),t}(ee);t.InterfaceDeclaration=ye;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return n(t,e),t}(he);t.MethodDeclaration=ge;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.NAMESPACEDECLARATION,t}return n(t,e),t}(j);t.NamespaceDeclaration=Te;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return n(t,e),t}(Q);t.ReturnStatement=Ee;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCHCASE,t}return n(t,e),t}(c);t.SwitchCase=fe;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCH,t}return n(t,e),t}(Q);t.SwitchStatement=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.THROW,t}return n(t,e),t}(Q);t.ThrowStatement=ve;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TRY,t}return n(t,e),t}(Q);t.TryStatement=Ae;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return n(t,e),t}(j);t.TypeDeclaration=Ne;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLEDECLARATION,t}return n(t,e),t}(Z);t.VariableDeclaration=Ce;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return n(t,e),t}(Q);t.VariableStatement=Se;var Oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VOID,t}return n(t,e),t}(Q);t.VoidStatement=Oe;var Le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return n(t,e),t}(Q);function be(e,t){void 0===t&&(t=!1);var r=e.name.text,n=e.parent;return n&&(e.kind!=s.VARIABLEDECLARATION||n.kind!=s.VARIABLE||(n=n.parent))?n.kind==s.CLASSDECLARATION?be(n,t)+(e.is(i.CommonFlags.STATIC)?i.STATIC_DELIMITER:i.INSTANCE_DELIMITER)+r:n.kind==s.NAMESPACEDECLARATION||n.kind==s.ENUMDECLARATION?be(n,t)+i.STATIC_DELIMITER+r:t?r:e.range.source.internalPath+i.PATH_DELIMITER+r:r}function ke(e){return e.endsWith(".ts")&&(e=e.substring(0,e.length-3)),e}function Re(e,t){for(var r=0,n=e.length;r=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return s};Object.defineProperty(t,"__esModule",{value:!0});var s,o=r(0),c=r(2),p=r(7),l=r(4),u=r(3),h=function(){return function(){}}(),d=function(){return function(){}}(),_=function(){return function(){}}();function m(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 y,g,T=new Map,E=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.resolvedThisExpression=null,r.resolvedElementExpression=null,r.sources=[],r}return n(t,e),t.prototype.getSource=function(e){for(var t=this.sources,r=0,n=t.length;r",u+="<"+I+">")}else if(t){var v=t.get(u);if(v)return v}}return(_=this.typesLookup.get(h))||(_=this.typesLookup.get(u))?_:(r&&this.error(c.DiagnosticCode.Cannot_find_name_0,a.name.range,u),null)},t.prototype.resolveTypeArguments=function(e,t,r,n){void 0===r&&(r=null),void 0===n&&(n=null);var i=e.length,a=t?t.length:0;if(i!=a)return a?this.error(c.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.Range.join(t[0].range,t[a-1].range),i.toString(10),a.toString(10)):n&&this.error(c.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range.atEnd,i.toString(10),"0"),null;for(var s=new Array(i),o=0;o"),c=new R(this,K,G,O||d,t),this.instances.set(s,c),this.program.instancesLookup.set(K,c),c},t.prototype.resolvePartial=function(e){assert(this.is(o.CommonFlags.INSTANCE));var r=assert(this.classPrototype);if(!e||!e.length)return this;var n=this.simpleName,i=p.typesToString(e),a=new t(this.program,n,r.internalName+"<"+i+">"+o.INSTANCE_DELIMITER+n,this.declaration,r,this.decoratorFlags);return a.flags=this.flags,a.operatorKind=this.operatorKind,a.classTypeArguments=e,a},t.prototype.resolveUsingTypeArguments=function(e,t,r){var n=null;return!this.is(o.CommonFlags.GENERIC)||(assert(null!=e&&0!=e.length),n=this.program.resolveTypeArguments(assert(this.declaration.typeParameters),e,t,r))?this.resolve(n,t):null},t.prototype.resolveBuiltinTypeArguments=function(e,t){assert(this.is(o.CommonFlags.BUILTIN));var r=null;if(e){var n=e.length;r=new Array(n);for(var i=0;i=0),assert(null!=e.type),e.type.toNativeType()){case 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",F+="<"+E+">"),(f=new P(this,x,F,e,k)).contextualTypeArguments=t,this.instances.set(E,f),this.program.instancesLookup.set(F,f);var D=0;if(k&&(D=k.currentMemoryOffset,k.members)){f.members||(f.members=new Map);try{for(var w=i(k.members.values()),M=w.next();!M.done;M=w.next()){var G=M.value;f.members.set(G.simpleName,G)}}catch(e){u={error:e}}finally{try{M&&!M.done&&(h=w.return)&&h.call(w)}finally{if(u)throw u.error}}}if(this.constructorPrototype){var K=this.constructorPrototype.resolvePartial(e);K&&(f.constructorInstance=K.resolve())}if(this.instanceMembers)try{for(var z=i(this.instanceMembers.values()),V=z.next();!V.done;V=z.next()){var H=V.value;switch(H.kind){case y.FIELD_PROTOTYPE:f.members||(f.members=new Map);var X=H.declaration;if(!X.type)throw new Error("type expected");var W=this.program.resolveType(X.type,f.contextualTypeArguments);if(!W)break;var Y=new B(H,F+o.INSTANCE_DELIMITER+H.simpleName,W,X,f);switch(W.byteSize){case 1:break;case 2:1&D&&++D;break;case 4:3&D&&(D=1+(3|D));break;case 8:7&D&&(D=1+(7|D));break;default:assert(!1)}Y.memoryOffset=D,D+=W.byteSize,f.members.set(H.simpleName,Y);break;case y.FUNCTION_PROTOTYPE:f.members||(f.members=new Map);var Q=H.resolvePartial(e);Q&&(Q.internalName=F+o.INSTANCE_DELIMITER+Q.simpleName,f.members.set(H.simpleName,Q));break;case y.PROPERTY:f.members||(f.members=new Map);var q=assert(H.getterPrototype),j=H.setterPrototype,Z=new U(this.program,H.simpleName,F+o.INSTANCE_DELIMITER+H.simpleName,this),$=q.resolvePartial(e);if(!$)return null;if($.internalName=F+o.INSTANCE_DELIMITER+$.simpleName,Z.getterPrototype=$,j){var J=j.resolvePartial(e);if(!J)return null;J.internalName=F+o.INSTANCE_DELIMITER+J.simpleName,Z.setterPrototype=J}f.members.set(H.simpleName,Z);break;default:assert(!1)}}}catch(e){d={error:e}}finally{try{V&&!V.done&&(_=z.return)&&_.call(z)}finally{if(d)throw d.error}}try{for(var ee=i(this.overloadPrototypes),te=ee.next();!te.done;te=ee.next()){var re=a(te.value,2),ne=re[0],ie=re[1];assert(ne!=s.INVALID);var ae=void 0;if(ie.is(o.CommonFlags.INSTANCE)){var se=ie.resolvePartial(e);if(!se)continue;ae=se.resolve()}else ae=ie.resolve();if(ae){var oe=f.overloads;oe||(f.overloads=oe=new Map),oe.set(ne,ae)}}}catch(e){m={error:e}}finally{try{te&&!te.done&&(T=ee.return)&&T.call(ee)}finally{if(m)throw m.error}}return f.currentMemoryOffset=D,f},t.prototype.resolveUsingTypeArguments=function(e,t,r){var n=null;if(this.is(o.CommonFlags.GENERIC)){if(assert(null!=e&&0!=e.length),!(n=this.program.resolveTypeArguments(this.declaration.typeParameters,e,t,r)))return null}else assert(null==e||!e.length);return this.resolve(n,t)},t.prototype.toString=function(){return this.simpleName},t}(I);t.ClassPrototype=D;var P=function(e){function t(t,r,n,s,o){var c,p;void 0===s&&(s=null),void 0===o&&(o=null);var l=e.call(this,t.program,r,n)||this;if(l.kind=y.CLASS,l.contextualTypeArguments=null,l.currentMemoryOffset=0,l.constructorInstance=null,l.overloads=null,l.prototype=t,l.flags=t.flags,l.decoratorFlags=t.decoratorFlags,l.typeArguments=s,l.type=t.program.options.usizeType.asClass(l),l.base=o,o){var u=o.contextualTypeArguments;if(u){l.contextualTypeArguments||(l.contextualTypeArguments=new Map);try{for(var h=i(u),d=h.next();!d.done;d=h.next()){var _=a(d.value,2),m=_[0],g=_[1];l.contextualTypeArguments.set(m,g)}}catch(e){c={error:e}}finally{try{d&&!d.done&&(p=h.return)&&p.call(h)}finally{if(c)throw c.error}}}}var T,E,f=l.prototype.declaration;if(f){var I=f.typeParameters;if(s){if((E=s.length)!=I.length)throw new Error("type argument count mismatch");if(E)for(l.contextualTypeArguments||(l.contextualTypeArguments=new Map),T=0;T=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 K(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==y.FUNCTION);var _=d.signature.returnType;return!d.flow.is(2)||K(_,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 K(e,t){var r=e.byteSize,n=t.byteSize;return!e.is(4)||r>n||e.is(1)!=t.is(1)}t.Flow=G},function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);!function(e){e[e.I8=0]="I8",e[e.I16=1]="I16",e[e.I32=2]="I32",e[e.I64=3]="I64",e[e.ISIZE=4]="ISIZE",e[e.U8=5]="U8",e[e.U16=6]="U16",e[e.U32=7]="U32",e[e.U64=8]="U64",e[e.USIZE=9]="USIZE",e[e.BOOL=10]="BOOL",e[e.F32=11]="F32",e[e.F64=12]="F64",e[e.VOID=13]="VOID"}(t.TypeKind||(t.TypeKind={})),function(e){e[e.NONE=0]="NONE",e[e.SIGNED=1]="SIGNED",e[e.UNSIGNED=2]="UNSIGNED",e[e.INTEGER=4]="INTEGER",e[e.FLOAT=8]="FLOAT",e[e.POINTER=16]="POINTER",e[e.SHORT=32]="SHORT",e[e.LONG=64]="LONG",e[e.VALUE=128]="VALUE",e[e.REFERENCE=256]="REFERENCE",e[e.NULLABLE=512]="NULLABLE"}(t.TypeFlags||(t.TypeFlags={}));var i=function(){function e(e,t,r){this.cachedNullableType=null,this.kind=e,this.flags=t,this.size=r,this.byteSize=ceil(r/8),this.classReference=null,this.signatureReference=null,this.nonNullableType=this}return Object.defineProperty(e.prototype,"intType",{get:function(){switch(this.kind){case 0: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,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(2),o=r(4),c=r(1);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.posi;)if(c.isLineBreak(n.charCodeAt(this.tokenPos))){this.nextTokenOnNewLine=!0;break}this.pos=i,this.token=s,this.tokenPos=o}return this.nextToken},t.prototype.skipIdentifier=function(){return this.skip(i.IDENTIFIER,a.PREFER)},t.prototype.skipIdentifierName=function(){return this.skip(i.IDENTIFIER,a.ALWAYS)},t.prototype.skip=function(e,t){void 0===t&&(t=a.DEFAULT);var r=this.pos,n=this.token,s=this.tokenPos,o=i32.MAX_VALUE;switch(e){case i.GREATERTHAN:o=1}return this.token=this.unsafeNext(t,o),this.token==e?(this.nextToken=-1,!0):(this.pos=r,this.token=n,this.tokenPos=s,!1)},t.prototype.mark=function(){var e;return _?(e=_,_=null):e=new d,e.pos=this.pos,e.token=this.token,e.tokenPos=this.tokenPos,e},t.prototype.discard=function(e){_=e},t.prototype.reset=function(e){this.pos=e.pos,this.token=e.token,this.tokenPos=e.tokenPos,this.nextToken=-1},t.prototype.range=function(e,t){return void 0===e&&(e=-1),void 0===t&&(t=-1),e<0?(e=this.tokenPos,t=this.pos):t<0&&(t=e),new u(this.source,e,t)},t.prototype.readIdentifier=function(){for(var e=this.source.text,t=this.pos;++this.pos=this.end){n+=e.substring(r,this.pos),this.error(s.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.end));break}var i=e.charCodeAt(this.pos);if(i==t){n+=e.substring(r,this.pos++);break}if(92!=i){if(c.isLineBreak(i)){n+=e.substring(r,this.pos),this.error(s.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.pos));break}++this.pos}else n+=e.substring(r,this.pos),n+=this.readEscapeSequence(),r=this.pos}return n},t.prototype.readEscapeSequence=function(){if(++this.pos>=this.end)return this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(this.end)),"";var e=this.source.text,t=e.charCodeAt(this.pos++);switch(t){case 48:return"\0";case 98:return"\b";case 116:return"\t";case 110:return"\n";case 118:return"\v";case 102:return"\f";case 114:return"\r";case 39:return"'";case 34:return'"';case 117:return this.pos=this.end){this.error(s.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.end));break}if(92!=e.charCodeAt(this.pos)){var n=e.charCodeAt(this.pos);if(47==n&&!r)break;if(c.isLineBreak(n)){this.error(s.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.pos));break}++this.pos,r=!1}else++this.pos,r=!0}return e.substring(t,this.pos)},t.prototype.readRegexpFlags=function(){for(var e=this.source.text,t=this.pos,r=0;this.pos57)&&95!=r)break;t++}return!0},t.prototype.readInteger=function(){var e=this.source.text;if(48==e.charCodeAt(this.pos)&&this.pos+2=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else if(o>=65&&o<=70)r=i64_add(i64_mul(r,n),i64_new(10+o-65,0));else if(o>=97&&o<=102)r=i64_add(i64_mul(r,n),i64_new(10+o-97,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readDecimalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(10,0),i=t;this.pos=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readOctalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(8,0),i=t;this.pos=48&&o<=55)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}++this.pos}return this.pos==t?this.error(s.DiagnosticCode.Octal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readBinaryInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(2,0),i=i64_new(1,0),a=t;this.pos=48&&n<=57)t=16*t+n-48;else if(n>=65&&n<=70)t=16*t+10+n-65;else{if(!(n>=97&&n<=102))return this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(this.pos-1,this.pos)),"";t=16*t+10+n-97}if(0==--e)break}return e?(this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(this.pos)),""):String.fromCharCode(t)},t.prototype.readExtendedUnicodeEscape=function(){var e=this.pos,t=this.readHexInteger(),r=i64_low(t),n=!1;assert(!i64_high(t)),r>1114111&&(this.error(s.DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,this.range(e,this.pos)),n=!0);var i=this.source.text;return this.pos>=this.end?(this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(e,this.end)),n=!0):125==i.charCodeAt(this.pos)?++this.pos:(this.error(s.DiagnosticCode.Unterminated_Unicode_escape_sequence,this.range(e,this.pos)),n=!0),n?"":r<65536?String.fromCharCode(r):String.fromCharCode(55296+((r-65536)/1024|0),(r-65536)%1024+56320)},t.prototype.finish=function(){},t}(s.DiagnosticEmitter);t.Tokenizer=h;var d=function(){return function(){}}();t.State=d;var _=null},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Operation_not_supported=100]="Operation_not_supported",e[e.Operation_is_unsafe=101]="Operation_is_unsafe",e[e.Conversion_from_type_0_to_1_requires_an_explicit_cast=200]="Conversion_from_type_0_to_1_requires_an_explicit_cast",e[e.Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit=201]="Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit",e[e.Type_0_cannot_be_changed_to_type_1=202]="Type_0_cannot_be_changed_to_type_1",e[e.Type_0_cannot_be_reinterpreted_as_type_1=203]="Type_0_cannot_be_reinterpreted_as_type_1",e[e.Basic_type_0_cannot_be_nullable=204]="Basic_type_0_cannot_be_nullable",e[e.Cannot_export_a_mutable_global=205]="Cannot_export_a_mutable_global",e[e.Compiling_constant_with_non_constant_initializer_as_mutable=206]="Compiling_constant_with_non_constant_initializer_as_mutable",e[e.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa=207]="Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa",e[e.Unmanaged_classes_cannot_implement_interfaces=208]="Unmanaged_classes_cannot_implement_interfaces",e[e.Invalid_regular_expression_flags=209]="Invalid_regular_expression_flags",e[e.Implementation_0_must_match_the_signature_1=210]="Implementation_0_must_match_the_signature_1",e[e.Class_0_is_sealed_and_cannot_be_extended=211]="Class_0_is_sealed_and_cannot_be_extended",e[e.Decorator_0_is_not_valid_here=212]="Decorator_0_is_not_valid_here",e[e.Duplicate_decorator=213]="Duplicate_decorator",e[e.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf=214]="An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf",e[e.Optional_parameter_must_have_an_initializer=215]="Optional_parameter_must_have_an_initializer",e[e.Unterminated_string_literal=1002]="Unterminated_string_literal",e[e.Identifier_expected=1003]="Identifier_expected",e[e._0_expected=1005]="_0_expected",e[e.A_file_cannot_have_a_reference_to_itself=1006]="A_file_cannot_have_a_reference_to_itself",e[e.Trailing_comma_not_allowed=1009]="Trailing_comma_not_allowed",e[e.Unexpected_token=1012]="Unexpected_token",e[e.A_rest_parameter_must_be_last_in_a_parameter_list=1014]="A_rest_parameter_must_be_last_in_a_parameter_list",e[e.Parameter_cannot_have_question_mark_and_initializer=1015]="Parameter_cannot_have_question_mark_and_initializer",e[e.A_required_parameter_cannot_follow_an_optional_parameter=1016]="A_required_parameter_cannot_follow_an_optional_parameter",e[e.Enum_member_must_have_initializer=1061]="Enum_member_must_have_initializer",e[e.Statements_are_not_allowed_in_ambient_contexts=1036]="Statements_are_not_allowed_in_ambient_contexts",e[e.Initializers_are_not_allowed_in_ambient_contexts=1039]="Initializers_are_not_allowed_in_ambient_contexts",e[e._0_modifier_cannot_be_used_here=1042]="_0_modifier_cannot_be_used_here",e[e.A_rest_parameter_cannot_be_optional=1047]="A_rest_parameter_cannot_be_optional",e[e.A_rest_parameter_cannot_have_an_initializer=1048]="A_rest_parameter_cannot_have_an_initializer",e[e.A_set_accessor_must_have_exactly_one_parameter=1049]="A_set_accessor_must_have_exactly_one_parameter",e[e.A_set_accessor_parameter_cannot_have_an_initializer=1052]="A_set_accessor_parameter_cannot_have_an_initializer",e[e.A_get_accessor_cannot_have_parameters=1054]="A_get_accessor_cannot_have_parameters",e[e.Type_parameters_cannot_appear_on_a_constructor_declaration=1092]="Type_parameters_cannot_appear_on_a_constructor_declaration",e[e.Type_annotation_cannot_appear_on_a_constructor_declaration=1093]="Type_annotation_cannot_appear_on_a_constructor_declaration",e[e.An_accessor_cannot_have_type_parameters=1094]="An_accessor_cannot_have_type_parameters",e[e.A_set_accessor_cannot_have_a_return_type_annotation=1095]="A_set_accessor_cannot_have_a_return_type_annotation",e[e.Type_parameter_list_cannot_be_empty=1098]="Type_parameter_list_cannot_be_empty",e[e.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement=1104]="A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement",e[e.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement=1105]="A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement",e[e.A_return_statement_can_only_be_used_within_a_function_body=1108]="A_return_statement_can_only_be_used_within_a_function_body",e[e.Expression_expected=1109]="Expression_expected",e[e.Type_expected=1110]="Type_expected",e[e.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement=1113]="A_default_clause_cannot_appear_more_than_once_in_a_switch_statement",e[e.Duplicate_label_0=1114]="Duplicate_label_0",e[e.Octal_literals_are_not_allowed_in_strict_mode=1121]="Octal_literals_are_not_allowed_in_strict_mode",e[e.Digit_expected=1124]="Digit_expected",e[e.Hexadecimal_digit_expected=1125]="Hexadecimal_digit_expected",e[e.Unexpected_end_of_text=1126]="Unexpected_end_of_text",e[e.Invalid_character=1127]="Invalid_character",e[e._case_or_default_expected=1130]="_case_or_default_expected",e[e.A_declare_modifier_cannot_be_used_in_an_already_ambient_context=1038]="A_declare_modifier_cannot_be_used_in_an_already_ambient_context",e[e.Type_argument_expected=1140]="Type_argument_expected",e[e.String_literal_expected=1141]="String_literal_expected",e[e.Line_break_not_permitted_here=1142]="Line_break_not_permitted_here",e[e.Declaration_expected=1146]="Declaration_expected",e[e._const_declarations_must_be_initialized=1155]="_const_declarations_must_be_initialized",e[e.Unterminated_regular_expression_literal=1161]="Unterminated_regular_expression_literal",e[e.Interface_declaration_cannot_have_implements_clause=1176]="Interface_declaration_cannot_have_implements_clause",e[e.Binary_digit_expected=1177]="Binary_digit_expected",e[e.Octal_digit_expected=1178]="Octal_digit_expected",e[e.An_implementation_cannot_be_declared_in_ambient_contexts=1183]="An_implementation_cannot_be_declared_in_ambient_contexts",e[e.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive=1198]="An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive",e[e.Unterminated_Unicode_escape_sequence=1199]="Unterminated_Unicode_escape_sequence",e[e.Decorators_are_not_valid_here=1206]="Decorators_are_not_valid_here",e[e._abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration=1242]="_abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration",e[e.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract=1245]="Method_0_cannot_have_an_implementation_because_it_is_marked_abstract",e[e.A_class_may_only_extend_another_class=1311]="A_class_may_only_extend_another_class",e[e.A_parameter_property_cannot_be_declared_using_a_rest_parameter=1317]="A_parameter_property_cannot_be_declared_using_a_rest_parameter",e[e.Duplicate_identifier_0=2300]="Duplicate_identifier_0",e[e.Cannot_find_name_0=2304]="Cannot_find_name_0",e[e.Module_0_has_no_exported_member_1=2305]="Module_0_has_no_exported_member_1",e[e.Generic_type_0_requires_1_type_argument_s=2314]="Generic_type_0_requires_1_type_argument_s",e[e.Type_0_is_not_generic=2315]="Type_0_is_not_generic",e[e.Type_0_is_not_assignable_to_type_1=2322]="Type_0_is_not_assignable_to_type_1",e[e.Index_signature_is_missing_in_type_0=2329]="Index_signature_is_missing_in_type_0",e[e._this_cannot_be_referenced_in_current_location=2332]="_this_cannot_be_referenced_in_current_location",e[e._super_can_only_be_referenced_in_a_derived_class=2335]="_super_can_only_be_referenced_in_a_derived_class",e[e.Property_0_does_not_exist_on_type_1=2339]="Property_0_does_not_exist_on_type_1",e[e.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures=2349]="Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures",e[e.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature=2351]="Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature",e[e.A_function_whose_declared_type_is_not_void_must_return_a_value=2355]="A_function_whose_declared_type_is_not_void_must_return_a_value",e[e.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access=2357]="The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access",e[e.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access=2364]="The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access",e[e.Operator_0_cannot_be_applied_to_types_1_and_2=2365]="Operator_0_cannot_be_applied_to_types_1_and_2",e[e._get_and_set_accessor_must_have_the_same_type=2380]="_get_and_set_accessor_must_have_the_same_type",e[e.Constructor_implementation_is_missing=2390]="Constructor_implementation_is_missing",e[e.Function_implementation_is_missing_or_not_immediately_following_the_declaration=2391]="Function_implementation_is_missing_or_not_immediately_following_the_declaration",e[e.Multiple_constructor_implementations_are_not_allowed=2392]="Multiple_constructor_implementations_are_not_allowed",e[e.Duplicate_function_implementation=2393]="Duplicate_function_implementation",e[e.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local=2395]="Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local",e[e.Type_0_has_no_property_1=2460]="Type_0_has_no_property_1",e[e.The_0_operator_cannot_be_applied_to_type_1=2469]="The_0_operator_cannot_be_applied_to_type_1",e[e.Export_declaration_conflicts_with_exported_declaration_of_0=2484]="Export_declaration_conflicts_with_exported_declaration_of_0",e[e.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property=2540]="Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property",e[e.The_target_of_an_assignment_must_be_a_variable_or_a_property_access=2541]="The_target_of_an_assignment_must_be_a_variable_or_a_property_access",e[e.Index_signature_in_type_0_only_permits_reading=2542]="Index_signature_in_type_0_only_permits_reading",e[e.Expected_0_arguments_but_got_1=2554]="Expected_0_arguments_but_got_1",e[e.Expected_at_least_0_arguments_but_got_1=2555]="Expected_at_least_0_arguments_but_got_1",e[e.Expected_0_type_arguments_but_got_1=2558]="Expected_0_type_arguments_but_got_1",e[e.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums=2651]="A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums",e[e.Namespace_0_has_no_exported_member_1=2694]="Namespace_0_has_no_exported_member_1",e[e.File_0_not_found=6054]="File_0_not_found",e[e.Numeric_separators_are_not_allowed_here=6188]="Numeric_separators_are_not_allowed_here",e[e.Multiple_consecutive_numeric_separators_are_not_permitted=6189]="Multiple_consecutive_numeric_separators_are_not_permitted"}(t.DiagnosticCode||(t.DiagnosticCode={})),t.diagnosticCodeToString=function(e){switch(e){case 100:return"Operation not supported.";case 101:return"Operation is unsafe.";case 200:return"Conversion from type '{0}' to '{1}' requires an explicit cast.";case 201:return"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.";case 202:return"Type '{0}' cannot be changed to type '{1}'.";case 203:return"Type '{0}' cannot be reinterpreted as type '{1}'.";case 204:return"Basic type '{0}' cannot be nullable.";case 205:return"Cannot export a mutable global.";case 206:return"Compiling constant with non-constant initializer as mutable.";case 207:return"Unmanaged classes cannot extend managed classes and vice-versa.";case 208:return"Unmanaged classes cannot implement interfaces.";case 209:return"Invalid regular expression flags.";case 210:return"Implementation '{0}' must match the signature '{1}'.";case 211:return"Class '{0}' is sealed and cannot be extended.";case 212:return"Decorator '{0}' is not valid here.";case 213:return"Duplicate decorator.";case 214:return"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.";case 215:return"Optional parameter must have an initializer.";case 1002:return"Unterminated string literal.";case 1003:return"Identifier expected.";case 1005:return"'{0}' expected.";case 1006:return"A file cannot have a reference to itself.";case 1009:return"Trailing comma not allowed.";case 1012:return"Unexpected token.";case 1014:return"A rest parameter must be last in a parameter list.";case 1015:return"Parameter cannot have question mark and initializer.";case 1016:return"A required parameter cannot follow an optional parameter.";case 1061:return"Enum member must have initializer.";case 1036:return"Statements are not allowed in ambient contexts.";case 1039:return"Initializers are not allowed in ambient contexts.";case 1042:return"'{0}' modifier cannot be used here.";case 1047:return"A rest parameter cannot be optional.";case 1048:return"A rest parameter cannot have an initializer.";case 1049:return"A 'set' accessor must have exactly one parameter.";case 1052:return"A 'set' accessor parameter cannot have an initializer.";case 1054:return"A 'get' accessor cannot have parameters.";case 1092:return"Type parameters cannot appear on a constructor declaration.";case 1093:return"Type annotation cannot appear on a constructor declaration.";case 1094:return"An accessor cannot have type parameters.";case 1095:return"A 'set' accessor cannot have a return type annotation.";case 1098:return"Type parameter list cannot be empty.";case 1104:return"A 'continue' statement can only be used within an enclosing iteration statement.";case 1105:return"A 'break' statement can only be used within an enclosing iteration or switch statement.";case 1108:return"A 'return' statement can only be used within a function body.";case 1109:return"Expression expected.";case 1110:return"Type expected.";case 1113:return"A 'default' clause cannot appear more than once in a 'switch' statement.";case 1114:return"Duplicate label '{0}'.";case 1121:return"Octal literals are not allowed in strict mode.";case 1124:return"Digit expected.";case 1125:return"Hexadecimal digit expected.";case 1126:return"Unexpected end of text.";case 1127:return"Invalid character.";case 1130:return"'case' or 'default' expected.";case 1038:return"A 'declare' modifier cannot be used in an already ambient context.";case 1140:return"Type argument expected.";case 1141:return"String literal expected.";case 1142:return"Line break not permitted here.";case 1146:return"Declaration expected.";case 1155:return"'const' declarations must be initialized.";case 1161:return"Unterminated regular expression literal.";case 1176:return"Interface declaration cannot have 'implements' clause.";case 1177:return"Binary digit expected.";case 1178:return"Octal digit expected.";case 1183:return"An implementation cannot be declared in ambient contexts.";case 1198:return"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.";case 1199:return"Unterminated Unicode escape sequence.";case 1206:return"Decorators are not valid here.";case 1242:return"'abstract' modifier can only appear on a class, method, or property declaration.";case 1245:return"Method '{0}' cannot have an implementation because it is marked abstract.";case 1311:return"A class may only extend another class.";case 1317:return"A parameter property cannot be declared using a rest parameter.";case 2300:return"Duplicate identifier '{0}'.";case 2304:return"Cannot find name '{0}'.";case 2305:return"Module '{0}' has no exported member '{1}'.";case 2314:return"Generic type '{0}' requires {1} type argument(s).";case 2315:return"Type '{0}' is not generic.";case 2322:return"Type '{0}' is not assignable to type '{1}'.";case 2329:return"Index signature is missing in type '{0}'.";case 2332:return"'this' cannot be referenced in current location.";case 2335:return"'super' can only be referenced in a derived class.";case 2339:return"Property '{0}' does not exist on type '{1}'.";case 2349:return"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.";case 2351:return"Cannot use 'new' with an expression whose type lacks a construct signature.";case 2355:return"A function whose declared type is not 'void' must return a value.";case 2357:return"The operand of an increment or decrement operator must be a variable or a property access.";case 2364:return"The left-hand side of an assignment expression must be a variable or a property access.";case 2365:return"Operator '{0}' cannot be applied to types '{1}' and '{2}'.";case 2380:return"'get' and 'set' accessor must have the same type.";case 2390:return"Constructor implementation is missing.";case 2391:return"Function implementation is missing or not immediately following the declaration.";case 2392:return"Multiple constructor implementations are not allowed.";case 2393:return"Duplicate function implementation.";case 2395:return"Individual declarations in merged declaration '{0}' must be all exported or all local.";case 2460:return"Type '{0}' has no property '{1}'.";case 2469:return"The '{0}' operator cannot be applied to type '{1}'.";case 2484:return"Export declaration conflicts with exported declaration of '{0}'.";case 2540:return"Cannot assign to '{0}' because it is a constant or a read-only property.";case 2541:return"The target of an assignment must be a variable or a property access.";case 2542:return"Index signature in type '{0}' only permits reading.";case 2554:return"Expected {0} arguments, but got {1}.";case 2555:return"Expected at least {0} arguments, but got {1}.";case 2558:return"Expected {0} type arguments, but got {1}.";case 2651:return"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.";case 2694:return"Namespace '{0}' has no exported member '{1}'.";case 6054:return"File '{0}' not found.";case 6188:return"Numeric separators are not allowed here.";case 6189:return"Multiple consecutive numeric separators are not permitted.";default:return""}}},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}};Object.defineProperty(t,"__esModule",{value:!0});var a,s=r(22),o=r(2),c=r(3),p=r(0),l=r(5),u=r(8),h=r(4),d=r(7),_=r(1);!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,T=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.currentOuterFunction=null,n.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,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,E(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,E(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=e.resolveUsingTypeArguments(t,r,i);return a?(a.outerScope=n,this.compileFunction(a)?a:null):null},t.prototype.ensureFunctionType=function(e,t,r){void 0===r&&(r=null);var n,i=e?e.length:0,a=0;if(r?((n=new Array(1+i))[0]=r.toNativeType(),a=1):n=new Array(i),e)for(var s=0;s=0)return e.functionTableIndex;var t=this.functionTable,r=t.length;return!e.is(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,T=!0,E=!0,f=!0;for(_=0;_=0&&(g&&s.set(1),T&&s.set(2),E&&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}g=this.currentType}var E=!1;if(m.is(p.CommonFlags.CONST))if(T)if(T=this.precomputeExpressionRef(T),c.getExpressionId(T)==c.ExpressionId.Const){var f=new l.Local(r,y,-1,g);switch(c.getExpressionType(T)){case c.NativeType.I32:f=f.withConstantIntegerValue(i64_new(c.getConstValueI32(T),0));break;case c.NativeType.I64:f=f.withConstantIntegerValue(i64_new(c.getConstValueI64Low(T),c.getConstValueI64High(T)));break;case c.NativeType.F32:f=f.withConstantFloatValue(c.getConstValueF32(T));break;case c.NativeType.F64:f=f.withConstantFloatValue(c.getConstValueF64(T));break;default:return assert(!1),this.module.createUnreachable()}var I=n.flow.scopedLocals;if(I){if(I.has(y))return this.error(o.DiagnosticCode.Duplicate_identifier_0,m.name.range,y),this.module.createUnreachable()}else n.flow.scopedLocals=I=new Map;I.set(y,f),E=!0}else this.warning(o.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,m.range);else this.error(o.DiagnosticCode._const_declarations_must_be_initialized,m.range);if(!E){f=void 0;f=m.isAny(p.CommonFlags.LET|p.CommonFlags.CONST)||_.is(2048)?_.addScopedLocal(g,y,!1,m):n.addLocal(g,y,m),T?(u.push(this.compileAssignmentWithValue(m.name,T)),f.type.is(36)&&_.setLocalWrapped(f.index,!_.canOverflow(T,g))):f.type.is(36)&&_.setLocalWrapped(f.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:assert(!1),i=this.module.createUnreachable()}var a=this.currentType;return 0!=r&&a!=t?(i=this.convertExpression(i,a,t,r,n,e),this.currentType=t):1==n&&(i=this.ensureSmallIntegerWrap(i,a)),this.options.sourceMap&&this.addDebugLocation(i,e.range),i},t.prototype.compileExpressionRetainType=function(e,t,r){return this.compileExpression(e,t==d.Type.void?d.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r,n){return this.precomputeExpressionRef(this.compileExpression(e,t,r,n))},t.prototype.precomputeExpressionRef=function(e){var t=this.module,r=this.currentType.toNativeType(),n=t.addTemporaryFunction(r,null,e);t.runPasses(["precompute"],n);var i=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 T=void 0;if(11==this.currentType.kind){if(i=this.compileExpression(m,d.Type.f32,1,0),a=this.currentType,!(T=this.f32PowInstance)){if(!(E=this.program.elementsLookup.get("Mathf"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),p=h.createUnreachable();break}if(!(f=E.members?E.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=T=f.resolve()}}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,!(T=this.f64PowInstance)){if(!(E=this.program.elementsLookup.get("Math"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),p=h.createUnreachable();break}if(!(f=E.members?E.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=T=f.resolve()}p=T&&this.compileFunction(T)?this.makeCallDirect(T,[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(!(T=this.f32ModInstance)){if(!(E=this.program.elementsLookup.get("Mathf"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),p=h.createUnreachable();break}if(!(f=E.members?E.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=T=f.resolve()}p=T&&this.compileFunction(T)?this.makeCallDirect(T,[r,i]):h.createUnreachable();break;case 12:if(!(T=this.f64ModInstance)){var E,f;if(!(E=this.program.elementsLookup.get("Math"))){this.error(o.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),p=h.createUnreachable();break}if(!(f=E.members?E.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=T=f.resolve()}p=T&&this.compileFunction(T)?this.makeCallDirect(T,[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,N=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));p=h.createIf(this.makeIsTrueish(h.createTeeLocal(N.index,r),this.currentType),i,h.createGetLocal(assert(N).index,this.currentType.toNativeType()))}break;case u.Token.BAR_BAR:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,i=this.compileExpression(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,N=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));p=h.createIf(this.makeIsTrueish(h.createTeeLocal(N.index,r),this.currentType),h.createGetLocal(assert(N).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,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=c.resolve();if(!p)return this.module.createUnreachable();assert(1==p.signature.parameterTypes.length),n=p.signature.parameterTypes[0];break}return this.error(o.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,s.internalName),this.module.createUnreachable();case l.ElementKind.CLASS:if(i.resolvedElementExpression){var u=a.flow.is(4096),h=s.lookupOverload(l.OperatorKind.INDEXED_SET,u);if(!h)return s.lookupOverload(l.OperatorKind.INDEXED_GET,u)?this.error(o.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,s.internalName):this.error(o.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,s.internalName),this.module.createUnreachable();assert(2==h.signature.parameterTypes.length),n=h.signature.parameterTypes[1];break}default:return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}assert(n!=d.Type.void);var _=this.compileExpression(t,n,1,0);return this.compileAssignmentWithValue(e,_,r!=d.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.program.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.program.resolvedThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0);a=i.type;this.currentType=r?a:d.Type.void;c=a.toNativeType();if(10==a.kind&&(t=this.ensureSmallIntegerWrap(t,a)),r){s=(L=this.currentFunction).flow;var y=L.getAndFreeTempLocal(a,!s.canOverflow(t,a)).index;return n.createBlock(null,[n.createSetLocal(y,t),n.createStore(a.byteSize,m,n.createGetLocal(y,c),c,i.memoryOffset),n.createGetLocal(y,c)],c)}return n.createStore(a.byteSize,m,t,c,i.memoryOffset);case l.ElementKind.PROPERTY:var g=i.setterPrototype;if(g){var T=g.resolve();if(!T)return n.createUnreachable();if(!r){if(T.is(p.CommonFlags.INSTANCE)){_=assert(this.program.resolvedThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0);return this.makeCallDirect(T,[m,t])}return this.makeCallDirect(T,[t])}var E=i.getterPrototype;assert(null!=E);var f=E.resolve();if(!f)return n.createUnreachable();var I=(R=f.signature.returnType).toNativeType();if(T.is(p.CommonFlags.INSTANCE)){_=assert(this.program.resolvedThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0),y=this.currentFunction.getAndFreeTempLocal(R,!1).index;return n.createBlock(null,[this.makeCallDirect(T,[n.createTeeLocal(y,m),t]),this.makeCallDirect(f,[n.createGetLocal(y,I)])],I)}return n.createBlock(null,[this.makeCallDirect(T,[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.program.resolvedElementExpression;if(v){var A=this.currentFunction.flow.is(4096),N=i.lookupOverload(l.OperatorKind.INDEXED_GET,A);if(!N)return this.error(o.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.internalName),n.createUnreachable();var C=i.lookupOverload(l.OperatorKind.INDEXED_SET,A);if(!C)return this.error(o.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.internalName),this.currentType=r?N.signature.returnType:d.Type.void,n.createUnreachable();var S=i.type,O=(_=assert(this.program.resolvedThisExpression),m=this.compileExpressionRetainType(_,this.options.usizeType,0),this.compileExpression(v,d.Type.i32,1,0));if(r){var L,b=(L=this.currentFunction).getTempLocal(S,!1),k=L.getAndFreeTempLocal(this.currentType,!1),R=N.signature.returnType;return this.currentFunction.freeTempLocal(b),n.createBlock(null,[this.makeCallDirect(C,[n.createTeeLocal(b.index,m),n.createTeeLocal(k.index,O),t]),this.makeCallDirect(N,[n.createGetLocal(b.index,b.type.toNativeType()),n.createGetLocal(k.index,k.type.toNativeType())])],R.toNativeType())}return this.makeCallDirect(C,[m,O,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.program.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=u.resolveUsingTypeArguments(_,this.currentFunction.flow.contextualTypeArguments,e)}else{if(u.is(p.CommonFlags.GENERIC)){for(var y=new Map,g=assert(u.declaration.typeParameters),T=g.length,E=0;Es&&!i)||(this.error(o.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,s.toString(),t.toString()),!1)},t.prototype.compileCallDirect=function(e,t,r,n,i){void 0===n&&(n=0),void 0===i&&(i=!1);var a=t.length,s=e.signature;if(!this.checkCallSignature(s,a,0!=n,r))return this.module.createUnreachable();if(i)return assert(!e.is(p.CommonFlags.TRAMPOLINE)),this.compileCallInlineUnchecked(e,t,r,n);var o=n?a+1:a,c=new Array(o),l=0;n&&(c[0]=n,l=1);for(var u=s.parameterTypes,h=0;h=i);var o=this.module;if(!this.compileFunction(e))return o.createUnreachable();var c=e.signature.returnType,l=e.is(p.CommonFlags.MODULE_IMPORT);if(r=a),this.ensureFunctionType(e.parameterTypes,e.returnType,e.thisType);var c=this.module;if(n=0),this.currentType=E,this.module.createGetLocal(f,E.toNativeType());case l.ElementKind.GLOBAL:if(!this.compileGlobal(T))return this.module.createUnreachable();var I=T.type;return assert(I!=d.Type.void),T.is(p.CommonFlags.INLINED)?this.compileInlineConstant(T,t,r):(this.currentType=I,this.module.createGetGlobal(T.internalName,I.toNativeType()));case l.ElementKind.ENUMVALUE:return T.is(p.CommonFlags.COMPILED)?(this.currentType=d.Type.i32,T.is(p.CommonFlags.INLINED)?this.module.createI32(T.constantValue):this.module.createGetGlobal(T.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=T.resolve(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.program.resolveType(e.isType);return this.currentType=d.Type.bool,a?i.is(512)&&!a.is(512)?i.nonNullableType.isAssignableTo(a)?r.createBinary(i.is(64)?c.BinaryOp.NeI64:c.BinaryOp.NeI32,n,i.toNativeZero(r)):r.createI32(0):r.createI32(i.isAssignableTo(a,!0)?1:0):r.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){void 0===r&&(r=!1);var n=this.module;switch(e.literalKind){case h.LiteralKind.ARRAY:assert(!r);var i=t.classReference;return i&&i.prototype==this.program.arrayPrototype?this.compileArrayLiteral(assert(i.typeArguments)[0],e.elementExpressions,e):(this.error(o.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable());case h.LiteralKind.FLOAT:var a=e.value;return r&&(a=-a),t==d.Type.f32?n.createF32(a):(this.currentType=d.Type.f64,n.createF64(a));case h.LiteralKind.INTEGER:var s=e.value;switch(r&&(s=i64_sub(i64_new(0),s)),t.kind){case 0:if(i64_is_i8(s))return n.createI32(i64_low(s));break;case 5:if(i64_is_u8(s))return n.createI32(i64_low(s));break;case 1:if(i64_is_i16(s))return n.createI32(i64_low(s));break;case 6:if(i64_is_u16(s))return n.createI32(i64_low(s));break;case 2:if(i64_is_i32(s))return n.createI32(i64_low(s));break;case 7:if(i64_is_u32(s))return n.createI32(i64_low(s));break;case 10:if(i64_is_bool(s))return n.createI32(i64_low(s));break;case 4:if(!this.options.isWasm64){if(i64_is_i32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 9:if(!this.options.isWasm64){if(i64_is_u32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 3:case 8:return n.createI64(i64_low(s),i64_high(s));case 11:if(i64_is_f32(s))return n.createF32(i64_to_f32(s));break;case 12:if(i64_is_f64(s))return n.createF64(i64_to_f64(s));break;case 13:break;default:return assert(!1),n.createUnreachable()}return i64_is_i32(s)?(this.currentType=d.Type.i32,n.createI32(i64_low(s))):i64_is_u32(s)?(this.currentType=d.Type.u32,n.createI32(i64_low(s))):(this.currentType=d.Type.i64,n.createI64(i64_low(s),i64_high(s)));case h.LiteralKind.STRING:return assert(!r),this.compileStaticString(e.value)}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,n.createUnreachable()},t.prototype.compileStaticString=function(e){var t=this.module,r=this.options,n=this.stringSegments,i=n.get(e);if(!i){var a=e.length,s=new Uint8Array(4+2*a);s[0]=255&a,s[1]=a>>>8&255,s[2]=a>>>16&255,s[3]=a>>>24&255;for(var o=0;o>>8&255;i=this.addMemorySegment(s,r.usizeType.byteSize),n.set(e,i)}var c=i.offset,p=this.program.typesLookup.get("string");return this.currentType=p||r.usizeType,r.isWasm64?t.createI64(i64_low(c),i64_high(c)):(assert(i64_is_i32(c)),t.createI32(i64_low(c)))},t.prototype.compileArrayLiteral=function(e,t,r){var n=!0,i=this.module,a=assert(this.program.arrayPrototype);if(!a||a.kind!=l.ElementKind.CLASS_PROTOTYPE)return i.createUnreachable();var s=a.resolve([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,T=0;T=0);var _=this.compileExpressionRetainType(h,this.options.usizeType,0);return this.currentType=a.type,i.createLoad(a.type.byteSize,a.type.is(5),_,a.type.toNativeType(),a.memoryOffset);case l.ElementKind.PROPERTY:var m=a.getterPrototype;if(m){var y=m.resolve(null);if(!y)return i.createUnreachable();var g=y.signature;if(!this.checkCallSignature(g,0,y.is(p.CommonFlags.INSTANCE),e))return i.createUnreachable();var T=0!=(y.decoratorFlags&l.DecoratorFlags.INLINE);if(y.is(p.CommonFlags.INSTANCE)){u=assert(y.parent);assert(u.kind==l.ElementKind.CLASS);h=assert(n.resolvedThisExpression),_=this.compileExpressionRetainType(h,this.options.usizeType,0);return this.currentType=g.returnType,this.compileCallDirect(y,[],e,_,T)}return this.currentType=g.returnType,this.compileCallDirect(y,[],e,0,T)}return this.error(o.DiagnosticCode.Property_0_does_not_exist_on_type_1,e.range,a.simpleName,a.parent.toString()),i.createUnreachable()}return this.error(o.DiagnosticCode.Operation_not_supported,e.range),i.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 T=d.Type.commonCompatible(_,g,!1);return T?(h=this.convertExpression(h,_,T,1,0,r),y=this.convertExpression(y,g,T,1,0,n),this.currentType=T,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,T=g.toNativeType(),E=y.prototype.declaration;if(assert(!y.isAny(p.CommonFlags.CONST)),E.initializer)h.push(a.createStore(g.byteSize,a.createGetLocal(u.index,c),this.compileExpression(E.initializer,g,1,0),T,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,T):g.toNativeZero(a),T,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 E(e,t){switch(void 0===t&&(t=e.simpleName),e.kind){case l.ElementKind.FUNCTION:return(r=e.parent||e.prototype.parent)?E(r)+(e.is(p.CommonFlags.INSTANCE)?p.INSTANCE_DELIMITER:p.STATIC_DELIMITER)+t:t;case l.ElementKind.FIELD:case l.ElementKind.ENUMVALUE:return E(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)?E(r)+p.STATIC_DELIMITER+t:t;default:var r;return(r=e.parent)?E(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=T},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var i=r(0),a=r(5),s=r(8),o=r(2),c=r(1),p=r(4),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,1)))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,1))?null:p.Node.createEnumValueDeclaration(r,n,t,s.Range.join(r.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=s.Token.SEMICOLON&&e.nextToken!=s.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=p.Node.createReturnStatement(t,e.range());return e.skip(s.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){for(var t=new Array;!e.skip(s.Token.GREATERTHAN);){var r=this.parseTypeParameter(e);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.GREATERTHAN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),">"),null}}return 0===t.length&&this.error(o.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range()),t},t.prototype.parseTypeParameter=function(e){if(e.next()==s.Token.IDENTIFIER){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(s.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return p.Node.createTypeParameter(t,r,s.Range.join(t.range,e.range()))}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e,t){void 0===t&&(t=!1);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,1))))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.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(),T=!1,E=!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,E=!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)&&(T=!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"))),!T&&!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var A=T?p.Node.createConstructorExpression(e.range()):p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),N=null;if(e.skip(s.Token.LESSTHAN)){var C=e.tokenPos;if(!(N=this.parseTypeParameters(e)))return null;T?this.error(o.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range(C,e.pos)):E||f?this.error(o.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(C,e.pos)):l|=i.CommonFlags.GENERIC}if(e.skip(s.Token.OPENPAREN)){var S=e.tokenPos,O=this.parseParameters(e,T);if(!O)return null;var L=this.parseParametersThis;if(T)for(var b=0,k=O.length;b"),null):null;case s.Token.IDENTIFIER:return p.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case s.Token.THIS:return p.Node.createThisExpression(e.range(r,e.pos));case s.Token.CONSTRUCTOR:return p.Node.createConstructorExpression(e.range(r,e.pos));case s.Token.SUPER:return p.Node.createSuperExpression(e.range(r,e.pos));case s.Token.STRINGLITERAL:return p.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case s.Token.INTEGERLITERAL:return p.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case s.Token.FLOATLITERAL:return p.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case s.Token.SLASH:var d=e.readRegexpPattern();return e.skip(s.Token.SLASH)?p.Node.createRegexpLiteralExpression(d,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(o.DiagnosticCode._0_expected,e.range(),"/"),null);case s.Token.FUNCTION:return this.parseFunctionExpression(e);default:return this.error(o.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){var t=e.mark();if(!e.skip(s.Token.LESSTHAN))return null;var r=new Array;do{if(e.peek()===s.Token.GREATERTHAN)break;var n=this.parseType(e,!0,!0);if(!n)return e.reset(t),null;r.push(n)}while(e.skip(s.Token.COMMA));return e.skip(s.Token.GREATERTHAN)&&e.skip(s.Token.OPENPAREN)?r:(e.reset(t),null)},t.prototype.parseArguments=function(e){for(var t=new Array;!e.skip(s.Token.CLOSEPAREN);){var r=this.parseExpression(e,1);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return t},t.prototype.parseExpression=function(e,t){void 0===t&&(t=0);var r=this.parseExpressionStart(e);if(!r)return null;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>0?1:0);if(!g)return null;r=p.Node.createTernaryExpression(r,y,g,e.range(i,e.pos));break;case s.Token.COMMA:var T=[r];do{if(!(r=this.parseExpression(e,1)))return null;T.push(r)}while(e.skip(s.Token.COMMA));r=p.Node.createCommaExpression(T,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 E=u;if(E.expression.kind!=p.NodeKind.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,E.expression.range),null;E.expression=p.Node.createPropertyAccessExpression(r,E.expression,e.range(i,e.pos)),r=E}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}(o.DiagnosticEmitter);function h(e){switch(e){case s.Token.COMMA:return 0;case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:return 3;case s.Token.QUESTION:return 4;case s.Token.BAR_BAR:return 5;case s.Token.AMPERSAND_AMPERSAND:return 6;case s.Token.BAR:return 7;case s.Token.CARET:return 8;case s.Token.AMPERSAND:return 9;case s.Token.EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS:case s.Token.EQUALS_EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS_EQUALS:return 10;case s.Token.AS:case s.Token.IN:case s.Token.INSTANCEOF:case s.Token.LESSTHAN:case s.Token.GREATERTHAN:case s.Token.LESSTHAN_EQUALS:case s.Token.GREATERTHAN_EQUALS:return 11;case s.Token.LESSTHAN_LESSTHAN:case s.Token.GREATERTHAN_GREATERTHAN:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 12;case s.Token.PLUS:case s.Token.MINUS:return 13;case s.Token.ASTERISK:case s.Token.SLASH:case s.Token.PERCENT:return 14;case s.Token.ASTERISK_ASTERISK:return 15;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:return 17;case s.Token.DOT:case s.Token.NEW:case s.Token.OPENBRACKET:return 19;default:return-1}}function d(e){switch(e){case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:case s.Token.QUESTION:case s.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=u,function(e){e[e.COMMA=0]="COMMA",e[e.SPREAD=1]="SPREAD",e[e.YIELD=2]="YIELD",e[e.ASSIGNMENT=3]="ASSIGNMENT",e[e.CONDITIONAL=4]="CONDITIONAL",e[e.LOGICAL_OR=5]="LOGICAL_OR",e[e.LOGICAL_AND=6]="LOGICAL_AND",e[e.BITWISE_OR=7]="BITWISE_OR",e[e.BITWISE_XOR=8]="BITWISE_XOR",e[e.BITWISE_AND=9]="BITWISE_AND",e[e.EQUALITY=10]="EQUALITY",e[e.RELATIONAL=11]="RELATIONAL",e[e.SHIFT=12]="SHIFT",e[e.ADDITIVE=13]="ADDITIVE",e[e.MULTIPLICATIVE=14]="MULTIPLICATIVE",e[e.EXPONENTIATED=15]="EXPONENTIATED",e[e.UNARY_PREFIX=16]="UNARY_PREFIX",e[e.UNARY_POSTFIX=17]="UNARY_POSTFIX",e[e.CALL=18]="CALL",e[e.MEMBERACCESS=19]="MEMBERACCESS",e[e.GROUPING=20]="GROUPING",e[e.INVALID=-1]="INVALID"}(t.Precedence||(t.Precedence={}))},function(e,t,r){"use strict";var n=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(1),p=function(){function e(e,t){void 0===t&&(t=!1),this.todo=[],this.seen=new Set,this.program=e,this.includePrivate}return e.prototype.walk=function(){var e,t;try{for(var r=i(this.program.moduleLevelExports.values()),n=r.next();!n.done;n=r.next()){var a=n.value;this.visitElement(a)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}for(var s=this.todo;00&&this.push(", "),this.push("$"),this.push(i.toString(10)),this.push(": "),this.push(a(n.getFunctionParamType(e,i)));this.push("): "),this.push(a(n.getFunctionResultType(e))),this.push(" "),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("{\n"),this.decompileExpression(r),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("\n}\n"),++this.functionId},e.prototype.decompileExpression=function(e){var t,r,i,s,o=n.getExpressionId(e),c=n.getExpressionType(e);switch(o){case n.ExpressionId.Block:for(null!=(r=n.getBlockName(e))&&(this.push(r),this.push(": ")),this.push("{\n"),s=n.getBlockChildCount(e),i=0;i("),this.push(n.getLoadOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getLoadPtr(e)),void this.push(")");case n.ExpressionId.Store:return this.push("store<"),this.push(a(c)),this.push(">("),this.push(n.getStoreOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getStorePtr(e)),this.push(", "),this.decompileExpression(n.getStoreValue(e)),void this.push(")");case n.ExpressionId.Const:switch(c){case n.NativeType.I32:return void this.push(n.getConstValueI32(e).toString(10));case n.NativeType.I64:return void this.push(i64_to_string(i64_new(n.getConstValueI64Low(e),n.getConstValueI64High(e))));case n.NativeType.F32:return void this.push(n.getConstValueF32(e).toString(10));case n.NativeType.F64:return void this.push(n.getConstValueF64(e).toString(10))}break;case n.ExpressionId.Unary:switch(n.getUnaryOp(e)){case n.UnaryOp.ClzI32:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI32:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI32:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NegF32:case n.UnaryOp.NegF64:return this.push("-"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.AbsF32:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF32:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF32:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF32:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF32:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF32:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.EqzI32:case n.UnaryOp.EqzI64:return this.push("!"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ClzI64:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI64:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI64:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.AbsF64:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF64:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF64:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF64:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF64:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF64:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ExtendI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ExtendU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.WrapI64:case n.UnaryOp.TruncF32ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretF32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretF64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ConvertI32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.PromoteF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.DemoteF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretI32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretI64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")")}break;case n.ExpressionId.Binary:switch(n.getBinaryOp(e)){case n.BinaryOp.AddI32:case n.BinaryOp.AddI64:case n.BinaryOp.AddF32:case n.BinaryOp.AddF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" + "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.SubI32:case n.BinaryOp.SubI64:case n.BinaryOp.SubF32:case n.BinaryOp.SubF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" - "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.MulI32:case n.BinaryOp.MulI64:case n.BinaryOp.MulF32:case n.BinaryOp.MulF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" * "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivI32:case n.BinaryOp.DivI64:case n.BinaryOp.DivF32:case n.BinaryOp.DivF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RemI32:case n.BinaryOp.RemI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.AndI32:case n.BinaryOp.AndI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" & "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.OrI32:case n.BinaryOp.OrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" | "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.XorI32:case n.BinaryOp.XorI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" ^ "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShlI32:case n.BinaryOp.ShlI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" << "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrU32:case n.BinaryOp.ShrU64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >>> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrI32:case n.BinaryOp.ShrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI32:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI32:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.EqI32:case n.BinaryOp.EqI64:case n.BinaryOp.EqF32:case n.BinaryOp.EqF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" == "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.NeI32:case n.BinaryOp.NeI64:case n.BinaryOp.NeF32:case n.BinaryOp.NeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" != "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtI32:case n.BinaryOp.LtI64:case n.BinaryOp.LtF32:case n.BinaryOp.LtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeI32:case n.BinaryOp.LeI64:case n.BinaryOp.LeF32:case n.BinaryOp.LeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtI32:case n.BinaryOp.GtI64:case n.BinaryOp.GtF32:case n.BinaryOp.GtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeI32:case n.BinaryOp.GeI64:case n.BinaryOp.GeF32:case n.BinaryOp.GeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI64:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI64:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.LtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.CopysignF32:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF32:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF32:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.CopysignF64:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF64:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF64:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")")}return;case n.ExpressionId.Select:return this.push("select<"),this.push(a(c)),this.push(">("),this.decompileExpression(n.getSelectThen(e)),this.push(", "),this.decompileExpression(n.getSelectElse(e)),this.push(", "),this.decompileExpression(n.getSelectCondition(e)),void this.push(")");case n.ExpressionId.Drop:return this.decompileExpression(n.getDropValue(e)),void this.push(";\n");case n.ExpressionId.Return:return void((t=n.getReturnValue(e))?(this.push("return "),this.decompileExpression(t),this.push(";\n")):this.push("return;\n"));case n.ExpressionId.Host:switch(n.getHostOp(e)){case n.HostOp.CurrentMemory:return void this.push("current_memory()");case n.HostOp.GrowMemory:return this.push("grow_memory("),this.decompileExpression(n.getHostOperand(e,0)),void this.push(")")}break;case n.ExpressionId.Nop:return void this.push(";\n");case n.ExpressionId.Unreachable:return void this.push("unreachable()");case n.ExpressionId.AtomicCmpxchg:case n.ExpressionId.AtomicRMW:case n.ExpressionId.AtomicWait:case n.ExpressionId.AtomicWake:}throw new Error("not implemented")},e.prototype.push=function(e){this.text.push(e)},e.prototype.finish=function(){var e=this.text.join("");return this.text=[],e},e}();function a(e){switch(e){case n.NativeType.None:return"void";case n.NativeType.I32:return"i32";case n.NativeType.I64:return"i64";case n.NativeType.F32:return"f32";case n.NativeType.F64:return"f64";case n.NativeType.Unreachable:throw new Error("unreachable type");case n.NativeType.Auto:throw new Error("auto type");default:throw new Error("unexpected type")}}t.Decompiler=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(10),i=r(13),a=r(12),s=r(2);t.formatDiagnostic=s.formatDiagnosticMessage;var o=r(11);t.parseFile=function(e,t,r,n){return void 0===r&&(r=!1),void 0===n&&(n=null),n||(n=new o.Parser),n.parseFile(e,t,r),n},t.nextFile=function(e){return e.nextFile()},t.nextDiagnostic=function(e){var t=e.program;return t.diagnosticsOffset>>=0)&&e<256)&&(n=s[e])?n:(r=p(e,(0|e)<0?-1:0,!0),i&&(s[e]=r),r):(i=-128<=(e|=0)&&e<128)&&(n=a[e])?n:(r=p(e,e<0?-1:0,!1),i&&(a[e]=r),r)}function c(e,t){if(isNaN(e))return t?T:g;if(t){if(e<0)return T;if(e>=_)return A}else{if(e<=-m)return N;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},C.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},C.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((a=o).isZero())return p+s;for(;p.length<6;)p="0"+p;s=""+p+s}},C.getHighBits=function(){return this.high},C.getHighBitsUnsigned=function(){return this.high>>>0},C.getLowBits=function(){return this.low},C.getLowBitsUnsigned=function(){return this.low>>>0},C.getNumBitsAbs=function(){if(this.isNegative())return this.eq(N)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&0==(e&1<=0},C.isOdd=function(){return 1==(1&this.low)},C.isEven=function(){return 0==(1&this.low)},C.equals=function(e){return i(e)||(e=h(e)),(this.unsigned===e.unsigned||this.high>>>31!=1||e.high>>>31!=1)&&(this.high===e.high&&this.low===e.low)},C.eq=C.equals,C.notEquals=function(e){return!this.eq(e)},C.neq=C.notEquals,C.ne=C.notEquals,C.lessThan=function(e){return this.comp(e)<0},C.lt=C.lessThan,C.lessThanOrEqual=function(e){return this.comp(e)<=0},C.lte=C.lessThanOrEqual,C.le=C.lessThanOrEqual,C.greaterThan=function(e){return this.comp(e)>0},C.gt=C.greaterThan,C.greaterThanOrEqual=function(e){return this.comp(e)>=0},C.gte=C.greaterThanOrEqual,C.ge=C.greaterThanOrEqual,C.compare=function(e){if(i(e)||(e=h(e)),this.eq(e))return 0;var t=this.isNegative(),r=e.isNegative();return t&&!r?-1:!t&&r?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1},C.comp=C.compare,C.negate=function(){return!this.unsigned&&this.eq(N)?N:this.not().add(E)},C.neg=C.negate,C.add=function(e){i(e)||(e=h(e));var t=this.high>>>16,r=65535&this.high,n=this.low>>>16,a=65535&this.low,s=e.high>>>16,o=65535&e.high,c=e.low>>>16,l=0,u=0,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,u+=(d+=n+c)>>>16,l+=(u+=r+o)>>>16,l+=t+s,p((d&=65535)<<16|(_&=65535),(l&=65535)<<16|(u&=65535),this.unsigned)},C.subtract=function(e){return i(e)||(e=h(e)),this.add(e.neg())},C.sub=C.subtract,C.multiply=function(e){if(this.isZero())return g;if(i(e)||(e=h(e)),r)return p(r.mul(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned);if(e.isZero())return g;if(this.eq(N))return e.isOdd()?N:g;if(e.eq(N))return this.isOdd()?N:g;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(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,T=0,E=0;return T+=(E+=s*d)>>>16,m+=(T+=a*d)>>>16,T&=65535,m+=(T+=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((T&=65535)<<16|(E&=65535),(_&=65535)<<16|(m&=65535),this.unsigned)},C.mul=C.multiply,C.divide=function(e){if(i(e)||(e=h(e)),e.isZero())throw Error("division by zero");var t,n,a;if(r)return this.unsigned||-2147483648!==this.high||-1!==e.low||-1!==e.high?p((this.unsigned?r.div_u:r.div_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?T:g;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return T;if(e.gt(this.shru(1)))return f;a=T}else{if(this.eq(N))return e.eq(E)||e.eq(I)?N:e.eq(N)?E:(t=this.shr(1).div(e).shl(1)).eq(g)?e.isNegative()?E:I:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(N))return this.unsigned?T:g;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();a=g}for(n=this;n.gte(e);){t=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var s=Math.ceil(Math.log(t)/Math.LN2),o=s<=48?1:l(2,s-48),u=c(t),d=u.mul(e);d.isNegative()||d.gt(n);)d=(u=c(t-=o,this.unsigned)).mul(e);u.isZero()&&(u=E),a=a.add(u),n=n.sub(d)}return a},C.div=C.divide,C.modulo=function(e){return i(e)||(e=h(e)),r?p((this.unsigned?r.rem_u:r.rem_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this.sub(this.div(e).mul(e))},C.mod=C.modulo,C.rem=C.modulo,C.not=function(){return p(~this.low,~this.high,this.unsigned)},C.and=function(e){return i(e)||(e=h(e)),p(this.low&e.low,this.high&e.high,this.unsigned)},C.or=function(e){return i(e)||(e=h(e)),p(this.low|e.low,this.high|e.high,this.unsigned)},C.xor=function(e){return i(e)||(e=h(e)),p(this.low^e.low,this.high^e.high,this.unsigned)},C.shiftLeft=function(e){return i(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?p(this.low<>>32-e,this.unsigned):p(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):p(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},C.shr=C.shiftRight,C.shiftRightUnsigned=function(e){if(i(e)&&(e=e.toInt()),0===(e&=63))return this;var t=this.high;return e<32?p(this.low>>>e|t<<32-e,t>>>e,this.unsigned):p(32===e?t:t>>>e-32,0,this.unsigned)},C.shru=C.shiftRightUnsigned,C.shr_u=C.shiftRightUnsigned,C.toSigned=function(){return this.unsigned?p(this.low,this.high,!1):this},C.toUnsigned=function(){return this.unsigned?this:p(this.low,this.high,!0)},C.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},C.toBytesLE=function(){var e=this.high,t=this.low;return[255&t,t>>>8&255,t>>>16&255,t>>>24,255&e,e>>>8&255,e>>>16&255,e>>>24]},C.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,255&e,t>>>24,t>>>16&255,t>>>8&255,255&t]},n.fromBytes=function(e,t,r){return r?n.fromBytesLE(e,t):n.fromBytesBE(e,t)},n.fromBytesLE=function(e,t){return new n(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)},n.fromBytesBE=function(e,t){return new n(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}},function(e,t,r){(function(e){const t=e.Long||r(15);e.i64_zero=t.ZERO,e.i64_one=t.ONE,e.i64_new=function(e,r){return t.fromBits(e,r)},e.i64_low=function(e){return e.low},e.i64_high=function(e){return e.high},e.i64_add=function(e,t){return e.add(t)},e.i64_sub=function(e,t){return e.sub(t)},e.i64_mul=function(e,t){return e.mul(t)},e.i64_div=function(e,t){return e.div(t)},e.i64_div_u=function(e,t){return e.toUnsigned().div(t.toUnsigned()).toSigned()},e.i64_rem=function(e,t){return e.mod(t)},e.i64_rem_u=function(e,t){return e.toUnsigned().mod(t.toUnsigned()).toSigned()},e.i64_and=function(e,t){return e.and(t)},e.i64_or=function(e,t){return e.or(t)},e.i64_xor=function(e,t){return e.xor(t)},e.i64_shl=function(e,t){return e.shl(t)},e.i64_shr=function(e,t){return e.shr(t)},e.i64_shr_u=function(e,t){return e.shru(t)},e.i64_not=function(e){return e.not()},e.i64_eq=function(e,t){return e.eq(t)},e.i64_ne=function(e,t){return e.ne(t)},e.i64_align=function(e,r){assert(r&&0==(r&r-1));var n=t.fromInt(r-1);return e.add(n).and(n.not())},e.i64_is_i8=function(e){return 0===e.high&&e.low>=0&&e.low<=i8.MAX_VALUE||-1===e.high&&e.low>=i8.MIN_VALUE&&e.low<0},e.i64_is_i16=function(e){return 0===e.high&&e.low>=0&&e.low<=i16.MAX_VALUE||-1===e.high&&e.low>=i16.MIN_VALUE&&e.low<0},e.i64_is_i32=function(e){return 0===e.high&&e.low>=0||-1===e.high&&e.low<0},e.i64_is_u8=function(e){return 0===e.high&&e.low>=0&&e.low<=u8.MAX_VALUE},e.i64_is_u16=function(e){return 0===e.high&&e.low>=0&&e.low<=u16.MAX_VALUE},e.i64_is_u32=function(e){return 0===e.high},e.i64_is_bool=function(e){return 0===e.high&&(0===e.low||1===e.low)};const n=t.fromNumber(f32.MIN_SAFE_INTEGER),i=t.fromNumber(f32.MAX_SAFE_INTEGER);e.i64_is_f32=function(e){return e.gte(n)&&e.lte(i)};const a=t.fromNumber(f64.MIN_SAFE_INTEGER),s=t.fromNumber(f64.MAX_SAFE_INTEGER);e.i64_is_f64=function(e){return e.gte(a)&&e.lte(s)},e.i64_to_f32=function(t){return e.Math.fround(t.toNumber())},e.i64_to_f64=function(e){return e.toNumber()},e.i64_to_string=function(e,t){return(t?e.toUnsigned():e).toString(10)}}).call(this,r(6))},function(e,t,r){(function(e){const t=new Float64Array(1),r=new Float32Array(t.buffer),n=new Int32Array(t.buffer);e.f32_as_i32=function(e){return r[0]=e,n[0]},e.i32_as_f32=function(e){return n[0]=e,r[0]},e.f64_as_i64=function(e){return t[0]=e,i64_new(n[0],n[1])},e.i64_as_f64=function(e){return n[0]=i64_low(e),n[1]=i64_high(e),t[0]}}).call(this,r(6))},function(e,t,r){"use strict";function n(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24}function i(e,t,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function a(e,t){var r=n(e,t),i=n(e,t+4);return i64_new(r,i)}Object.defineProperty(t,"__esModule",{value:!0}),t.readI32=n,t.writeI32=i,t.readI64=a,t.writeI64=function(e,t,r){i(i64_low(e),t,r),i(i64_high(e),t,r+4)},t.readF32=function(e,t){return i32_as_f32(n(e,t))},t.writeF32=function(e,t,r){i(f32_as_i32(e),t,r)},t.readF64=function(e,t){return i64_as_f64(a(e,t))},t.writeF64=function(e,t,r){var n=f64_as_i64(e);i(i64_low(n),t,r),i(i64_high(n),t,r+4)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=" ",i=" ",a=" ";t.indent=function(e,t){for(;t>=4;)e.push(a),t-=4;t>=2&&(e.push(i),t-=2),t&&e.push(n)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=47;function i(e){for(var t,r=0,i=e.length;r+10||i=0;)if(e.charCodeAt(a)==n){r-a==3&&46==e.charCodeAt(a+1)&&46==e.charCodeAt(a+2)||(e=t?e.substring(0,a):e.substring(0,a)+e.substring(r+3),i-=r+3-a,r=a-1);break}if(a<0&&r>0&&(2!=r||46!=e.charCodeAt(0)||46!=e.charCodeAt(1))){i=(e=e.substring(r+4)).length;continue}}}r++}return i>0?e:"."}function a(e){for(var t=e.length;--t>0;)if(e.charCodeAt(t)==n)return e.substring(0,t);return"."}t.normalizePath=i,t.resolvePath=function(e,t){return e.startsWith("std/")?e:i(a(t)+String.fromCharCode(n)+e)},t.dirname=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NULL=0]="NULL",e[e.LINEFEED=10]="LINEFEED",e[e.CARRIAGERETURN=13]="CARRIAGERETURN",e[e.LINESEPARATOR=8232]="LINESEPARATOR",e[e.PARAGRAPHSEPARATOR=8233]="PARAGRAPHSEPARATOR",e[e.NEXTLINE=133]="NEXTLINE",e[e.SPACE=32]="SPACE",e[e.NONBREAKINGSPACE=160]="NONBREAKINGSPACE",e[e.ENQUAD=8192]="ENQUAD",e[e.EMQUAD=8193]="EMQUAD",e[e.ENSPACE=8194]="ENSPACE",e[e.EMSPACE=8195]="EMSPACE",e[e.THREEPEREMSPACE=8196]="THREEPEREMSPACE",e[e.FOURPEREMSPACE=8197]="FOURPEREMSPACE",e[e.SIXPEREMSPACE=8198]="SIXPEREMSPACE",e[e.FIGURESPACE=8199]="FIGURESPACE",e[e.PUNCTUATIONSPACE=8200]="PUNCTUATIONSPACE",e[e.THINSPACE=8201]="THINSPACE",e[e.HAIRSPACE=8202]="HAIRSPACE",e[e.ZEROWIDTHSPACE=8203]="ZEROWIDTHSPACE",e[e.NARROWNOBREAKSPACE=8239]="NARROWNOBREAKSPACE",e[e.IDEOGRAPHICSPACE=12288]="IDEOGRAPHICSPACE",e[e.MATHEMATICALSPACE=8287]="MATHEMATICALSPACE",e[e.OGHAM=5760]="OGHAM",e[e._=95]="_",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.AMPERSAND=38]="AMPERSAND",e[e.ASTERISK=42]="ASTERISK",e[e.AT=64]="AT",e[e.BACKSLASH=92]="BACKSLASH",e[e.BACKTICK=96]="BACKTICK",e[e.BAR=124]="BAR",e[e.CARET=94]="CARET",e[e.CLOSEBRACE=125]="CLOSEBRACE",e[e.CLOSEBRACKET=93]="CLOSEBRACKET",e[e.CLOSEPAREN=41]="CLOSEPAREN",e[e.COLON=58]="COLON",e[e.COMMA=44]="COMMA",e[e.DOLLAR=36]="DOLLAR",e[e.DOT=46]="DOT",e[e.DOUBLEQUOTE=34]="DOUBLEQUOTE",e[e.EQUALS=61]="EQUALS",e[e.EXCLAMATION=33]="EXCLAMATION",e[e.GREATERTHAN=62]="GREATERTHAN",e[e.HASH=35]="HASH",e[e.LESSTHAN=60]="LESSTHAN",e[e.MINUS=45]="MINUS",e[e.OPENBRACE=123]="OPENBRACE",e[e.OPENBRACKET=91]="OPENBRACKET",e[e.OPENPAREN=40]="OPENPAREN",e[e.PERCENT=37]="PERCENT",e[e.PLUS=43]="PLUS",e[e.QUESTION=63]="QUESTION",e[e.SEMICOLON=59]="SEMICOLON",e[e.SINGLEQUOTE=39]="SINGLEQUOTE",e[e.SLASH=47]="SLASH",e[e.TILDE=126]="TILDE",e[e.BACKSPACE=8]="BACKSPACE",e[e.FORMFEED=12]="FORMFEED",e[e.BYTEORDERMARK=65279]="BYTEORDERMARK",e[e.TAB=9]="TAB",e[e.VERTICALTAB=11]="VERTICALTAB"}(t.CharCode||(t.CharCode={})),t.isLineBreak=function(e){switch(e){case 10:case 13:case 8232:case 8233:return!0;default:return!1}},t.isWhiteSpace=function(e){switch(e){case 32:case 9:case 11:case 12:case 160:case 133:case 5760:case 8239:case 8287:case 12288:case 65279:return!0;default:return e>=8192&&e<=8203}},t.isDecimalDigit=function(e){return e>=48&&e<=57},t.isOctalDigit=function(e){return e>=48&&e<=55},t.isIdentifierStart=function(e){return e>=65&&e<=90||e>=97&&e<=122||36==e||95==e||e>127&&function(e){return!(e<0||e>65535)&&a(e,n)}(e)},t.isKeywordCharacter=function(e){return e>=97&&e<=122},t.isIdentifierPart=function(e){return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||36==e||95==e||e>127&&function(e){return!(e<0||e>65535)&&a(e,i)}(e)};var n=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1319,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2208,2208,2210,2220,2308,2361,2365,2365,2384,2384,2392,2401,2417,2423,2425,2431,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3133,3160,3161,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3424,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6176,6263,6272,6312,6314,6314,6320,6389,6400,6428,6480,6509,6512,6516,6528,6571,6593,6599,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7401,7404,7406,7409,7413,7414,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11823,11823,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42647,42656,42735,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43648,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44002,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],i=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1155,1159,1162,1319,1329,1366,1369,1369,1377,1415,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1520,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2048,2093,2112,2139,2208,2208,2210,2220,2276,2302,2304,2403,2406,2415,2417,2423,2425,2431,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024,3031,3031,3046,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3161,3168,3171,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311,3313,3314,3330,3331,3333,3340,3342,3344,3346,3386,3389,3396,3398,3400,3402,3406,3415,3415,3424,3427,3430,3439,3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4957,4959,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5908,5920,5940,5952,5971,5984,5996,5998,6e3,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6263,6272,6314,6320,6389,6400,6428,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6617,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7376,7378,7380,7414,7424,7654,7676,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8204,8205,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775,11823,11823,12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12442,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42647,42655,42737,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43047,43072,43123,43136,43204,43216,43225,43232,43255,43259,43259,43264,43309,43312,43347,43360,43388,43392,43456,43471,43481,43520,43574,43584,43597,43600,43609,43616,43638,43642,43643,43648,43714,43739,43741,43744,43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65062,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500];function a(e,t){if(e2?(r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),c.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",c.length.toString(10)),E.createUnreachable()):r&&1==r.length?(m=e.compileExpression(c[0],e.options.usizeType,1,0),(b=2==c.length?u(e,c[1]):0)<0?E.createUnreachable():(e.currentType=r[0],E.createLoad(r[0].byteSize,r[0].is(5),m,r[0].is(4)&&h.is(4)&&h.size>r[0].size?(e.currentType=h).toNativeType():(e.currentType=r[0]).toNativeType(),b))):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable());case"store":if(e.currentType=a.Type.void,c.length<2||c.length>3)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),c.length<2?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"2",c.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),E.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable();m=e.compileExpression(c[0],e.options.usizeType,1,0),y=e.compileExpression(c[1],r[0],r[0].is(4)?0:1,0);f=void 0;return r[0].is(4)&&(!e.currentType.is(4)||e.currentType.size1)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),E.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable();var L;if(!(L=r[0].classReference))return e.error(n.DiagnosticCode.Operation_not_supported,d.range),E.createUnreachable();var b=void 0;if(c.length){if(c[0].kind!=i.NodeKind.LITERAL||c[0].literalKind!=i.LiteralKind.STRING)return e.error(n.DiagnosticCode.String_literal_expected,c[0].range),E.createUnreachable();var k=c[0].value,R=L.members?L.members.get(k):null;if(!R||R.kind!=o.ElementKind.FIELD)return e.error(n.DiagnosticCode.Type_0_has_no_property_1,c[0].range,L.internalName,k),E.createUnreachable();b=R.memoryOffset}else b=L.currentMemoryOffset;return e.options.isWasm64?h.is(4)&&h.size<=32?(e.currentType=a.Type.u32,E.createI32(b)):E.createI64(b):h.is(4)&&64==h.size?(e.currentType=a.Type.u64,E.createI64(b)):E.createI32(b);case"select":if(3!=c.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),E.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),E.createUnreachable();m=e.compileExpression(c[0],r[0],1,0)}else m=e.compileExpressionRetainType(c[0],a.Type.i32,0);f=e.currentType;switch(y=e.compileExpression(c[1],f,1,0),g=e.makeIsTrueish(e.compileExpressionRetainType(c[2],a.Type.bool,0),e.currentType),e.currentType=f,e.currentType.kind){case 0:case 1:case 5:case 6:case 10:default:T=E.createSelect(m,y,g);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),T=E.createUnreachable()}return T;case"unreachable":return 0!=c.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createUnreachable();case"current_memory":return e.currentType=a.Type.i32,0!=c.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createHost(s.HostOp.CurrentMemory);case"grow_memory":return e.currentType=a.Type.i32,1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),m=E.createUnreachable()):m=e.compileExpression(c[0],a.Type.i32,1,0),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createHost(s.HostOp.GrowMemory,null,[m]);case"move_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=c.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),e.currentType=a.Type.void,E.createUnreachable();throw m=e.compileExpression(c[0],e.options.usizeType,1,0),y=e.compileExpression(c[1],e.options.usizeType,1,0),g=e.compileExpression(c[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"set_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=c.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),e.currentType=a.Type.void,E.createUnreachable();throw m=e.compileExpression(c[0],e.options.usizeType,1,0),y=e.compileExpression(c[1],a.Type.u32,1,0),g=e.compileExpression(c[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=r[0],E.createUnreachable()):(m=e.compileExpressionRetainType(c[0],r[0],0),e.currentType=r[0],e.currentType.size!=r[0].size?(e.error(n.DiagnosticCode.Operation_not_supported,d.range),E.createUnreachable()):m):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable());case"assert":if(c.length<1||c.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),c.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)):c.length>2&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",c.length.toString(10)),E.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),E.createUnreachable();m=e.compileExpression(c[0],r[0],1,1)}else m=e.compileExpressionRetainType(c[0],a.Type.bool,1);f=e.currentType;if(e.currentType=f.nonNullableType,e.options.noAssert)return h==a.Type.void?(e.currentType=a.Type.void,E.createNop()):m;var x=_(e,2==c.length?c[1]:null,d);if(e.currentType=f.nonNullableType,h==a.Type.void){switch(e.currentType.kind){default:T=E.createIf(E.createUnary(s.UnaryOp.EqzI32,m),x);break;case 3:case 8:T=E.createIf(E.createUnary(s.UnaryOp.EqzI64,m),x);break;case 4:case 9:T=E.createIf(E.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,m),x);break;case 11:T=E.createIf(E.createBinary(s.BinaryOp.EqF32,m,E.createF32(0)),x);break;case 12:T=E.createIf(E.createBinary(s.BinaryOp.EqF64,m,E.createF64(0)),x);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),T=x}e.currentType=a.Type.void}else switch(e.currentType.kind){case 0:case 1:case 5:case 6:case 10:A=e.currentFunction.flow,v=e.currentFunction.getAndFreeTempLocal(e.currentType,!A.canOverflow(m,e.currentType));T=E.createIf(E.createTeeLocal(v.index,m),E.createGetLocal(v.index,s.NativeType.I32),x);break;case 2:case 7:default:v=e.currentFunction.getAndFreeTempLocal(a.Type.i32,!1);T=E.createIf(E.createTeeLocal(v.index,m),E.createGetLocal(v.index,s.NativeType.I32),x);break;case 3:case 8:v=e.currentFunction.getAndFreeTempLocal(a.Type.i64,!1);T=E.createIf(E.createUnary(s.UnaryOp.EqzI64,E.createTeeLocal(v.index,m)),x,E.createGetLocal(v.index,s.NativeType.I64));break;case 4:case 9:v=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);T=E.createIf(E.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,E.createTeeLocal(v.index,m)),x,E.createGetLocal(v.index,e.options.nativeSizeType));break;case 11:v=e.currentFunction.getAndFreeTempLocal(a.Type.f32,!1);T=E.createIf(E.createBinary(s.BinaryOp.EqF32,E.createTeeLocal(v.index,m),E.createF32(0)),x,E.createGetLocal(v.index,s.NativeType.F32));break;case 12:v=e.currentFunction.getAndFreeTempLocal(a.Type.f64,!1);T=E.createIf(E.createBinary(s.BinaryOp.EqF64,E.createTeeLocal(v.index,m),E.createF64(0)),x,E.createGetLocal(v.index,s.NativeType.F64));break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),T=x}return T;case"unchecked":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),E.createUnreachable()):((A=e.currentFunction.flow).set(4096),T=e.compileExpressionRetainType(c[0],h,0),A.unset(4096),T);case"call_indirect":if(c.length<1)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),E.createUnreachable();var F=void 0;if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),E.createUnreachable();F=r[0]}else F=h;if(m=e.compileExpressionRetainType(c[0],a.Type.u32,0),7!=e.currentType.kind)return e.error(n.DiagnosticCode.Operation_not_supported,c[0].range),E.createUnreachable();for(var B=c.length-1,U=new Array(B),D=new Array(B+1),P=F.toNativeType(),w=new Array(B),M=0;M1&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,i.range,"1",t.length.toString(10)),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"1",r.length.toString(10)),null}function u(e,t){var r,i;return e.options.isWasm64?(r=e.precomputeExpression(t,a.Type.usize64,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I64||0!=s.getConstValueI64High(r)||(i=s.getConstValueI64Low(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)):(r=e.precomputeExpression(t,a.Type.usize32,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I32||(i=s.getConstValueI32(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)),i}t.compileCall=c;var h="allocate_memory";t.compileAllocate=function(e,t,r){var i=e.program;assert(t.program==i);var a=e.module,s=e.options,c=i.elementsLookup.get(h);if(!c)return i.error(n.DiagnosticCode.Cannot_find_name_0,r.range,h),i.info(n.DiagnosticCode.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf,r.range),a.createUnreachable();if(c.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.error(n.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,c.internalName),a.createUnreachable();var p=c.resolve();return p&&e.compileFunction(p)?(e.currentType=t.type,a.createCall(p.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],s.nativeSizeType)):a.createUnreachable()};var d="abort";function _(e,t,r){var n=e.program,i=e.module,c=n.typesLookup.get("string");if(!c)return i.createUnreachable();var p=n.elementsLookup.get(d);if(!p||p.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.createUnreachable();var l=p.resolve();if(!l||!e.compileFunction(l))return i.createUnreachable();var u=null!=t?e.compileExpression(t,c,1,0):c.toNativeZero(i),h=e.compileStaticString(r.range.source.normalizedPath);return e.currentType=a.Type.void,i.createBlock(null,[i.createCallImport(l.internalName,[u,h,i.createI32(r.range.line),i.createI32(r.range.column)],s.NativeType.None),i.createUnreachable()])}t.compileAbort=_},function(t,r){t.exports=e},function(e,t,r){(function(e){const t=e.Binaryen||r(23);for(var n in t)(n.startsWith("_Binaryen")||n.startsWith("_Relooper"))&&(e[n]=t[n]);e.allocate_memory=function(e){return e?t._malloc(e):0},e.free_memory=function(e){e&&t._free(e)},e.move_memory=function(e,r,n){return t._memmove(e,r,n)},e.store=function(e,r){t.HEAPU8[e]=r},e.load=function(e){return t.HEAPU8[e]};const i=r(3).Module;i.prototype.toText=function(){var e=t.print,r="";return t.print=function(e){r+=e+"\n"},_BinaryenModulePrint(this.ref),t.print=e,r},i.prototype.toAsmjs=function(){var e=t.print,r="";return t.print=function(e){r+=e+"\n"},_BinaryenModulePrintAsmjs(this.ref),t.print=e,r}}).call(this,r(6))},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(25)(t)}).call(this,r(6))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(26),r(24),r(17),r(16)},function(e,t,r){r(27),e.exports=r(14)}])}); //# sourceMappingURL=assemblyscript.js.map \ No newline at end of file diff --git a/dist/assemblyscript.js.map b/dist/assemblyscript.js.map index 017057a1..26a4e292 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/util/index.ts","webpack://assemblyscript/./src/diagnostics.ts","webpack://assemblyscript/./src/module.ts","webpack://assemblyscript/./src/ast.ts","webpack://assemblyscript/./src/program.ts","webpack://assemblyscript/(webpack)/buildin/global.js","webpack://assemblyscript/./src/types.ts","webpack://assemblyscript/./src/tokenizer.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.ts","webpack://assemblyscript/./src/compiler.ts","webpack://assemblyscript/./src/parser.ts","webpack://assemblyscript/./src/definitions.ts","webpack://assemblyscript/./src/decompiler.ts","webpack://assemblyscript/./src/index.ts","webpack://assemblyscript/./node_modules/long/src/long.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./src/glue/js/float.js","webpack://assemblyscript/./src/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__23__","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","__export","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","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","expr","_BinaryenUnary","createBinary","left","right","_BinaryenBinary","createHost","operands","allocPtrArray","_BinaryenHost","createGetLocal","index","type","_BinaryenGetLocal","createTeeLocal","_BinaryenTeeLocal","createGetGlobal","_BinaryenGetGlobal","createLoad","bytes","signed","ptr","_BinaryenLoad","createStore","_BinaryenStore","createAtomicLoad","_BinaryenAtomicLoad","createAtomicStore","_BinaryenAtomicStore","createAtomicRMW","_BinaryenAtomicRMW","createAtomicCmpxchg","expected","replacement","_BinaryenAtomicCmpxchg","createAtomicWait","timeout","expectedType","_BinaryenAtomicWait","createAtomicWake","wakeCount","_BinaryenAtomicWake","createSetLocal","_BinaryenSetLocal","createSetGlobal","_BinaryenSetGlobal","createBlock","label","children","None","_BinaryenBlock","createBreak","condition","_BinaryenBreak","createDrop","expression","_BinaryenDrop","createLoop","body","_BinaryenLoop","createIf","ifTrue","ifFalse","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","names","defaultName","numNames","strs","_BinaryenSwitch","createCall","target","returnType","_BinaryenCall","createCallImport","_BinaryenCallImport","createCallIndirect","typeName","_BinaryenCallIndirect","createUnreachable","_BinaryenUnreachable","addGlobal","mutable","initializer","_BinaryenAddGlobal","addFunction","varTypes","_BinaryenAddFunction","removeFunction","_BinaryenRemoveFunction","addTemporaryFunction","tempName","typeRef","removeTemporaryFunction","addFunctionExport","internalName","externalName","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","k","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","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","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","extendsType","elem","TypeParameterNode","createParameter","ParameterNode","parameterKind","createSignature","parameters","explicitThisType","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","arguments","decoratorKind","decoratorNameToKind","createComment","node","CommentNode","commentKind","IdentifierExpression","createEmptyIdentifierExpression","createArrayLiteralExpression","elements","ArrayLiteralExpression","elementExpressions","nodes","setParentIfNotNull","createAssertionExpression","assertionKind","toType","AssertionExpression","createBinaryExpression","operator","BinaryExpression","createCallExpression","typeArgs","CallExpression","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","element","ElementAccessExpression","elementExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","declaration","FunctionExpression","ARROW","createInstanceOfExpression","isType","InstanceOfExpression","createIntegerLiteralExpression","IntegerLiteralExpression","createNewExpression","NewExpression","createNullExpression","NullExpression","createParenthesizedExpression","ParenthesizedExpression","createPropertyAccessExpression","PropertyAccessExpression","createRegexpLiteralExpression","pattern","RegexpLiteralExpression","patternFlags","createTernaryExpression","ifThen","ifElse","TernaryExpression","createStringLiteralExpression","StringLiteralExpression","createSuperExpression","SuperExpression","createThisExpression","ThisExpression","createTrueExpression","TrueExpression","createUnaryPostfixExpression","operand","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","statements","BlockStatement","createBreakStatement","BreakStatement","createClassDeclaration","identifier","typeParameters","implementsTypes","members","decorators","ClassDeclaration","createContinueStatement","ContinueStatement","createDoStatement","statement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","values","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","path","ExportStatement","normalizePath","startsWith","resolvePath","internalPath","mangleInternalPath","createExportImportStatement","ExportImportStatement","createExportMember","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","IfStatement","createImportStatement","decls","ImportStatement","declarations","namespaceName","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createFunctionDeclaration","signature","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","COMMA","CONSTRUCTOR","FLOAT","FUNCTION","INSTANCEOF","INTEGER","NEW","PARENTHESIZED","REGEXP","TERNARY","STRING","SUPER","THIS","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","isLastStatement","BLOCK","FUNCTIONDECLARATION","METHODDECLARATION","SourceKind","Statement","Source","SOURCE","tokenizer","debugInfoIndex","exportPaths","sourceKind","pos","lastIndexOf","simplePath","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","VARIABLE","NAMESPACEDECLARATION","EXPORT","isTopLevelExport","CLASSDECLARATION","STATIC","needsExplicitExport","member","VariableLikeDeclarationStatement","BREAK","CONTINUE","DO","EMPTY","ENUMDECLARATION","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","FIELDDECLARATION","parameterIndex","FOR","IF","IMPORTDECLARATION","IMPORT","INTERFACEDECLARATION","RETURN","SWITCHCASE","SWITCH","THROW","TRY","TYPEDECLARATION","VARIABLEDECLARATION","VOID","WHILE","asGlobal","endsWith","findDecorator","decorator","OperatorKind","diagnostics_1","types_1","ast_1","module_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","resolvedThisExpression","resolvedElementExpression","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","tryResolveImport","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","resolve","has","Duplicate_identifier_0","programLevelInternalName","FUNCTION_PROTOTYPE","startFunction","GENERIC","AMBIENT","MAIN","Global","withConstantIntegerValue","setConstantFloat","withConstantFloatValue","queuedNamedExports","filterDecorators","acceptedFlags","presentFlags","decoratorKindToFlag","Duplicate_decorator","Decorator_0_is_not_valid_here","checkGlobalOptions","parentNode","hasDecorator","BUILTIN","isLibrary","namespace","fileLevelInternalName","simpleName","ClassPrototype","numImplementsTypes","Unmanaged_classes_cannot_implement_interfaces","MODULE_EXPORT","Export_declaration_conflicts_with_exported_declaration_of_0","isEntry","memberDeclarations","memberDeclaration","initializeField","GET","SET","initializeAccessor","initializeMethod","classPrototype","staticField","instanceMembers","instanceField","FieldPrototype","decoratorFlags","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperatorOverloads","numArgs","firstArg","Operation_not_supported","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","resolveSignature","contextualTypeArguments","reportNotFound","thisType","resolveType","parameterTypeNodes","numParameters","parameterTypes","parameterNames","requiredParameters","hasRest","parameterTypeNode","DEFAULT","REST","parameterType","returnTypeNode","Signature","asNullable","typeNode","ENUM","instance","resolveUsingTypeArguments","paramType","instanceKey","typesToString","placeholderType","resolveTypeArguments","typeArgumentNodes","alternativeReportNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","atEnd","context","flow","getScopedLocal","CLASS","resolvePropertyAccess","propertyAccess","contextualFunction","targetExpression","resolveExpression","propertyName","LOCAL","FIELD","classReference","Property_0_does_not_exist_on_type_1","indexedGet","lookupOverload","Index_signature_is_missing_in_type_0","base","resolveElementAccess","elementAccess","classType","explicitLocal","_this_cannot_be_referenced_in_current_location","_super_can_only_be_referenced_in_a_derived_class","signatureReference","functionTarget","cachedFunctionTarget","FunctionTarget","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","Element","program","NAMESPACE","ENUMVALUE","constantValue","ConstantValueKind","VariableLikeElement","constantValueKind","constantIntegerValue","CONST","INLINED","constantFloatValue","Parameter","Local","scopedGlobal","instances","classTypeArguments","functionTypeArguments","isInstance","INSTANCE","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","_b","inheritedName","inheritedType","classTypeParameters","numClassTypeParameters","numFunctionTypeArguments","signatureNode","functionTypeParameters","classInstance","signatureParameters","signatureParameterCount","parameterDeclaration","Function","resolvePartial","partialKey","partialPrototype","reportNode","resolvedTypeArguments","resolveBuiltinTypeArguments","resolvedType","localsByName","localsByIndex","additionalLocals","breakContext","debugLocations","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","DECLARE","localIndex","local","inheritedTypeArguments_2","inheritedTypeArguments_2_1","parameterName","getParameterName","Flow","addLocal","getTempLocal","wrapped","temps","toNativeType","pop","setLocalWrapped","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","debugLocation","debugInfoRef","FUNCTION_TARGET","toSignatureString","asFunction","FIELD_PROTOTYPE","Field","memoryOffset","inheritedTypeArguments_3","inheritedTypeArguments_3_1","_e","baseClass","baseClassType","Class_0_is_sealed_and_cannot_be_extended","Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa","Class","currentMemoryOffset","_f","_g","inheritedMember","partialConstructor","constructorInstance","_h","_j","fieldDeclaration","fieldType","fieldInstance","byteSize","instanceProperty","partialGetterPrototype","partialSetterPrototype","_k","_l","_m","operatorInstance","operatorPartial","asClass","inheritedTypeArguments_4","inheritedTypeArguments_4_1","baseType","isAssignableTo","current","unchecked","uncheckedOverload","overload","INTERFACE_PROTOTYPE","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","returnLabel","wrappedLocals","wrappedLocalsExt","unset","fork","branch","slice","free","scopedLocal","SCOPED","addScopedLocal","existingLocal","addScopedLocalAlias","scopedAlias","isLocalWrapped","map","ext","i64_ne","i64_and","i64_shl","i64_one","i64_zero","off","i64_or","i64_not","inherit","other","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","toSize","g","eval","e","window","TypeKind","TypeFlags","cachedNullableType","ceil","nonNullableType","isize64","isize32","usize64","usize32","computeSmallIntegerShift","targetType","signednessIsRelevant","currentClass","targetClass","targetFunction","commonCompatible","signednessIsImportant","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","typesToNativeTypes","types","numTypes","getDefaultParameterName","thisThisType","targetThisType","thisParameterTypes","targetParameterTypes","thisParameterType","targetParameterType","thisReturnType","targetReturnType","makeSignatureString","includeThis","optionalStart","restIndex","cachedDefaultParameterNames","IdentifierHandling","tokenFromKeyword","ABSTRACT","AS","ASYNC","AWAIT","CASE","CATCH","DEBUGGER","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","IS","KEYOF","LET","MODULE","OF","PACKAGE","PRIVATE","PROTECTED","PUBLIC","READONLY","TYPEOF","VAR","WITH","YIELD","tokenIsAlsoIdentifier","token","operatorTokenToString","DOT_DOT_DOT","LESSTHAN","GREATERTHAN","LESSTHAN_EQUALS","GREATERTHAN_EQUALS","EQUALS_EQUALS","EXCLAMATION_EQUALS","EQUALS_EQUALS_EQUALS","EXCLAMATION_EQUALS_EQUALS","ASTERISK_ASTERISK","ASTERISK","SLASH","PERCENT","PLUS_PLUS","MINUS_MINUS","LESSTHAN_LESSTHAN","GREATERTHAN_GREATERTHAN","GREATERTHAN_GREATERTHAN_GREATERTHAN","AMPERSAND","BAR","CARET","EXCLAMATION","TILDE","AMPERSAND_AMPERSAND","BAR_BAR","EQUALS","PLUS_EQUALS","MINUS_EQUALS","ASTERISK_EQUALS","ASTERISK_ASTERISK_EQUALS","SLASH_EQUALS","PERCENT_EQUALS","LESSTHAN_LESSTHAN_EQUALS","GREATERTHAN_GREATERTHAN_EQUALS","GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS","AMPERSAND_EQUALS","BAR_EQUALS","CARET_EQUALS","a","b","Tokenizer","tokenPos","nextToken","nextTokenPos","nextTokenOnNewLine","onComment","identifierHandling","unsafeNext","maxTokenLength","STRINGLITERAL","OPENPAREN","CLOSEPAREN","isDecimalDigit","FLOATLITERAL","DOT","commentStartPos","LINE","TRIPLE","closed","_0_expected","testInteger","INTEGERLITERAL","COLON","SEMICOLON","EQUALS_GREATERTHAN","QUESTION","OPENBRACKET","CLOSEBRACKET","OPENBRACE","CLOSEBRACE","AT","isIdentifierStart","isKeywordCharacter","posBefore","isIdentifierPart","keywordToken","ALWAYS","PREFER","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skipIdentifier","skip","skipIdentifierName","mark","state","reusableState","State","discard","reset","readIdentifier","quote","Unterminated_string_literal","readEscapeSequence","Unexpected_end_of_text","readExtendedUnicodeEscape","readUnicodeEscape","fromCharCode","readRegexpPattern","escaped","Unterminated_regular_expression_literal","readRegexpFlags","Invalid_regular_expression_flags","readInteger","readHexInteger","readBinaryInteger","readOctalInteger","isOctalDigit","Octal_literals_are_not_allowed_in_strict_mode","readDecimalInteger","i64_16","sepEnd","i64_add","i64_mul","Numeric_separators_are_not_allowed_here","Multiple_consecutive_numeric_separators_are_not_permitted","Hexadecimal_digit_expected","i64_10","Digit_expected","i64_8","Octal_digit_expected","i64_2","i64_1","Binary_digit_expected","readFloat","readDecimalFloat","parseFloat","readHexFloat","remain","value32","invalid","An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive","Unterminated_Unicode_escape_sequence","finish","builtins_1","program_1","Options","WASM32","importMemory","importTable","features","feature","Feature","ConversionKind","WrapMode","mangleImportName_moduleName","mangleImportName_elementName","Compiler","currentOuterFunction","currentEnum","currentType","memorySegments","stringSegments","functionTable","argcVar","argcSet","f32ModInstance","f64ModInstance","f32PowInstance","f64PowInstance","max","compile","startFunctionInstance","startFunctionBody","compileSource","funcRef","ensureFunctionType","i64_align","numPages","i64_shr_u","functionTableSize","functionTableExported","entries","compileSourceByPath","File_0_not_found","COMPILED","isGeneric","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","initExpr","Type_expected","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","Type_0_is_not_generic","inferredTypes","numTypeParameters","numParameterTypes","numArguments","argumentExprs","argumentExpression","inferredType","concreteType","compileCallIndirect","compileCall","checkCallSignature","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","inline","compileCallInlineUnchecked","numArgumentsInclThis","previousFlow","thisLocal","paramExpr","argumentLocal","bodyStatement","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","trampolineSignature","trampolineName","ofN","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","stringValue","stringSegment","stringLength","stringBuffer","stringOffset","stringType","elementType","isStatic","arrayInstance","arrayType","elementCount","nativeElementType","byteLength","Int32Array","Float32Array","Float64Array","usizeTypeSize","arraySize","bufferTotalSize","clz","data","writeI64","writeI32","writeF32","writeF64","nativeArrayType","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","currentClassInstance","makeAllocate","ifThenFlow","ifThenExpr","ifThenType","ifElseFlow","ifElseExpr","ifElseType","getValue","nativeOne","setValue","NegF32","NegF64","makeIsFalseish","ExtendI8ToI32","ExtendI16ToI32","compileAllocate","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","isInterface","Interface_declaration_cannot_have_implements_clause","parseClassMember","staticStart","staticEnd","abstractStart","abstractEnd","readonlyStart","readonlyEnd","setEnd","typeParametersStart","Type_parameters_cannot_appear_on_a_constructor_declaration","An_accessor_cannot_have_type_parameters","Type_annotation_cannot_appear_on_a_constructor_declaration","A_set_accessor_cannot_have_a_return_type_annotation","retMethod","Constructor_implementation_is_missing","retField","parseExportMember","asIdentifier","skipFrom","parseImportDeclaration","topLevel","parseBreak","parseContinue","parseDoStatement","parseForStatement","parseIfStatement","A_return_statement_can_only_be_used_within_a_function_body","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseVoidStatement","parseWhileStatement","parseExpressionStatement","elseStatement","case_","parseSwitchCase","_case_or_default_expected","parseExpressionStart","precedence","determinePrecedenceStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","PREFIX","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","nextPrecedence","determinePrecedence","commaExprs","isRightAssociative","propertyCall","Precedence","ExportsWalker","includePrivate","todo","walk","visitElement","visitGlobal","visitEnum","visitFunctionInstances","visitClassInstances","visitField","prop","hasCompiledMember","visitNamespace","visitFunction","visitClass","IDLBuilder","indentLevel","build","isConst","indent","typeToString","i64_to_string","members_1","members_1_1","visitInterface","TSDBuilder","numMembers","members_2","members_2_1","ctor","Decompiler","functionId","decompile","decompiler","decompileFunction","nativeTypeToType","decompileExpression","nested","string","Loop","Break","Switch","CallImport","CallIndirect","SetGlobal","Store","AbsF32","CeilF32","FloorF32","TruncF32","NearestF32","SqrtF32","ClzI64","CtzI64","PopcntI64","AbsF64","CeilF64","FloorF64","TruncF64","NearestF64","SqrtF64","ReinterpretF32","ReinterpretF64","ReinterpretI32","ReinterpretI64","RotlI32","RotrI32","RotlI64","RotrI64","CopysignF32","MinF32","MaxF32","CopysignF64","MinF64","MaxF64","Drop","Return","Host","CurrentMemory","GrowMemory","AtomicCmpxchg","AtomicRMW","AtomicWait","AtomicWake","Auto","decompiler_1","definitions_1","formatDiagnostic","parser_1","parser","nextDiagnostic","isInfo","isWarning","isError","createOptions","setTarget","setNoTreeShaking","setNoAssert","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","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","previousPrint","print","x","_BinaryenModulePrint","_BinaryenModulePrintAsmjs","globalScope","HEAP","HEAP_OFFSET","oldHeap","copyWithin","UnreachableError","captureStackTrace","stack","AssertionError","ASC_TARGET","defineProperties","writable","MIN_POSITIVE_VALUE","EPSILON","clz32","abs","trunc","round","sqrt","y","sign","isTrueish","undefined","fromCodePoint","Number","isInteger","isArray"],"mappings":"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E,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAEtCE,GACJ,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IACpB,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KACxB,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,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__23__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 28);\n","/**\r\n * Common constants.\r\n * @module common\r\n *//***/\r\n\r\n/** Indicates traits of a {@link Node} or {@link Element}. */\r\nexport enum CommonFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n\r\n // Basic modifiers\r\n\r\n /** Has an `import` modifier. */\r\n IMPORT = 1 << 0,\r\n /** Has an `export` modifier. */\r\n EXPORT = 1 << 1,\r\n /** Has a `declare` modifier. */\r\n DECLARE = 1 << 2,\r\n /** Has a `const` modifier. */\r\n CONST = 1 << 3,\r\n /** Has a `let` modifier. */\r\n LET = 1 << 4,\r\n /** Has a `static` modifier. */\r\n STATIC = 1 << 5,\r\n /** Has a `readonly` modifier. */\r\n READONLY = 1 << 6,\r\n /** Has an `abstract` modifier. */\r\n ABSTRACT = 1 << 7,\r\n /** Has a `public` modifier. */\r\n PUBLIC = 1 << 8,\r\n /** Has a `private` modifier. */\r\n PRIVATE = 1 << 9,\r\n /** Has a `protected` modifier. */\r\n PROTECTED = 1 << 10,\r\n /** Has a `get` modifier. */\r\n GET = 1 << 11,\r\n /** Has a `set` modifier. */\r\n SET = 1 << 12,\r\n\r\n // Extended modifiers usually derived from basic modifiers\r\n\r\n /** Is ambient, that is either declared or nested in a declared element. */\r\n AMBIENT = 1 << 13,\r\n /** Is generic. */\r\n GENERIC = 1 << 14,\r\n /** Is part of a generic context. */\r\n GENERIC_CONTEXT = 1 << 15,\r\n /** Is an instance member. */\r\n INSTANCE = 1 << 16,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 17,\r\n /** Is an arrow function. */\r\n ARROW = 1 << 18,\r\n /** Is a module export. */\r\n MODULE_EXPORT = 1 << 19,\r\n /** Is a module import. */\r\n MODULE_IMPORT = 1 << 20,\r\n\r\n // Compilation states\r\n\r\n /** Is a builtin. */\r\n BUILTIN = 1 << 21,\r\n /** Is compiled. */\r\n COMPILED = 1 << 22,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 23,\r\n /** Is scoped. */\r\n SCOPED = 1 << 24,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 25,\r\n /** Is a virtual method. */\r\n VIRTUAL = 1 << 26,\r\n /** Is the main function. */\r\n MAIN = 1 << 27\r\n}\r\n\r\n/** Path delimiter inserted between file system levels. */\r\nexport const PATH_DELIMITER = \"/\";\r\n/** Substitution used to indicate the parent directory. */\r\nexport const PARENT_SUBST = \"..\";\r\n/** Function name prefix used for getters. */\r\nexport const GETTER_PREFIX = \"get:\";\r\n/** Function name prefix used for setters. */\r\nexport const SETTER_PREFIX = \"set:\";\r\n/** Delimiter used between class names and instance members. */\r\nexport const INSTANCE_DELIMITER = \"#\";\r\n/** Delimiter used between class and namespace names and static members. */\r\nexport const STATIC_DELIMITER = \".\";\r\n/** Delimiter used between a function and its inner elements. */\r\nexport const INNER_DELIMITER = \"~\";\r\n/** Substitution used to indicate a library directory. */\r\nexport const LIBRARY_SUBST = \"~lib\";\r\n/** Library directory prefix. */\r\nexport const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER;\r\n/** Prefix used to indicate a filespace element. */\r\nexport const FILESPACE_PREFIX = \"file:\";\r\n","/**\r\n * Various compiler utilities.\r\n * @module util\r\n * @preferred\r\n *//***/\r\n\r\nexport * from \"./charcode\";\r\nexport * from \"./path\";\r\nexport * from \"./text\";\r\nexport * from \"./binary\";\r\n","/**\r\n * Shared diagnostic handling inherited by the parser and the compiler.\r\n * @module diagnostics\r\n * @preferred\r\n *//***/\r\n\r\nimport {\r\n Range\r\n} from \"./ast\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nimport {\r\n isLineBreak\r\n} from \"./util\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\n/** Indicates the category of a {@link DiagnosticMessage}. */\r\nexport enum DiagnosticCategory {\r\n /** Informatory message. */\r\n INFO,\r\n /** Warning message. */\r\n WARNING,\r\n /** Error message. */\r\n ERROR\r\n}\r\n\r\n/** Returns the string representation of the specified diagnostic category. */\r\nexport function diagnosticCategoryToString(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return \"INFO\";\r\n case DiagnosticCategory.WARNING: return \"WARNING\";\r\n case DiagnosticCategory.ERROR: return \"ERROR\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** ANSI escape sequence for blue foreground. */\r\nexport const COLOR_BLUE: string = \"\\u001b[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 * A thin wrapper around Binaryen's C-API.\r\n * @module module\r\n *//***/\r\n\r\nimport {\r\n Target\r\n} from \"./compiler\";\r\n\r\nexport type ModuleRef = usize;\r\nexport type FunctionTypeRef = usize;\r\nexport type FunctionRef = usize;\r\nexport type ExpressionRef = usize;\r\nexport type GlobalRef = usize;\r\nexport type ImportRef = usize;\r\nexport type ExportRef = usize;\r\nexport type Index = u32;\r\n\r\nexport enum NativeType {\r\n None = _BinaryenTypeNone(),\r\n I32 = _BinaryenTypeInt32(),\r\n I64 = _BinaryenTypeInt64(),\r\n F32 = _BinaryenTypeFloat32(),\r\n F64 = _BinaryenTypeFloat64(),\r\n Unreachable = _BinaryenTypeUnreachable(),\r\n Auto = _BinaryenTypeAuto()\r\n}\r\n\r\nexport enum ExpressionId {\r\n Invalid = _BinaryenInvalidId(),\r\n Block = _BinaryenBlockId(),\r\n If = _BinaryenIfId(),\r\n Loop = _BinaryenLoopId(),\r\n Break = _BinaryenBreakId(),\r\n Switch = _BinaryenSwitchId(),\r\n Call = _BinaryenCallId(),\r\n CallImport = _BinaryenCallImportId(),\r\n CallIndirect = _BinaryenCallIndirectId(),\r\n GetLocal = _BinaryenGetLocalId(),\r\n SetLocal = _BinaryenSetLocalId(),\r\n GetGlobal = _BinaryenGetGlobalId(),\r\n SetGlobal = _BinaryenSetGlobalId(),\r\n Load = _BinaryenLoadId(),\r\n Store = _BinaryenStoreId(),\r\n Const = _BinaryenConstId(),\r\n Unary = _BinaryenUnaryId(),\r\n Binary = _BinaryenBinaryId(),\r\n Select = _BinaryenSelectId(),\r\n Drop = _BinaryenDropId(),\r\n Return = _BinaryenReturnId(),\r\n Host = _BinaryenHostId(),\r\n Nop = _BinaryenNopId(),\r\n Unreachable = _BinaryenUnreachableId(),\r\n AtomicCmpxchg = _BinaryenAtomicCmpxchgId(),\r\n AtomicRMW = _BinaryenAtomicRMWId(),\r\n AtomicWait = _BinaryenAtomicWaitId(),\r\n AtomicWake = _BinaryenAtomicWakeId()\r\n}\r\n\r\nexport enum UnaryOp {\r\n ClzI32 = _BinaryenClzInt32(),\r\n CtzI32 = _BinaryenCtzInt32(),\r\n PopcntI32 = _BinaryenPopcntInt32(),\r\n NegF32 = _BinaryenNegFloat32(),\r\n AbsF32 = _BinaryenAbsFloat32(),\r\n CeilF32 = _BinaryenCeilFloat32(),\r\n FloorF32 = _BinaryenFloorFloat32(),\r\n TruncF32 = _BinaryenTruncFloat32(),\r\n NearestF32 = _BinaryenNearestFloat32(),\r\n SqrtF32 = _BinaryenSqrtFloat32(),\r\n EqzI32 = _BinaryenEqZInt32(),\r\n ClzI64 = _BinaryenClzInt64(),\r\n CtzI64 = _BinaryenCtzInt64(),\r\n PopcntI64 = _BinaryenPopcntInt64(),\r\n NegF64 = _BinaryenNegFloat64(),\r\n AbsF64 = _BinaryenAbsFloat64(),\r\n CeilF64 = _BinaryenCeilFloat64(),\r\n FloorF64 = _BinaryenFloorFloat64(),\r\n TruncF64 = _BinaryenTruncFloat64(),\r\n NearestF64 = _BinaryenNearestFloat64(),\r\n SqrtF64 = _BinaryenSqrtFloat64(),\r\n EqzI64 = _BinaryenEqZInt64(),\r\n ExtendI32 = _BinaryenExtendSInt32(),\r\n ExtendU32 = _BinaryenExtendUInt32(),\r\n WrapI64 = _BinaryenWrapInt64(),\r\n TruncF32ToI32 = _BinaryenTruncSFloat32ToInt32(),\r\n TruncF32ToI64 = _BinaryenTruncSFloat32ToInt64(),\r\n TruncF32ToU32 = _BinaryenTruncUFloat32ToInt32(),\r\n TruncF32ToU64 = _BinaryenTruncUFloat32ToInt64(),\r\n TruncF64ToI32 = _BinaryenTruncSFloat64ToInt32(),\r\n TruncF64ToI64 = _BinaryenTruncSFloat64ToInt64(),\r\n TruncF64ToU32 = _BinaryenTruncUFloat64ToInt32(),\r\n TruncF64ToU64 = _BinaryenTruncUFloat64ToInt64(),\r\n ReinterpretF32 = _BinaryenReinterpretFloat32(),\r\n ReinterpretF64 = _BinaryenReinterpretFloat64(),\r\n ConvertI32ToF32 = _BinaryenConvertSInt32ToFloat32(),\r\n ConvertI32ToF64 = _BinaryenConvertSInt32ToFloat64(),\r\n ConvertU32ToF32 = _BinaryenConvertUInt32ToFloat32(),\r\n ConvertU32ToF64 = _BinaryenConvertUInt32ToFloat64(),\r\n ConvertI64ToF32 = _BinaryenConvertSInt64ToFloat32(),\r\n ConvertI64ToF64 = _BinaryenConvertSInt64ToFloat64(),\r\n ConvertU64ToF32 = _BinaryenConvertUInt64ToFloat32(),\r\n ConvertU64ToF64 = _BinaryenConvertUInt64ToFloat64(),\r\n PromoteF32 = _BinaryenPromoteFloat32(),\r\n DemoteF64 = _BinaryenDemoteFloat64(),\r\n ReinterpretI32 = _BinaryenReinterpretInt32(),\r\n ReinterpretI64 = _BinaryenReinterpretInt64(),\r\n\r\n // see: https://github.com/WebAssembly/sign-extension-ops\r\n ExtendI8ToI32 = _BinaryenExtendS8Int32(),\r\n ExtendI16ToI32 = _BinaryenExtendS16Int32(),\r\n ExtendI8ToI64 = _BinaryenExtendS8Int64(),\r\n ExtendI16ToI64 = _BinaryenExtendS16Int64(),\r\n ExtendI32ToI64 = _BinaryenExtendS32Int64()\r\n\r\n // see: https://github.com/WebAssembly/nontrapping-float-to-int-conversions\r\n // TruncF32ToI32Sat\r\n // TruncF32ToU32Sat\r\n // TruncF64ToI32Sat\r\n // TruncF64ToU32Sat\r\n // TruncF32ToI64Sat\r\n // TruncF32ToU64Sat\r\n // TruncF64ToI64Sat\r\n // TruncF64ToU64Sat\r\n}\r\n\r\nexport enum BinaryOp {\r\n AddI32 = _BinaryenAddInt32(),\r\n SubI32 = _BinaryenSubInt32(),\r\n MulI32 = _BinaryenMulInt32(),\r\n DivI32 = _BinaryenDivSInt32(),\r\n DivU32 = _BinaryenDivUInt32(),\r\n RemI32 = _BinaryenRemSInt32(),\r\n RemU32 = _BinaryenRemUInt32(),\r\n AndI32 = _BinaryenAndInt32(),\r\n OrI32 = _BinaryenOrInt32(),\r\n XorI32 = _BinaryenXorInt32(),\r\n ShlI32 = _BinaryenShlInt32(),\r\n ShrU32 = _BinaryenShrUInt32(),\r\n ShrI32 = _BinaryenShrSInt32(),\r\n RotlI32 = _BinaryenRotLInt32(),\r\n RotrI32 = _BinaryenRotRInt32(),\r\n EqI32 = _BinaryenEqInt32(),\r\n NeI32 = _BinaryenNeInt32(),\r\n LtI32 = _BinaryenLtSInt32(),\r\n LtU32 = _BinaryenLtUInt32(),\r\n LeI32 = _BinaryenLeSInt32(),\r\n LeU32 = _BinaryenLeUInt32(),\r\n GtI32 = _BinaryenGtSInt32(),\r\n GtU32 = _BinaryenGtUInt32(),\r\n GeI32 = _BinaryenGeSInt32(),\r\n GeU32 = _BinaryenGeUInt32(),\r\n AddI64 = _BinaryenAddInt64(),\r\n SubI64 = _BinaryenSubInt64(),\r\n MulI64 = _BinaryenMulInt64(),\r\n DivI64 = _BinaryenDivSInt64(),\r\n DivU64 = _BinaryenDivUInt64(),\r\n RemI64 = _BinaryenRemSInt64(),\r\n RemU64 = _BinaryenRemUInt64(),\r\n AndI64 = _BinaryenAndInt64(),\r\n OrI64 = _BinaryenOrInt64(),\r\n XorI64 = _BinaryenXorInt64(),\r\n ShlI64 = _BinaryenShlInt64(),\r\n ShrU64 = _BinaryenShrUInt64(),\r\n ShrI64 = _BinaryenShrSInt64(),\r\n RotlI64 = _BinaryenRotLInt64(),\r\n RotrI64 = _BinaryenRotRInt64(),\r\n EqI64 = _BinaryenEqInt64(),\r\n NeI64 = _BinaryenNeInt64(),\r\n LtI64 = _BinaryenLtSInt64(),\r\n LtU64 = _BinaryenLtUInt64(),\r\n LeI64 = _BinaryenLeSInt64(),\r\n LeU64 = _BinaryenLeUInt64(),\r\n GtI64 = _BinaryenGtSInt64(),\r\n GtU64 = _BinaryenGtUInt64(),\r\n GeI64 = _BinaryenGeSInt64(),\r\n GeU64 = _BinaryenGeUInt64(),\r\n AddF32 = _BinaryenAddFloat32(),\r\n SubF32 = _BinaryenSubFloat32(),\r\n MulF32 = _BinaryenMulFloat32(),\r\n DivF32 = _BinaryenDivFloat32(),\r\n CopysignF32 = _BinaryenCopySignFloat32(),\r\n MinF32 = _BinaryenMinFloat32(),\r\n MaxF32 = _BinaryenMaxFloat32(),\r\n EqF32 = _BinaryenEqFloat32(),\r\n NeF32 = _BinaryenNeFloat32(),\r\n LtF32 = _BinaryenLtFloat32(),\r\n LeF32 = _BinaryenLeFloat32(),\r\n GtF32 = _BinaryenGtFloat32(),\r\n GeF32 = _BinaryenGeFloat32(),\r\n AddF64 = _BinaryenAddFloat64(),\r\n SubF64 = _BinaryenSubFloat64(),\r\n MulF64 = _BinaryenMulFloat64(),\r\n DivF64 = _BinaryenDivFloat64(),\r\n CopysignF64 = _BinaryenCopySignFloat64(),\r\n MinF64 = _BinaryenMinFloat64(),\r\n MaxF64 = _BinaryenMaxFloat64(),\r\n EqF64 = _BinaryenEqFloat64(),\r\n NeF64 = _BinaryenNeFloat64(),\r\n LtF64 = _BinaryenLtFloat64(),\r\n LeF64 = _BinaryenLeFloat64(),\r\n GtF64 = _BinaryenGtFloat64(),\r\n GeF64 = _BinaryenGeFloat64()\r\n}\r\n\r\nexport enum HostOp {\r\n PageSize = _BinaryenPageSize(),\r\n CurrentMemory = _BinaryenCurrentMemory(),\r\n GrowMemory = _BinaryenGrowMemory(),\r\n HasFeature = _BinaryenHasFeature(),\r\n\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n // MoveMemory\r\n // SetMemory\r\n}\r\n\r\nexport enum AtomicRMWOp {\r\n Add = _BinaryenAtomicRMWAdd(),\r\n Sub = _BinaryenAtomicRMWSub(),\r\n And = _BinaryenAtomicRMWAnd(),\r\n Or = _BinaryenAtomicRMWOr(),\r\n Xor = _BinaryenAtomicRMWXor(),\r\n Xchg = _BinaryenAtomicRMWXchg()\r\n}\r\n\r\nexport class MemorySegment {\r\n\r\n buffer: Uint8Array;\r\n offset: I64;\r\n\r\n static create(buffer: Uint8Array, offset: I64): MemorySegment {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n }\r\n}\r\n\r\nexport class Module {\r\n\r\n ref: ModuleRef;\r\n\r\n private cachedByValue: usize;\r\n\r\n /** Maximum number of pages when targeting WASM32. */\r\n static readonly MAX_MEMORY_WASM32: Index = 0xffff;\r\n\r\n /** Maximum number of pages when targeting WASM64. */\r\n static readonly MAX_MEMORY_WASM64: Index = 0xffff; // TODO\r\n\r\n static create(): Module {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.cachedByValue = allocate_memory(16);\r\n return module;\r\n }\r\n\r\n static createFrom(buffer: Uint8Array): Module {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.cachedByValue = allocate_memory(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n free_memory(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeFunctionType(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunctionType(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocPtrArray(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, numNames, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) free_memory(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallImport(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCallImport(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocPtrArray(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[] | null,\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes ? varTypes.length : 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n private cachedTemporaryName: usize = 0;\r\n private hasTemporaryFunction: bool = false;\r\n\r\n addTemporaryFunction(result: NativeType, paramTypes: NativeType[] | null, body: ExpressionRef): FunctionRef {\r\n this.hasTemporaryFunction = assert(!this.hasTemporaryFunction);\r\n var tempName = this.cachedTemporaryName;\r\n if (!tempName) this.cachedTemporaryName = tempName = allocString(\"\"); // works because strings are interned\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n let typeRef = _BinaryenAddFunctionType(this.ref, tempName, result, cArr, paramTypes ? paramTypes.length : 0);\r\n return _BinaryenAddFunction(this.ref, tempName, typeRef, 0, 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeTemporaryFunction(): void {\r\n this.hasTemporaryFunction = !assert(this.hasTemporaryFunction);\r\n var tempName = assert(this.cachedTemporaryName);\r\n _BinaryenRemoveFunction(this.ref, tempName);\r\n _BinaryenRemoveFunctionType(this.ref, tempName);\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeImport(internalName: string): void {\r\n var cStr = allocString(internalName);\r\n try {\r\n _BinaryenRemoveImport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n free_memory(cArr3);\r\n free_memory(cArr2);\r\n free_memory(cArr1);\r\n for (let i = k - 1; i >= 0; --i) free_memory(segs[i]);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(funcs: FunctionRef[]): void {\r\n var cArr = allocPtrArray(funcs);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, funcs.length);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n free_memory(cArr);\r\n for (let i = numNames; i >= 0; --i) {\r\n free_memory(names[i]);\r\n }\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0;\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeFunction(func: FunctionRef): void {\r\n var names = this.cachedPrecomputeNames;\r\n if (!names) {\r\n let name = allocString(\"precompute\");\r\n this.cachedPrecomputeName = name;\r\n this.cachedPrecomputeNames = names = allocI32Array([ name ]);\r\n }\r\n _BinaryenFunctionRunPasses(func, this.ref, names, 1);\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): BinaryModule {\r\n var out = this.cachedByValue;\r\n var cStr = allocString(sourceMapUrl);\r\n var binaryPtr: usize = 0;\r\n var sourceMapPtr: usize = 0;\r\n try {\r\n _BinaryenModuleAllocateAndWrite(out, this.ref, cStr);\r\n binaryPtr = readInt(out);\r\n let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let ret = new BinaryModule();\r\n ret.output = readBuffer(binaryPtr, binaryBytes);\r\n ret.sourceMap = readString(sourceMapPtr);\r\n return ret;\r\n } finally {\r\n if (cStr) free_memory(cStr);\r\n if (binaryPtr) free_memory(binaryPtr);\r\n if (sourceMapPtr) free_memory(sourceMapPtr);\r\n }\r\n }\r\n\r\n toText(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n toAsmjs(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n dispose(): void {\r\n assert(this.ref);\r\n free_memory(this.cachedByValue);\r\n free_memory(this.cachedTemporaryName);\r\n free_memory(this.cachedPrecomputeName);\r\n free_memory(this.cachedPrecomputeNames);\r\n _BinaryenModuleDispose(this.ref);\r\n this.ref = 0;\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(\r\n expr: ExpressionRef,\r\n noSideEffects: bool = false,\r\n maxDepth: i32 = i32.MAX_VALUE\r\n ): ExpressionRef { // currently supports side effect free expressions only\r\n if (maxDepth < 0) return 0;\r\n maxDepth -= 1;\r\n\r\n var nested1: ExpressionRef,\r\n nested2: ExpressionRef;\r\n\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n }\r\n case ExpressionId.GetLocal: {\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n }\r\n case ExpressionId.GetGlobal: {\r\n let globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n }\r\n case ExpressionId.Load: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return (\r\n _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n );\r\n }\r\n case ExpressionId.Unary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n }\r\n case ExpressionId.Binary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\n// expressions\r\n\r\nexport function getExpressionId(expr: ExpressionRef): ExpressionId {\r\n return _BinaryenExpressionGetId(expr);\r\n}\r\n\r\nexport function getExpressionType(expr: ExpressionRef): NativeType {\r\n return _BinaryenExpressionGetType(expr);\r\n}\r\n\r\nexport function getConstValueI32(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI32(expr);\r\n}\r\n\r\nexport function getConstValueI64Low(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64Low(expr);\r\n}\r\n\r\nexport function getConstValueI64High(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64High(expr);\r\n}\r\n\r\nexport function getConstValueF32(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF32(expr);\r\n}\r\n\r\nexport function getConstValueF64(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF64(expr);\r\n}\r\n\r\nexport function getGetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenGetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenSetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSetLocalGetValue(expr);\r\n}\r\n\r\nexport function isTeeLocal(expr: ExpressionRef): bool {\r\n return _BinaryenSetLocalIsTee(expr);\r\n}\r\n\r\nexport function getBinaryOp(expr: ExpressionRef): BinaryOp {\r\n return _BinaryenBinaryGetOp(expr);\r\n}\r\n\r\nexport function getBinaryLeft(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetLeft(expr);\r\n}\r\n\r\nexport function getBinaryRight(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetRight(expr);\r\n}\r\n\r\nexport function getUnaryOp(expr: ExpressionRef): UnaryOp {\r\n return _BinaryenUnaryGetOp(expr);\r\n}\r\n\r\nexport function getUnaryValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenUnaryGetValue(expr);\r\n}\r\n\r\nexport function getLoadBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetBytes(expr);\r\n}\r\n\r\nexport function getLoadOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetOffset(expr);\r\n}\r\n\r\nexport function getLoadPtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoadGetPtr(expr);\r\n}\r\n\r\nexport function isLoadSigned(expr: ExpressionRef): bool {\r\n return _BinaryenLoadIsSigned(expr);\r\n}\r\n\r\nexport function getStoreBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetBytes(expr);\r\n}\r\n\r\nexport function getStoreOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetOffset(expr);\r\n}\r\n\r\nexport function getStorePtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetPtr(expr);\r\n}\r\n\r\nexport function getStoreValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetValue(expr);\r\n}\r\n\r\nexport function getBlockName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBlockGetName(expr));\r\n}\r\n\r\nexport function getBlockChildCount(expr: ExpressionRef): Index {\r\n return _BinaryenBlockGetNumChildren(expr);\r\n}\r\n\r\nexport function getBlockChild(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenBlockGetChild(expr, index);\r\n}\r\n\r\nexport function getIfCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetCondition(expr);\r\n}\r\n\r\nexport function getIfTrue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfTrue(expr);\r\n}\r\n\r\nexport function getIfFalse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfFalse(expr);\r\n}\r\n\r\nexport function getLoopName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenLoopGetName(expr));\r\n}\r\n\r\nexport function getLoopBody(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoopGetBody(expr);\r\n}\r\n\r\nexport function getBreakName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBreakGetName(expr));\r\n}\r\n\r\nexport function getBreakCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBreakGetCondition(expr);\r\n}\r\n\r\nexport function getSelectThen(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfTrue(expr);\r\n}\r\n\r\nexport function getSelectElse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfFalse(expr);\r\n}\r\n\r\nexport function getSelectCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetCondition(expr);\r\n}\r\n\r\nexport function getDropValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenDropGetValue(expr);\r\n}\r\n\r\nexport function getReturnValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenReturnGetValue(expr);\r\n}\r\n\r\nexport function getCallTarget(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenCallGetTarget(expr));\r\n}\r\n\r\nexport function getHostOp(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenHostGetOp(expr);\r\n}\r\n\r\nexport function getHostOperandCount(expr: ExpressionRef): Index {\r\n return _BinaryenHostGetNumOperands(expr);\r\n}\r\n\r\nexport function getHostOperand(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenHostGetOperand(expr, index);\r\n}\r\n\r\nexport function getHostName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenHostGetNameOperand(expr));\r\n}\r\n\r\n// functions\r\n\r\nexport function getFunctionBody(func: FunctionRef): ExpressionRef {\r\n return _BinaryenFunctionGetBody(func);\r\n}\r\n\r\nexport function getFunctionName(func: FunctionRef): string | null {\r\n return readString(_BinaryenFunctionGetName(func));\r\n}\r\n\r\nexport function getFunctionParamCount(func: FunctionRef): Index {\r\n return _BinaryenFunctionGetNumParams(func);\r\n}\r\n\r\nexport function getFunctionParamType(func: FunctionRef, index: Index): NativeType {\r\n return _BinaryenFunctionGetParam(func, index);\r\n}\r\n\r\nexport function getFunctionResultType(func: FunctionRef): NativeType {\r\n return _BinaryenFunctionGetResult(func);\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n }\r\n\r\n private constructor() {}\r\n\r\n addBlock(code: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlock(this.ref, code);\r\n }\r\n\r\n addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void {\r\n _RelooperAddBranch(from, to, condition, code);\r\n }\r\n\r\n addBlockWithSwitch(code: ExpressionRef, condition: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n }\r\n\r\n addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n }\r\n}\r\n\r\n// export function hasSideEffects(expr: ExpressionRef): bool {\r\n// switch (_BinaryenExpressionGetId(expr = getPtr(expr))) {\r\n// case ExpressionId.GetLocal:\r\n// case ExpressionId.GetGlobal:\r\n// case ExpressionId.Const:\r\n// case ExpressionId.Nop:\r\n// case ExpressionId.Unreachable: {\r\n// return false;\r\n// }\r\n// case ExpressionId.Block: {\r\n// for (let i = 0, k = _BinaryenBlockGetNumChildren(expr); i < k; ++i) {\r\n// if (hasSideEffects(_BinaryenBlockGetChild(expr, i))) return true;\r\n// }\r\n// return false;\r\n// }\r\n// case ExpressionId.If: {\r\n// return hasSideEffects(_BinaryenIfGetCondition(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfFalse(expr));\r\n// }\r\n// case ExpressionId.Unary: {\r\n// return hasSideEffects(_BinaryenUnaryGetValue(expr));\r\n// }\r\n// case ExpressionId.Binary: {\r\n// return hasSideEffects(_BinaryenBinaryGetLeft(expr))\r\n// || hasSideEffects(_BinaryenBinaryGetRight(expr));\r\n// }\r\n// case ExpressionId.Drop: {\r\n// return hasSideEffects(_BinaryenDropGetValue(expr));\r\n// }\r\n// case ExpressionId.Select: {\r\n// return hasSideEffects(_BinaryenSelectGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenSelectGetIfFalse(expr))\r\n// || hasSideEffects(_BinaryenSelectGetCondition(expr));\r\n// }\r\n// }\r\n// return true;\r\n// }\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var numValues = u8s.length;\r\n var ptr = allocate_memory(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = allocate_memory(i32s.length << 2);\r\n var idx = ptr;\r\n for (let i = 0, k = i32s.length; i < k; ++i) {\r\n let val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocPtrArray(ptrs: usize[] | null): usize {\r\n return allocI32Array(ptrs); // TODO: WASM64 one day\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = allocate_memory(stringLengthUTF8(str) + 1);\r\n // the following is based on Emscripten's stringToUTF8Array\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\nfunction readInt(ptr: usize): i32 {\r\n return (\r\n load(ptr ) |\r\n (load(ptr + 1) << 8) |\r\n (load(ptr + 2) << 16) |\r\n (load(ptr + 3) << 24)\r\n );\r\n}\r\n\r\nfunction readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (let i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n arr.push(cp);\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\nexport class BinaryModule {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n","/**\r\n * Abstract syntax tree representing a source file once parsed.\r\n * @module ast\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX\r\n} from \"./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 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 createCommaExpression(\r\n expressions: Expression[],\r\n range: Range\r\n ): CommaExpression {\r\n var expr = new CommaExpression();\r\n expr.range = range;\r\n expr.expressions = expressions; setParent(expressions, expr);\r\n return expr;\r\n }\r\n\r\n static createConstructorExpression(\r\n range: Range\r\n ): ConstructorExpression {\r\n var expr = new ConstructorExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createElementAccessExpression(\r\n expression: Expression,\r\n element: Expression,\r\n range: Range\r\n ): ElementAccessExpression {\r\n var expr = new ElementAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.elementExpression = element; element.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createFalseExpression(\r\n range: Range\r\n ): FalseExpression {\r\n var expr = new FalseExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createFloatLiteralExpression(\r\n value: f64,\r\n range: Range\r\n ): FloatLiteralExpression {\r\n var expr = new FloatLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createFunctionExpression(\r\n declaration: FunctionDeclaration\r\n ): FunctionExpression {\r\n var expr = new FunctionExpression();\r\n expr.flags = declaration.flags & CommonFlags.ARROW;\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createInstanceOfExpression(\r\n expression: Expression,\r\n isType: CommonTypeNode,\r\n range: Range\r\n ): InstanceOfExpression {\r\n var expr = new InstanceOfExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.isType = isType; isType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createIntegerLiteralExpression(\r\n value: I64,\r\n range: Range\r\n ): IntegerLiteralExpression {\r\n var expr = new IntegerLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createNewExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): NewExpression {\r\n var expr = new NewExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createNullExpression(\r\n range: Range\r\n ): NullExpression {\r\n var expr = new NullExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createParenthesizedExpression(\r\n expression: Expression,\r\n range: Range\r\n ): ParenthesizedExpression {\r\n var expr = new ParenthesizedExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createPropertyAccessExpression(\r\n expression: Expression,\r\n property: IdentifierExpression,\r\n range: Range\r\n ): PropertyAccessExpression {\r\n var expr = new PropertyAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.property = property; property.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createRegexpLiteralExpression(\r\n pattern: string,\r\n flags: string,\r\n range: Range\r\n ): RegexpLiteralExpression {\r\n var expr = new RegexpLiteralExpression();\r\n expr.range = range;\r\n expr.pattern = pattern;\r\n expr.patternFlags = flags;\r\n return expr;\r\n }\r\n\r\n static createTernaryExpression(\r\n condition: Expression,\r\n ifThen: Expression,\r\n ifElse: Expression,\r\n range: Range\r\n ): TernaryExpression {\r\n var expr = new TernaryExpression();\r\n expr.range = range;\r\n expr.condition = condition; condition.parent = expr;\r\n expr.ifThen = ifThen; ifThen.parent = expr;\r\n expr.ifElse = ifElse; ifElse.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createStringLiteralExpression(\r\n value: string,\r\n range: Range\r\n ): StringLiteralExpression {\r\n var expr = new StringLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createSuperExpression(\r\n range: Range\r\n ): SuperExpression {\r\n var expr = new SuperExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createThisExpression(\r\n range: Range\r\n ): ThisExpression {\r\n var expr = new ThisExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createTrueExpression(\r\n range: Range\r\n ): TrueExpression {\r\n var expr = new TrueExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createUnaryPostfixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPostfixExpression {\r\n var expr = new UnaryPostfixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createUnaryPrefixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPrefixExpression {\r\n var expr = new UnaryPrefixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n // statements\r\n\r\n static createBlockStatement(\r\n statements: Statement[],\r\n range: Range\r\n ): BlockStatement {\r\n var stmt = new BlockStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createBreakStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): BreakStatement {\r\n var stmt = new BreakStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createClassDeclaration(\r\n identifier: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n implementsTypes: TypeNode[] | null, // can't be functions\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ClassDeclaration {\r\n var stmt = new ClassDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = identifier; identifier.parent = stmt;\r\n stmt.typeParameters = typeParameters; setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.implementsTypes = implementsTypes; if (implementsTypes) setParent(implementsTypes, stmt);\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createContinueStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): ContinueStatement {\r\n var stmt = new ContinueStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createDoStatement(\r\n statement: Statement,\r\n condition: Expression,\r\n range: Range\r\n ): DoStatement {\r\n var stmt = new DoStatement();\r\n stmt.range = range;\r\n stmt.statement = statement; statement.parent = stmt;\r\n stmt.condition = condition; condition.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createEmptyStatement(\r\n range: Range\r\n ): EmptyStatement {\r\n var stmt = new EmptyStatement();\r\n stmt.range = range;\r\n return stmt;\r\n }\r\n\r\n static createEnumDeclaration(\r\n name: IdentifierExpression,\r\n members: EnumValueDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumDeclaration {\r\n var stmt = new EnumDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.values = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createEnumValueDeclaration(\r\n name: IdentifierExpression,\r\n value: Expression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumValueDeclaration {\r\n var stmt = new EnumValueDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportStatement(\r\n members: ExportMember[] | null,\r\n path: StringLiteralExpression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ExportStatement {\r\n var stmt = new ExportStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.members = members; if (members) setParent(members, stmt);\r\n stmt.path = path;\r\n if (path) {\r\n let normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n } else {\r\n stmt.normalizedPath = null;\r\n stmt.internalPath = null;\r\n }\r\n return stmt;\r\n }\r\n\r\n static createExportImportStatement(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression,\r\n range: Range\r\n ): ExportImportStatement {\r\n var stmt = new ExportImportStatement();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.externalName = externalName; externalName.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportMember(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression | null,\r\n range: Range\r\n ): ExportMember {\r\n var elem = new ExportMember();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n if (!externalName) {\r\n externalName = name;\r\n } else {\r\n externalName.parent = elem;\r\n }\r\n elem.externalName = externalName;\r\n return elem;\r\n }\r\n\r\n static createExpressionStatement(\r\n expression: Expression\r\n ): ExpressionStatement {\r\n var stmt = new ExpressionStatement();\r\n stmt.range = expression.range;\r\n stmt.expression = expression; expression.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createIfStatement(\r\n condition: Expression,\r\n ifTrue: Statement,\r\n ifFalse: Statement | null,\r\n range: Range\r\n ): IfStatement {\r\n var stmt = new IfStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.ifTrue = ifTrue; ifTrue.parent = stmt;\r\n stmt.ifFalse = ifFalse; if (ifFalse) ifFalse.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createImportStatement(\r\n decls: ImportDeclaration[] | null,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = decls; if (decls) setParent(decls, stmt);\r\n stmt.namespaceName = null;\r\n stmt.path = path;\r\n var normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative in project\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute in library\r\n if (!normalizedPath.startsWith(LIBRARY_PREFIX)) {\r\n normalizedPath = LIBRARY_PREFIX + normalizedPath;\r\n }\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportStatementWithWildcard(\r\n identifier: IdentifierExpression,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = null;\r\n stmt.namespaceName = identifier;\r\n stmt.path = path;\r\n stmt.normalizedPath = resolvePath(\r\n normalizePath(path.value),\r\n range.source.normalizedPath\r\n );\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportDeclaration(\r\n externalName: IdentifierExpression,\r\n name: IdentifierExpression | null,\r\n range: Range\r\n ): ImportDeclaration {\r\n var elem = new ImportDeclaration();\r\n elem.range = range;\r\n elem.externalName = externalName; externalName.parent = elem;\r\n if (!name) {\r\n name = externalName;\r\n } else {\r\n name.parent = elem;\r\n }\r\n elem.name = name;\r\n return elem;\r\n }\r\n\r\n static createInterfaceDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): InterfaceDeclaration {\r\n var stmt = new InterfaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createFieldDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FieldDeclaration {\r\n var stmt = new FieldDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.type = type; if (type) type.parent = stmt;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createForStatement(\r\n initializer: Statement | null,\r\n condition: Expression | null,\r\n incrementor: Expression | null,\r\n statement: Statement,\r\n range: Range\r\n ): ForStatement {\r\n var stmt = new ForStatement();\r\n stmt.range = range;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.condition = condition; if (condition) condition.parent = stmt;\r\n stmt.incrementor = incrementor; if (incrementor) incrementor.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FunctionDeclaration {\r\n var stmt = new FunctionDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createMethodDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): MethodDeclaration {\r\n var stmt = new MethodDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): NamespaceDeclaration {\r\n var stmt = new NamespaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createReturnStatement(\r\n value: Expression | null,\r\n range: Range\r\n ): ReturnStatement {\r\n var stmt = new ReturnStatement();\r\n stmt.range = range;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createSwitchStatement(\r\n condition: Expression,\r\n cases: SwitchCase[],\r\n range: Range\r\n ): SwitchStatement {\r\n var stmt = new SwitchStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.cases = cases; setParent(cases, stmt);\r\n return stmt;\r\n }\r\n\r\n static createSwitchCase(\r\n label: Expression | null,\r\n statements: Statement[],\r\n range: Range\r\n ): SwitchCase {\r\n var elem = new SwitchCase();\r\n elem.range = range;\r\n elem.label = label; if (label) label.parent = elem;\r\n elem.statements = statements; setParent(statements, elem);\r\n return elem;\r\n }\r\n\r\n static createThrowStatement(\r\n value: Expression,\r\n range: Range\r\n ): ThrowStatement {\r\n var stmt = new ThrowStatement();\r\n stmt.range = range;\r\n stmt.value = value; value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createTryStatement(\r\n statements: Statement[],\r\n catchVariable: IdentifierExpression | null,\r\n catchStatements: Statement[] | null,\r\n finallyStatements: Statement[] | null,\r\n range: Range\r\n ): TryStatement {\r\n var stmt = new TryStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n stmt.catchVariable = catchVariable;\r\n if (catchVariable) catchVariable.parent = stmt;\r\n stmt.catchStatements = catchStatements;\r\n if (catchStatements) setParent(catchStatements, stmt);\r\n stmt.finallyStatements = finallyStatements;\r\n if (finallyStatements) setParent(finallyStatements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createTypeDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n alias: CommonTypeNode,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): TypeDeclaration {\r\n var stmt = new TypeDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.type = alias; alias.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableStatement(\r\n declarations: VariableDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableStatement {\r\n var stmt = new VariableStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.declarations = declarations; setParent(declarations, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableDeclaration {\r\n var elem = new VariableDeclaration();\r\n elem.range = range;\r\n elem.flags = flags;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.decorators = decorators; // inherited\r\n return elem;\r\n }\r\n\r\n static createVoidStatement(\r\n expression: Expression,\r\n range: Range\r\n ): VoidStatement {\r\n var stmt = new VoidStatement();\r\n stmt.range = range;\r\n stmt.expression = expression;\r\n return stmt;\r\n }\r\n\r\n static createWhileStatement(\r\n condition: Expression,\r\n statement: Statement,\r\n range: Range\r\n ): WhileStatement {\r\n var stmt = new WhileStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n}\r\n\r\n// types\r\n\r\nexport abstract class CommonTypeNode extends Node {\r\n // kind varies\r\n\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type annotation. */\r\nexport class TypeNode extends CommonTypeNode {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: CommonTypeNode[] | null;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameterNode extends Node {\r\n kind = NodeKind.TYPEPARAMETER;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Extended type reference, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n}\r\n\r\n/** Represents the kind of a parameter. */\r\nexport enum ParameterKind {\r\n /** No specific flags. */\r\n DEFAULT,\r\n /** Is an optional parameter. */\r\n OPTIONAL,\r\n /** Is a rest parameter. */\r\n REST\r\n}\r\n\r\n/** Represents a function parameter. */\r\nexport class ParameterNode extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: CommonTypeNode;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n /** Implicit field declaration, if applicable. */\r\n implicitFieldDeclaration: FieldDeclaration | null = null;\r\n}\r\n\r\n/** Represents a function signature. */\r\nexport class SignatureNode extends CommonTypeNode {\r\n kind = NodeKind.SIGNATURE;\r\n\r\n /** Accepted parameters. */\r\n parameters: ParameterNode[];\r\n /** Return type. */\r\n returnType: CommonTypeNode;\r\n /** Explicitly provided this type, if any. */\r\n explicitThisType: TypeNode | null; // can't be a function\r\n}\r\n\r\n// special\r\n\r\n/** Built-in decorator kinds. */\r\nexport enum DecoratorKind {\r\n CUSTOM,\r\n GLOBAL,\r\n OPERATOR,\r\n OPERATOR_BINARY,\r\n OPERATOR_PREFIX,\r\n OPERATOR_POSTFIX,\r\n UNMANAGED,\r\n SEALED,\r\n INLINE,\r\n EXTERNAL\r\n}\r\n\r\n/** Returns the kind of the specified decorator. Defaults to {@link DecoratorKind.CUSTOM}. */\r\nexport function decoratorNameToKind(name: Expression): DecoratorKind {\r\n // @global, @inline, @operator, @sealed, @unmanaged\r\n if (name.kind == NodeKind.IDENTIFIER) {\r\n let nameStr = (name).text;\r\n assert(nameStr.length);\r\n switch (nameStr.charCodeAt(0)) {\r\n case CharCode.e: {\r\n if (nameStr == \"external\") return DecoratorKind.EXTERNAL;\r\n break;\r\n }\r\n case CharCode.g: {\r\n if (nameStr == \"global\") return DecoratorKind.GLOBAL;\r\n break;\r\n }\r\n case CharCode.i: {\r\n if (nameStr == \"inline\") return DecoratorKind.INLINE;\r\n break;\r\n }\r\n case CharCode.o: {\r\n if (nameStr == \"operator\") return DecoratorKind.OPERATOR;\r\n break;\r\n }\r\n case CharCode.s: {\r\n if (nameStr == \"sealed\") return DecoratorKind.SEALED;\r\n break;\r\n }\r\n case CharCode.u: {\r\n if (nameStr == \"unmanaged\") return DecoratorKind.UNMANAGED;\r\n break;\r\n }\r\n }\r\n } else if (\r\n name.kind == NodeKind.PROPERTYACCESS &&\r\n (name).expression.kind == NodeKind.IDENTIFIER\r\n ) {\r\n let nameStr = ((name).expression).text;\r\n assert(nameStr.length);\r\n let propStr = (name).property.text;\r\n assert(propStr.length);\r\n // @operator.binary, @operator.prefix, @operator.postfix\r\n if (nameStr == \"operator\") {\r\n switch (propStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (propStr == \"binary\") return DecoratorKind.OPERATOR_BINARY;\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (propStr) {\r\n case \"prefix\": return DecoratorKind.OPERATOR_PREFIX;\r\n case \"postfix\": return DecoratorKind.OPERATOR_POSTFIX;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return DecoratorKind.CUSTOM;\r\n}\r\n\r\n/** Represents a decorator. */\r\nexport class DecoratorNode extends Node {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n}\r\n\r\n/** Comment kinds. */\r\nexport enum CommentKind {\r\n /** Line comment. */\r\n LINE,\r\n /** Triple-slash comment. */\r\n TRIPLE,\r\n /** Block comment. */\r\n BLOCK\r\n}\r\n\r\n/** Represents a comment. */\r\nexport class CommentNode extends Node {\r\n kind = NodeKind.COMMENT;\r\n\r\n /** Comment kind. */\r\n commentKind: CommentKind;\r\n /** Comment text. */\r\n text: string;\r\n}\r\n\r\n// expressions\r\n\r\n/** Base class of all expression nodes. */\r\nexport abstract class Expression extends Node { }\r\n\r\n/** Represents an identifier expression. */\r\nexport class IdentifierExpression extends Expression {\r\n kind = NodeKind.IDENTIFIER;\r\n\r\n /** Textual name. */\r\n text: string;\r\n}\r\n\r\n/** Indicates the kind of a literal. */\r\nexport enum LiteralKind {\r\n FLOAT,\r\n INTEGER,\r\n STRING,\r\n REGEXP,\r\n ARRAY,\r\n OBJECT\r\n}\r\n\r\n/** Base class of all literal expressions. */\r\nexport abstract class LiteralExpression extends Expression {\r\n kind = NodeKind.LITERAL;\r\n\r\n /** Specific literal kind. */\r\n literalKind: LiteralKind;\r\n}\r\n\r\n/** Represents an `[]` literal expression. */\r\nexport class ArrayLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.ARRAY;\r\n\r\n /** Nested element expressions. */\r\n elementExpressions: (Expression | null)[];\r\n}\r\n\r\n/** Indicates the kind of an assertion. */\r\nexport enum AssertionKind {\r\n PREFIX,\r\n AS\r\n}\r\n\r\n/** Represents an assertion expression. */\r\nexport class AssertionExpression extends Expression {\r\n kind = NodeKind.ASSERTION;\r\n\r\n /** Specific kind of this assertion. */\r\n assertionKind: AssertionKind;\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Target type. */\r\n toType: CommonTypeNode;\r\n}\r\n\r\n/** Represents a binary expression. */\r\nexport class BinaryExpression extends Expression {\r\n kind = NodeKind.BINARY;\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Left-hand side expression */\r\n left: Expression;\r\n /** Right-hand side expression. */\r\n right: Expression;\r\n}\r\n\r\n/** Represents a call expression. */\r\nexport class CallExpression extends Expression {\r\n kind = NodeKind.CALL;\r\n\r\n /** Called expression. Usually an identifier or property access expression. */\r\n expression: Expression;\r\n /** Provided type arguments. */\r\n typeArguments: CommonTypeNode[] | null;\r\n /** Provided arguments. */\r\n arguments: Expression[];\r\n}\r\n\r\n/** Represents a comma expression composed of multiple expressions. */\r\nexport class CommaExpression extends Expression {\r\n kind = NodeKind.COMMA;\r\n\r\n /** Sequential expressions. */\r\n expressions: Expression[];\r\n}\r\n\r\n/** Represents a `constructor` expression. */\r\nexport class ConstructorExpression extends IdentifierExpression {\r\n kind = NodeKind.CONSTRUCTOR;\r\n text = \"constructor\";\r\n}\r\n\r\n/** Represents an element access expression, e.g., array access. */\r\nexport class ElementAccessExpression extends Expression {\r\n kind = NodeKind.ELEMENTACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Element of the expression being accessed. */\r\n elementExpression: Expression;\r\n}\r\n\r\n/** Represents a float literal expression. */\r\nexport class FloatLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.FLOAT;\r\n\r\n /** Float value. */\r\n value: f64;\r\n}\r\n\r\n/** Represents a function expression using the 'function' keyword. */\r\nexport class FunctionExpression extends Expression {\r\n kind = NodeKind.FUNCTION;\r\n\r\n /** Inline function declaration. */\r\n declaration: FunctionDeclaration;\r\n}\r\n\r\n/** Represents an `instanceof` expression. */\r\nexport class InstanceOfExpression extends Expression {\r\n kind = NodeKind.INSTANCEOF;\r\n\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Type to test for. */\r\n isType: CommonTypeNode;\r\n}\r\n\r\n/** Represents an integer literal expression. */\r\nexport class IntegerLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.INTEGER;\r\n\r\n /** Integer value. */\r\n value: I64;\r\n}\r\n\r\n/** Represents a `new` expression. Like a call but with its own kind. */\r\nexport class NewExpression extends CallExpression {\r\n kind = NodeKind.NEW;\r\n}\r\n\r\n/** Represents a `null` expression. */\r\nexport class NullExpression extends IdentifierExpression {\r\n kind = NodeKind.NULL;\r\n text = \"null\";\r\n}\r\n\r\n/** Represents a parenthesized expression. */\r\nexport class ParenthesizedExpression extends Expression {\r\n kind = NodeKind.PARENTHESIZED;\r\n\r\n /** Expression in parenthesis. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a property access expression. */\r\nexport class PropertyAccessExpression extends Expression {\r\n kind = NodeKind.PROPERTYACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Property of the expression being accessed. */\r\n property: IdentifierExpression;\r\n}\r\n\r\n/** Represents a regular expression literal expression. */\r\nexport class RegexpLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.REGEXP;\r\n\r\n /** Regular expression pattern. */\r\n pattern: string;\r\n /** Regular expression flags. */\r\n patternFlags: string;\r\n}\r\n\r\n/** Represents a ternary expression, i.e., short if notation. */\r\nexport class TernaryExpression extends Expression {\r\n kind = NodeKind.TERNARY;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Expression executed when condition is `true`. */\r\n ifThen: Expression;\r\n /** Expression executed when condition is `false`. */\r\n ifElse: Expression;\r\n}\r\n\r\n/** Represents a string literal expression. */\r\nexport class StringLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.STRING;\r\n\r\n /** String value without quotes. */\r\n value: string;\r\n}\r\n\r\n/** Represents a `super` expression. */\r\nexport class SuperExpression extends IdentifierExpression {\r\n kind = NodeKind.SUPER;\r\n text = \"super\";\r\n}\r\n\r\n/** Represents a `this` expression. */\r\nexport class ThisExpression extends IdentifierExpression {\r\n kind = NodeKind.THIS;\r\n text = \"this\";\r\n}\r\n\r\n/** Represents a `true` expression. */\r\nexport class TrueExpression extends IdentifierExpression {\r\n kind = NodeKind.TRUE;\r\n text = \"true\";\r\n}\r\n\r\n/** Represents a `false` expression. */\r\nexport class FalseExpression extends IdentifierExpression {\r\n kind = NodeKind.FALSE;\r\n text = \"false\";\r\n}\r\n\r\n/** Base class of all unary expressions. */\r\nexport abstract class UnaryExpression extends Expression {\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Operand expression. */\r\n operand: Expression;\r\n}\r\n\r\n/** Represents a unary postfix expression, e.g. a postfix increment. */\r\nexport class UnaryPostfixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPOSTFIX;\r\n}\r\n\r\n/** Represents a unary prefix expression, e.g. a negation. */\r\nexport class UnaryPrefixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPREFIX;\r\n}\r\n\r\n// statements\r\n\r\nexport function isLastStatement(statement: Statement): bool {\r\n var parent = assert(statement.parent);\r\n if (parent.kind == NodeKind.BLOCK) {\r\n let statements = (parent).statements;\r\n if (statements[statements.length - 1] === statement) {\r\n switch (assert(parent.parent).kind) {\r\n case NodeKind.FUNCTIONDECLARATION:\r\n case NodeKind.METHODDECLARATION: return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all statement nodes. */\r\nexport abstract class Statement extends Node { }\r\n\r\n/** Indicates the specific kind of a source. */\r\nexport enum SourceKind {\r\n /** Default source. Usually imported from an entry file. */\r\n DEFAULT,\r\n /** Entry file. */\r\n ENTRY,\r\n /** Library file. */\r\n LIBRARY\r\n}\r\n\r\n/** A top-level source node. */\r\nexport class Source extends Node {\r\n kind = NodeKind.SOURCE;\r\n parent = null;\r\n\r\n /** Source kind. */\r\n sourceKind: SourceKind;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Path used internally. */\r\n internalPath: string;\r\n /** Simple path (last part without extension). */\r\n simplePath: string;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Full source text. */\r\n text: string;\r\n /** Tokenizer reference. */\r\n tokenizer: Tokenizer | null = null;\r\n /** Source map index. */\r\n debugInfoIndex: i32 = -1;\r\n /** Re-exported sources. */\r\n exportPaths: Set | null = null;\r\n\r\n /** Constructs a new source node. */\r\n constructor(normalizedPath: string, text: string, kind: SourceKind) {\r\n super();\r\n this.sourceKind = kind;\r\n this.normalizedPath = normalizedPath;\r\n var internalPath = mangleInternalPath(this.normalizedPath);\r\n this.internalPath = internalPath;\r\n var pos = internalPath.lastIndexOf(PATH_DELIMITER);\r\n this.simplePath = pos >= 0 ? internalPath.substring(pos + 1) : internalPath;\r\n this.statements = new Array();\r\n this.range = new Range(this, 0, text.length);\r\n this.text = text;\r\n }\r\n\r\n /** Tests if this source is an entry file. */\r\n get isEntry(): bool { return this.sourceKind == SourceKind.ENTRY; }\r\n /** Tests if this source is a stdlib file. */\r\n get isLibrary(): bool { return this.sourceKind == SourceKind.LIBRARY; }\r\n}\r\n\r\n/** Base class of all declaration statements. */\r\nexport abstract class DeclarationStatement extends Statement {\r\n\r\n /** Simple name being declared. */\r\n name: IdentifierExpression;\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null = null;\r\n\r\n protected cachedProgramLevelInternalName: string | null = null;\r\n protected cachedFileLevelInternalName: string | null = null;\r\n\r\n /** Gets the mangled program-level internal name of this declaration. */\r\n get programLevelInternalName(): string {\r\n if (!this.cachedProgramLevelInternalName) {\r\n this.cachedProgramLevelInternalName = mangleInternalName(this, true);\r\n }\r\n return this.cachedProgramLevelInternalName;\r\n }\r\n\r\n /** Gets the mangled file-level internal name of this declaration. */\r\n get fileLevelInternalName(): string {\r\n if (!this.cachedFileLevelInternalName) {\r\n this.cachedFileLevelInternalName = mangleInternalName(this, false);\r\n }\r\n return this.cachedFileLevelInternalName;\r\n }\r\n\r\n /** Tests if this is a top-level declaration within its source file. */\r\n get isTopLevel(): bool {\r\n var parent = this.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent)) {\r\n return false;\r\n }\r\n return parent.kind == NodeKind.SOURCE;\r\n }\r\n\r\n /** Tests if this declaration is a top-level export within its source file. */\r\n get isTopLevelExport(): bool {\r\n var parent = this.parent;\r\n if (!parent || (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent))) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.NAMESPACEDECLARATION) {\r\n return this.is(CommonFlags.EXPORT) && (parent).isTopLevelExport;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return this.is(CommonFlags.STATIC) && (parent).isTopLevelExport;\r\n }\r\n return parent.kind == NodeKind.SOURCE && this.is(CommonFlags.EXPORT);\r\n }\r\n\r\n /** Tests if this declaration needs an explicit export. */\r\n needsExplicitExport(member: ExportMember): bool {\r\n // This is necessary because module-level exports are automatically created\r\n // for top level declarations of all sorts. This function essentially tests\r\n // that there isn't a otherwise duplicate top-level export already.\r\n return (\r\n member.name.text != member.externalName.text || // if aliased\r\n this.range.source != member.range.source || // if a re-export\r\n !this.isTopLevelExport // if not top-level\r\n );\r\n }\r\n}\r\n\r\n/** Base class of all variable-like declaration statements. */\r\nexport abstract class VariableLikeDeclarationStatement extends DeclarationStatement {\r\n\r\n /** Variable type. */\r\n type: CommonTypeNode | null;\r\n /** Variable initializer. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a block statement. */\r\nexport class BlockStatement extends Statement {\r\n kind = NodeKind.BLOCK;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `break` statement. */\r\nexport class BreakStatement extends Statement {\r\n kind = NodeKind.BREAK;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `class` declaration. */\r\nexport class ClassDeclaration extends DeclarationStatement {\r\n kind = NodeKind.CLASSDECLARATION;\r\n\r\n /** Accepted type parameters. */\r\n typeParameters: TypeParameterNode[];\r\n /** Base class type being extended, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n /** Interface types being implemented, if any. */\r\n implementsTypes: TypeNode[] | null; // can't be functions\r\n /** Class member declarations. */\r\n members: DeclarationStatement[];\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents a `continue` statement. */\r\nexport class ContinueStatement extends Statement {\r\n kind = NodeKind.CONTINUE;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `do` statement. */\r\nexport class DoStatement extends Statement {\r\n kind = NodeKind.DO;\r\n\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n /** Condition when to repeat. */\r\n condition: Expression;\r\n}\r\n\r\n/** Represents an empty statement, i.e., a semicolon terminating nothing. */\r\nexport class EmptyStatement extends Statement {\r\n kind = NodeKind.EMPTY;\r\n}\r\n\r\n/** Represents an `enum` declaration. */\r\nexport class EnumDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMDECLARATION;\r\n\r\n /** Enum value declarations. */\r\n values: EnumValueDeclaration[];\r\n}\r\n\r\n/** Represents a value of an `enum` declaration. */\r\nexport class EnumValueDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMVALUEDECLARATION;\r\n // name is inherited\r\n\r\n /** Value expression. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents an `export import` statement of an interface. */\r\nexport class ExportImportStatement extends Node {\r\n kind = NodeKind.EXPORTIMPORT;\r\n\r\n /** Identifier being imported. */\r\n name: IdentifierExpression;\r\n /** Identifier being exported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents a member of an `export` statement. */\r\nexport class ExportMember extends Node {\r\n kind = NodeKind.EXPORTMEMBER;\r\n\r\n /** Identifier being exported. */\r\n name: IdentifierExpression;\r\n /** Identifier seen when imported again. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `export` statement. */\r\nexport class ExportStatement extends Statement {\r\n kind = NodeKind.EXPORT;\r\n\r\n /** Array of members if a set of named exports, or `null` if a filespace export. */\r\n members: ExportMember[] | null;\r\n /** Path being exported from, if applicable. */\r\n path: StringLiteralExpression | null;\r\n /** Normalized path, if `path` is set. */\r\n normalizedPath: string | null;\r\n /** Mangled internal path being referenced, if `path` is set. */\r\n internalPath: string | null;\r\n}\r\n\r\n/** Represents an expression that is used as a statement. */\r\nexport class ExpressionStatement extends Statement {\r\n kind = NodeKind.EXPRESSION;\r\n\r\n /** Expression being used as a statement.*/\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a field declaration within a `class`. */\r\nexport class FieldDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.FIELDDECLARATION;\r\n\r\n /** Parameter index within the constructor, if applicable. */\r\n parameterIndex: i32 = -1;\r\n}\r\n\r\n/** Represents a `for` statement. */\r\nexport class ForStatement extends Statement {\r\n kind = NodeKind.FOR;\r\n\r\n /**\r\n * Initializer statement, if present.\r\n * Either a {@link VariableStatement} or {@link ExpressionStatement}.\r\n */\r\n initializer: Statement | null;\r\n /** Condition expression, if present. */\r\n condition: Expression | null;\r\n /** Incrementor expression, if present. */\r\n incrementor: Expression | null;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Represents a `function` declaration. */\r\nexport class FunctionDeclaration extends DeclarationStatement {\r\n kind = NodeKind.FUNCTIONDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Function signature. */\r\n signature: SignatureNode;\r\n /** Body statement. Usually a block. */\r\n body: Statement | null;\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents an `if` statement. */\r\nexport class IfStatement extends Statement {\r\n kind = NodeKind.IF;\r\n\r\n /** Condition. */\r\n condition: Expression;\r\n /** Statement executed when condition is `true`. */\r\n ifTrue: Statement;\r\n /** Statement executed when condition is `false`. */\r\n ifFalse: Statement | null;\r\n}\r\n\r\n/** Represents an `import` declaration part of an {@link ImportStatement}. */\r\nexport class ImportDeclaration extends DeclarationStatement {\r\n kind = NodeKind.IMPORTDECLARATION;\r\n\r\n /** Identifier being imported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `import` statement. */\r\nexport class ImportStatement extends Statement {\r\n kind = NodeKind.IMPORT;\r\n\r\n /** Array of member declarations or `null` if an asterisk import. */\r\n declarations: ImportDeclaration[] | null;\r\n /** Name of the local namespace, if an asterisk import. */\r\n namespaceName: IdentifierExpression | null;\r\n /** Path being imported from. */\r\n path: StringLiteralExpression;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Mangled internal path being referenced. */\r\n internalPath: string;\r\n}\r\n\r\n/** Represents an `interfarce` declaration. */\r\nexport class InterfaceDeclaration extends ClassDeclaration {\r\n kind = NodeKind.INTERFACEDECLARATION;\r\n}\r\n\r\n/** Represents a method declaration within a `class`. */\r\nexport class MethodDeclaration extends FunctionDeclaration {\r\n kind = NodeKind.METHODDECLARATION;\r\n}\r\n\r\n/** Represents a `namespace` declaration. */\r\nexport class NamespaceDeclaration extends DeclarationStatement {\r\n kind = NodeKind.NAMESPACEDECLARATION;\r\n\r\n /** Array of namespace members. */\r\n members: Statement[];\r\n}\r\n\r\n/** Represents a `return` statement. */\r\nexport class ReturnStatement extends Statement {\r\n kind = NodeKind.RETURN;\r\n\r\n /** Value expression being returned, if present. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents a single `case` within a `switch` statement. */\r\nexport class SwitchCase extends Node {\r\n kind = NodeKind.SWITCHCASE;\r\n\r\n /** Label expression. `null` indicates the default case. */\r\n label: Expression | null;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `switch` statement. */\r\nexport class SwitchStatement extends Statement {\r\n kind = NodeKind.SWITCH;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Contained cases. */\r\n cases: SwitchCase[];\r\n}\r\n\r\n/** Represents a `throw` statement. */\r\nexport class ThrowStatement extends Statement {\r\n kind = NodeKind.THROW;\r\n\r\n /** Value expression being thrown. */\r\n value: Expression;\r\n}\r\n\r\n/** Represents a `try` statement. */\r\nexport class TryStatement extends Statement {\r\n kind = NodeKind.TRY;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Exception variable name, if a `catch` clause is present. */\r\n catchVariable: IdentifierExpression | null;\r\n /** Statements being executed on catch, if a `catch` clause is present. */\r\n catchStatements: Statement[] | null;\r\n /** Statements being executed afterwards, if a `finally` clause is present. */\r\n finallyStatements: Statement[] | null;\r\n}\r\n\r\n/** Represents a `type` declaration. */\r\nexport class TypeDeclaration extends DeclarationStatement {\r\n kind = NodeKind.TYPEDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Type being aliased. */\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents a variable declaration part of a {@link VariableStatement}. */\r\nexport class VariableDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.VARIABLEDECLARATION;\r\n}\r\n\r\n/** Represents a variable statement wrapping {@link VariableDeclaration}s. */\r\nexport class VariableStatement extends Statement {\r\n kind = NodeKind.VARIABLE;\r\n\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null;\r\n /** Array of member declarations. */\r\n declarations: VariableDeclaration[];\r\n}\r\n\r\n/** Represents a void statement dropping an expression's value. */\r\nexport class VoidStatement extends Statement {\r\n kind = NodeKind.VOID;\r\n\r\n /** Expression being dropped. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a `while` statement. */\r\nexport class WhileStatement extends Statement {\r\n kind = NodeKind.WHILE;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Finds the first decorator matching the specified kind. */\r\nexport function findDecorator(kind: DecoratorKind, decorators: DecoratorNode[] | null): DecoratorNode | null {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n if (decorator.decoratorKind == kind) return decorator;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Mangles a declaration's name to an internal name. */\r\nexport function mangleInternalName(declaration: DeclarationStatement, asGlobal: bool = false): string {\r\n var name = declaration.name.text;\r\n var parent = declaration.parent;\r\n if (!parent) return name;\r\n if (\r\n declaration.kind == NodeKind.VARIABLEDECLARATION &&\r\n parent.kind == NodeKind.VARIABLE\r\n ) { // skip over\r\n if (!(parent = parent.parent)) return name;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) + (\r\n declaration.is(CommonFlags.STATIC)\r\n ? STATIC_DELIMITER\r\n : INSTANCE_DELIMITER\r\n ) + name;\r\n }\r\n if (\r\n parent.kind == NodeKind.NAMESPACEDECLARATION ||\r\n parent.kind == NodeKind.ENUMDECLARATION\r\n ) {\r\n return mangleInternalName(parent, asGlobal) +\r\n STATIC_DELIMITER + name;\r\n }\r\n return asGlobal\r\n ? name\r\n : declaration.range.source.internalPath + PATH_DELIMITER + name;\r\n}\r\n\r\n/** Mangles an external to an internal path. */\r\nexport function mangleInternalPath(path: string): string {\r\n if (path.endsWith(\".ts\")) path = path.substring(0, path.length - 3);\r\n return path;\r\n}\r\n\r\n// Helpers\r\n\r\n/** Sets the parent node on an array of nodes. */\r\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\n/** Sets the parent node on an array of nullable nodes. */\r\nfunction setParentIfNotNull(nodes: (Node | null)[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n let node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\r\n}\r\n","/**\r\n * 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 typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n CommonTypeNode,\r\n TypeNode,\r\n TypeParameterNode,\r\n ParameterKind,\r\n SignatureNode,\r\n DecoratorNode,\r\n DecoratorKind,\r\n\r\n Expression,\r\n AssertionExpression,\r\n ElementAccessExpression,\r\n IdentifierExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n ParenthesizedExpression,\r\n PropertyAccessExpression,\r\n StringLiteralExpression,\r\n CallExpression,\r\n\r\n ClassDeclaration,\r\n DeclarationStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportMember,\r\n ExportStatement,\r\n FieldDeclaration,\r\n FunctionDeclaration,\r\n ImportDeclaration,\r\n ImportStatement,\r\n InterfaceDeclaration,\r\n MethodDeclaration,\r\n NamespaceDeclaration,\r\n TypeDeclaration,\r\n VariableDeclaration,\r\n VariableLikeDeclarationStatement,\r\n VariableStatement,\r\n\r\n 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\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 /** Diagnostic offset used where repeatedly 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 /** Target expression of the previously resolved property or element access. */\r\n resolvedThisExpression: Expression | null = null;\r\n /** Element expression of the previously resolved element access. */\r\n resolvedElementExpression : Expression | null = null;\r\n /** 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.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.tryResolveImport(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.tryResolveImport(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 for (let i = 0, k = queuedExtends.length; i < k; ++i) {\r\n let derivedPrototype = queuedExtends[i];\r\n let derivedDeclaration = derivedPrototype.declaration;\r\n let derivedType = assert(derivedDeclaration.extendsType);\r\n let baseElement = this.resolveIdentifier(derivedType.name, null); // reports\r\n if (!baseElement) continue;\r\n if (baseElement.kind == ElementKind.CLASS_PROTOTYPE) {\r\n let basePrototype = baseElement;\r\n derivedPrototype.basePrototype = basePrototype;\r\n } else {\r\n this.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n derivedType.range\r\n );\r\n }\r\n }\r\n\r\n // set up global aliases\r\n var globalAliases = options.globalAliases;\r\n if (globalAliases) {\r\n for (let [alias, name] of globalAliases) {\r\n 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 = (stringPrototype).resolve(null); // reports\r\n if (stringInstance) {\r\n if (this.typesLookup.has(\"string\")) {\r\n let declaration = (stringPrototype).declaration;\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n } else {\r\n this.stringInstance = stringInstance;\r\n this.typesLookup.set(\"string\", stringInstance.type);\r\n }\r\n }\r\n }\r\n\r\n // 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 resolve an import by traversing exports and queued exports. */\r\n private tryResolveImport(\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 private filterDecorators(decorators: DecoratorNode[], acceptedFlags: DecoratorFlags): DecoratorFlags {\r\n var presentFlags = DecoratorFlags.NONE;\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n 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 /** Processes global options, if present. */\r\n private checkGlobalOptions(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var parentNode = declaration.parent;\r\n if (\r\n (element.hasDecorator(DecoratorFlags.GLOBAL)) ||\r\n (declaration.range.source.is(CommonFlags.BUILTIN)) ||\r\n (\r\n declaration.range.source.isLibrary &&\r\n element.is(CommonFlags.EXPORT) &&\r\n (\r\n assert(parentNode).kind == NodeKind.SOURCE ||\r\n (\r\n parentNode).kind == NodeKind.VARIABLE &&\r\n assert((parentNode).parent).kind == NodeKind.SOURCE\r\n )\r\n )\r\n ) {\r\n let globalName = declaration.programLevelInternalName;\r\n if (this.elementsLookup.has(globalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, element.internalName\r\n );\r\n } else {\r\n this.elementsLookup.set(globalName, element);\r\n if (element.is(CommonFlags.BUILTIN)) element.internalName = globalName;\r\n }\r\n }\r\n }\r\n\r\n private initializeClass(\r\n declaration: ClassDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new ClassPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.SEALED |\r\n DecoratorFlags.UNMANAGED\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n var implementsTypes = declaration.implementsTypes;\r\n if (implementsTypes) {\r\n let numImplementsTypes = implementsTypes.length;\r\n if (prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (numImplementsTypes) {\r\n this.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_implement_interfaces,\r\n Range.join(\r\n declaration.name.range,\r\n implementsTypes[numImplementsTypes - 1].range\r\n )\r\n );\r\n }\r\n\r\n // remember classes that implement interfaces\r\n } else if (numImplementsTypes) {\r\n queuedImplements.push(prototype);\r\n }\r\n }\r\n\r\n // remember classes that extend another one\r\n if (declaration.extendsType) queuedExtends.push(prototype);\r\n\r\n // add as namespace member if applicable\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // otherwise add to file-level exports if exported\r\n } else if (prototype.is(CommonFlags.EXPORT)) {\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n 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 throw new Error(\"class member expected\");\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobalOptions(prototype, declaration);\r\n }\r\n\r\n private initializeField(\r\n declaration: FieldDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var decorators = declaration.decorators;\r\n\r\n // static fields become global variables\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n let staticField = new Global(\r\n this,\r\n name,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators, DecoratorFlags.NONE)\r\n : DecoratorFlags.NONE\r\n );\r\n staticField.parent = classPrototype;\r\n classPrototype.members.set(name, staticField);\r\n this.elementsLookup.set(internalName, staticField);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n staticField.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance fields are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instanceField = new FieldPrototype(\r\n classPrototype,\r\n name,\r\n internalName,\r\n declaration\r\n );\r\n if (decorators) this.filterDecorators(decorators, DecoratorFlags.NONE);\r\n classPrototype.instanceMembers.set(name, instanceField);\r\n // TBD: no need to mark as MODULE_EXPORT\r\n }\r\n }\r\n\r\n private initializeMethod(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var prototype: FunctionPrototype | null = null;\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.filterDecorators(decorators,\r\n DecoratorFlags.OPERATOR_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.filterDecorators(decorators,\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n var baseName = (isGetter ? GETTER_PREFIX : SETTER_PREFIX) + simpleName;\r\n\r\n // static accessors become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n let staticName = classPrototype.internalName + STATIC_DELIMITER + baseName;\r\n if (this.elementsLookup.has(staticName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n let staticPrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n staticName,\r\n declaration,\r\n null,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = staticPrototype;\r\n } else {\r\n (propertyElement).setterPrototype = staticPrototype;\r\n }\r\n if (isNew) {\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n classPrototype.members.set(simpleName, propertyElement); // check above\r\n } else {\r\n assert(classPrototype.members && classPrototype.members.has(simpleName));\r\n }\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance accessors are remembered until resolved\r\n } else {\r\n let instanceName = classPrototype.internalName + INSTANCE_DELIMITER + baseName;\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(baseName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instancePrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n instanceName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = instancePrototype;\r\n } else {\r\n (propertyElement).setterPrototype = instancePrototype;\r\n }\r\n classPrototype.instanceMembers.set(baseName, propertyElement);\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n instancePrototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n }\r\n\r\n private initializeEnum(\r\n declaration: EnumDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var element = new Enum(this, simpleName, internalName, declaration);\r\n element.parent = namespace;\r\n this.elementsLookup.set(internalName, element);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, element);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && element.is(CommonFlags.EXPORT)) {\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (element.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, element);\r\n 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.checkGlobalOptions(element, declaration);\r\n }\r\n\r\n private initializeEnumValue(\r\n declaration: EnumValueDeclaration,\r\n enm: Enum\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n if (enm.members) {\r\n if (enm.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n enm.members = new Map();\r\n }\r\n var value = new EnumValue(enm, this, name, internalName, declaration);\r\n enm.members.set(name, value);\r\n if (enm.is(CommonFlags.MODULE_EXPORT)) {\r\n value.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n private initializeExports(\r\n statement: ExportStatement,\r\n queuedExports: Map\r\n ): void {\r\n var members = statement.members;\r\n 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.filterDecorators(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.checkGlobalOptions(prototype, declaration);\r\n }\r\n\r\n private initializeImports(\r\n statement: ImportStatement,\r\n queuedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var declarations = statement.declarations;\r\n if (declarations) {\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n this.initializeImport(\r\n declarations[i],\r\n statement.internalPath,\r\n queuedExports, queuedImports\r\n );\r\n }\r\n } else if (statement.namespaceName) { // import * as simpleName from \"file\"\r\n let simpleName = statement.namespaceName.text;\r\n let internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n simpleName\r\n );\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n statement.namespaceName.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n\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.filterDecorators(decorators, DecoratorFlags.GLOBAL)\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(prototype.internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(prototype.internalName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n 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.checkGlobalOptions(prototype, declaration);\r\n }\r\n\r\n private initializeNamespace(\r\n declaration: NamespaceDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n parentNamespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n var simpleName = declaration.name.text;\r\n var namespace = this.elementsLookup.get(internalName);\r\n if (!namespace) {\r\n namespace = new Namespace(this, simpleName, internalName, declaration);\r\n namespace.parent = parentNamespace;\r\n this.elementsLookup.set(internalName, namespace);\r\n this.checkGlobalOptions(namespace, declaration);\r\n }\r\n\r\n if (parentNamespace) {\r\n if (parentNamespace.members) {\r\n if (parentNamespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n parentNamespace.members = new Map();\r\n }\r\n parentNamespace.members.set(simpleName, namespace);\r\n if (parentNamespace.is(CommonFlags.MODULE_EXPORT) && namespace.is(CommonFlags.EXPORT)) {\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (namespace.is(CommonFlags.EXPORT)) { // no parent namespace\r\n let existingExport = this.fileLevelExports.get(internalName);\r\n if (existingExport) {\r\n if (!existingExport.is(CommonFlags.EXPORT)) {\r\n this.error(\r\n DiagnosticCode.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local,\r\n declaration.name.range, namespace.internalName\r\n ); // recoverable\r\n }\r\n namespace = existingExport; // join\r\n } else {\r\n this.fileLevelExports.set(internalName, namespace);\r\n }\r\n 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.filterDecorators(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.checkGlobalOptions(global, declaration);\r\n }\r\n }\r\n\r\n /** Resolves a {@link SignatureNode} to a concrete {@link Signature}. */\r\n resolveSignature(\r\n node: SignatureNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Signature | null {\r\n var explicitThisType = node.explicitThisType;\r\n var thisType: Type | null = null;\r\n if (explicitThisType) {\r\n thisType = this.resolveType(\r\n explicitThisType,\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!thisType) return null;\r\n }\r\n var parameterTypeNodes = node.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 reportNotFound\r\n );\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterTypeNode.name.text;\r\n }\r\n var returnTypeNode = node.returnType;\r\n var returnType: Type | null;\r\n if (returnTypeNode) {\r\n returnType = this.resolveType(\r\n returnTypeNode,\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Type.void;\r\n }\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n signature.hasRest = hasRest;\r\n return signature;\r\n }\r\n\r\n /** Resolves a {@link CommonTypeNode} to a concrete {@link Type}. */\r\n resolveType(\r\n node: CommonTypeNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Type | null {\r\n if (node.kind == NodeKind.SIGNATURE) {\r\n let signature = this.resolveSignature(node, contextualTypeArguments, reportNotFound);\r\n if (!signature) return null;\r\n return node.isNullable\r\n ? signature.type.asNullable()\r\n : signature.type;\r\n }\r\n var typeNode = node;\r\n var simpleName = typeNode.name.text;\r\n var globalName = simpleName;\r\n var localName = typeNode.range.source.internalPath + PATH_DELIMITER + simpleName;\r\n\r\n var element: Element | null;\r\n if (\r\n (element = this.elementsLookup.get(localName)) || // file-global\r\n (element = this.elementsLookup.get(globalName)) // program-global\r\n ) {\r\n switch (element.kind) {\r\n case ElementKind.ENUM: return Type.i32;\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n let instance = (element).resolveUsingTypeArguments(\r\n typeNode.typeArguments,\r\n contextualTypeArguments,\r\n null\r\n ); // reports\r\n if (!instance) return null;\r\n return node.isNullable\r\n ? instance.type.asNullable()\r\n : instance.type;\r\n }\r\n }\r\n }\r\n\r\n // check (global) type alias\r\n var alias = this.typeAliases.get(simpleName);\r\n if (alias) return this.resolveType(alias.type, contextualTypeArguments, reportNotFound);\r\n\r\n // resolve parameters\r\n if (typeNode.typeArguments) {\r\n let k = typeNode.typeArguments.length;\r\n let paramTypes = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let paramType = this.resolveType( // reports\r\n typeNode.typeArguments[i],\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!paramType) return null;\r\n paramTypes[i] = paramType;\r\n }\r\n\r\n if (k) { // can't be a placeholder if it has parameters\r\n let instanceKey = typesToString(paramTypes);\r\n if (instanceKey.length) {\r\n localName += \"<\" + instanceKey + \">\";\r\n globalName += \"<\" + instanceKey + \">\";\r\n }\r\n } else if (contextualTypeArguments) {\r\n let placeholderType = contextualTypeArguments.get(globalName);\r\n if (placeholderType) return placeholderType;\r\n }\r\n }\r\n\r\n var type: Type | null;\r\n\r\n // check file-global / program-global type\r\n if ((type = this.typesLookup.get(localName)) || (type = this.typesLookup.get(globalName))) {\r\n return type;\r\n }\r\n\r\n if (reportNotFound) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n typeNode.name.range, globalName\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves an array of type arguments to concrete types. */\r\n resolveTypeArguments(\r\n typeParameters: TypeParameterNode[],\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): Type[] | null {\r\n var parameterCount = typeParameters.length;\r\n var argumentCount = typeArgumentNodes ? typeArgumentNodes.length : 0;\r\n if (parameterCount != argumentCount) {\r\n if (argumentCount) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n Range.join(\r\n (typeArgumentNodes)[0].range,\r\n (typeArgumentNodes)[argumentCount - 1].range\r\n ),\r\n parameterCount.toString(10), argumentCount.toString(10)\r\n );\r\n } else if (alternativeReportNode) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n alternativeReportNode.range.atEnd, parameterCount.toString(10), \"0\"\r\n );\r\n }\r\n return null;\r\n }\r\n var typeArguments = new Array(parameterCount);\r\n for (let i = 0; i < parameterCount; ++i) {\r\n let type = this.resolveType( // reports\r\n (typeArgumentNodes)[i],\r\n contextualTypeArguments,\r\n true\r\n );\r\n if (!type) return null;\r\n // TODO: check extendsType\r\n typeArguments[i] = type;\r\n }\r\n return typeArguments;\r\n }\r\n\r\n /** Resolves an identifier to the element it refers to. */\r\n resolveIdentifier(\r\n identifier: IdentifierExpression,\r\n context: Element | null\r\n ): Element | null {\r\n var name = identifier.text;\r\n var element: Element | null;\r\n\r\n if (context) {\r\n let parent: Element | null;\r\n\r\n switch (context.kind) {\r\n case ElementKind.FUNCTION: { // search locals\r\n element = (context).flow.getScopedLocal(name);\r\n if (element) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element;\r\n }\r\n parent = (context).prototype.parent;\r\n break;\r\n }\r\n case ElementKind.CLASS: {\r\n parent = (context).prototype.parent;\r\n break;\r\n }\r\n default: {\r\n parent = context;\r\n break;\r\n }\r\n }\r\n\r\n // search parent\r\n while (parent) {\r\n let members = parent.members;\r\n if (members) {\r\n if (element = members.get(name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element;\r\n }\r\n }\r\n parent = parent.parent;\r\n }\r\n }\r\n\r\n // search current file\r\n if (element = this.elementsLookup.get(identifier.range.source.internalPath + PATH_DELIMITER + name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n // search global scope\r\n if (element = this.elementsLookup.get(name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n identifier.range, name\r\n );\r\n return null;\r\n }\r\n\r\n /** Resolves a property access to the element it refers to. */\r\n resolvePropertyAccess(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualFunction: Function\r\n ): Element | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = propertyAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction); // reports\r\n if (!target) return null;\r\n\r\n // at this point we know exactly what the target is, so look up the element within\r\n var propertyName = propertyAccess.property.text;\r\n\r\n // Resolve variable-likes to the class type they reference first\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let classReference = (target).type.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, (target).type.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = assert((target).getterPrototype).resolve(); // reports\r\n if (!getter) return null;\r\n let classReference = getter.signature.returnType.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, getter.signature.returnType.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.resolvedElementExpression;\r\n if (elementExpression) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementExpression.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (!(target = returnType.classReference)) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, returnType.toString()\r\n );\r\n return null;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // Look up the member within\r\n switch (target.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n case ElementKind.CLASS: {\r\n do {\r\n let members = target.members;\r\n let member: Element | null;\r\n if (members && (member = members.get(propertyName))) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = null;\r\n return member; // instance FIELD, static GLOBAL, FUNCTION_PROTOTYPE...\r\n }\r\n // traverse inherited static members on the base prototype if target is a class prototype\r\n if (target.kind == ElementKind.CLASS_PROTOTYPE) {\r\n if ((target).basePrototype) {\r\n target = (target).basePrototype;\r\n } else {\r\n break;\r\n }\r\n // traverse inherited instance members on the base class if target is a class instance\r\n } else if (target.kind == ElementKind.CLASS) {\r\n if ((target).base) {\r\n target = (target).base;\r\n } else {\r\n break;\r\n }\r\n } else {\r\n break;\r\n }\r\n } while (true);\r\n break;\r\n }\r\n default: { // enums or other namespace-like elements\r\n let members = target.members;\r\n if (members) {\r\n let member = members.get(propertyName);\r\n if (member) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = null;\r\n return member; // static ENUMVALUE, static GLOBAL, static FUNCTION_PROTOTYPE...\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveElementAccess(\r\n elementAccess: ElementAccessExpression,\r\n contextualFunction: Function\r\n ): Element | null {\r\n var targetExpression = elementAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction);\r\n if (!target) return null;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (target = type.classReference) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS: { // element access on element access\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementAccess.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (target = returnType.classReference) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n targetExpression.range\r\n );\r\n return null;\r\n }\r\n\r\n resolveExpression(\r\n expression: Expression,\r\n contextualFunction: Function\r\n ): Element | null {\r\n while (expression.kind == NodeKind.PARENTHESIZED) {\r\n expression = (expression).expression;\r\n }\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n let type = this.resolveType((expression).toType); // reports\r\n if (type) {\r\n let classType = type.classReference;\r\n if (classType) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return classType;\r\n }\r\n }\r\n return null;\r\n }\r\n case NodeKind.BINARY: { // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n }\r\n case NodeKind.THIS: { // -> Class / ClassPrototype\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"this\");\r\n if (explicitLocal) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return parent;\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n return null;\r\n }\r\n case NodeKind.SUPER: { // -> Class\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"super\");\r\n if (explicitLocal) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent && parent.kind == ElementKind.CLASS && (parent = (parent).base)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return parent;\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n return null;\r\n }\r\n case NodeKind.IDENTIFIER: {\r\n return this.resolveIdentifier(expression, contextualFunction);\r\n }\r\n case NodeKind.LITERAL: {\r\n switch ((expression).literalKind) {\r\n case LiteralKind.STRING: {\r\n this.resolvedThisExpression = expression;\r\n this.resolvedElementExpression = null;\r\n return this.stringInstance;\r\n }\r\n // case LiteralKind.ARRAY: // TODO\r\n }\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n return this.resolvePropertyAccess(\r\n expression,\r\n contextualFunction\r\n );\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n return this.resolveElementAccess(\r\n expression,\r\n contextualFunction\r\n );\r\n }\r\n case NodeKind.CALL: {\r\n let targetExpression = (expression).expression;\r\n let target = this.resolveExpression(targetExpression, contextualFunction); // reports\r\n if (!target) return null;\r\n if (target.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n let instance = (target).resolveUsingTypeArguments( // reports\r\n (expression).typeArguments,\r\n contextualFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n if (!instance) return null;\r\n let returnType = instance.signature.returnType;\r\n let classType = returnType.classReference;\r\n if (classType) {\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return classType;\r\n } else {\r\n let signature = returnType.signatureReference;\r\n if (signature) {\r\n let functionTarget = signature.cachedFunctionTarget;\r\n if (!functionTarget) {\r\n functionTarget = new FunctionTarget(this, signature);\r\n signature.cachedFunctionTarget = functionTarget;\r\n }\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return functionTarget;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n targetExpression.range, target.internalName\r\n );\r\n return null;\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return null;\r\n }\r\n\r\n // resolveExpressionType(\r\n // expression: Expression,\r\n // contextualFunction: Function\r\n // ): Type {\r\n // var element = this.resolveExpression(expression, contextualFunction);\r\n // switch (element.kind) {\r\n\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 /** Resolves this prototype to an instance using the specified concrete type arguments. */\r\n resolve(\r\n functionTypeArguments: Type[] | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var instanceKey = functionTypeArguments ? typesToString(functionTypeArguments) : \"\";\r\n var instance = this.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n var declaration = this.declaration;\r\n var isInstance = this.is(CommonFlags.INSTANCE);\r\n var classPrototype = this.classPrototype;\r\n\r\n // inherit contextual type arguments as provided. might be overridden.\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(\r\n inheritedName,\r\n inheritedType\r\n );\r\n }\r\n }\r\n\r\n // override with class type arguments if a partially resolved instance method\r\n var classTypeArguments = this.classTypeArguments;\r\n if (classTypeArguments) { // set only if partially resolved\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let classDeclaration = assert(classPrototype).declaration;\r\n let classTypeParameters = classDeclaration.typeParameters;\r\n let numClassTypeParameters = classTypeParameters.length;\r\n assert(numClassTypeParameters == classTypeArguments.length);\r\n for (let i = 0; i < numClassTypeParameters; ++i) {\r\n contextualTypeArguments.set(\r\n classTypeParameters[i].name.text,\r\n classTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!classTypeArguments);\r\n }\r\n\r\n // override with function specific type arguments\r\n var signatureNode = declaration.signature;\r\n var functionTypeParameters = declaration.typeParameters;\r\n var numFunctionTypeArguments: i32;\r\n if (functionTypeArguments && (numFunctionTypeArguments = functionTypeArguments.length)) {\r\n assert(functionTypeParameters && numFunctionTypeArguments == functionTypeParameters.length);\r\n for (let i = 0; i < numFunctionTypeArguments; ++i) {\r\n contextualTypeArguments.set(\r\n (functionTypeParameters)[i].name.text,\r\n functionTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!functionTypeParameters || functionTypeParameters.length == 0);\r\n }\r\n\r\n // resolve class if an instance method\r\n var classInstance: Class | null = null;\r\n var thisType: Type | null = null;\r\n if (isInstance) {\r\n classInstance = assert(classPrototype).resolve(classTypeArguments, contextualTypeArguments); // reports\r\n if (!classInstance) return null;\r\n thisType = classInstance.type;\r\n contextualTypeArguments.set(\"this\", thisType);\r\n }\r\n\r\n // resolve signature node\r\n var signatureParameters = signatureNode.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.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterDeclaration.name.text;\r\n }\r\n\r\n var returnType: Type;\r\n if (this.is(CommonFlags.SET)) {\r\n returnType = Type.void; // not annotated\r\n } else if (this.is(CommonFlags.CONSTRUCTOR)) {\r\n returnType = assert(classInstance).type; // not annotated\r\n } else {\r\n let typeNode = assert(signatureNode.returnType);\r\n let type = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (!type) return null;\r\n returnType = type;\r\n }\r\n\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n\r\n var internalName = this.internalName;\r\n if (instanceKey.length) internalName += \"<\" + instanceKey + \">\";\r\n instance = new Function(\r\n this,\r\n internalName,\r\n signature,\r\n classInstance\r\n ? classInstance\r\n : classPrototype,\r\n contextualTypeArguments\r\n );\r\n this.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n return instance;\r\n }\r\n\r\n /** Resolves this prototype partially by applying the specified inherited class type arguments. */\r\n resolvePartial(classTypeArguments: Type[] | null): FunctionPrototype | null {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n var classPrototype = assert(this.classPrototype);\r\n\r\n if (!(classTypeArguments && classTypeArguments.length)) return this; // no need to clone\r\n\r\n var simpleName = this.simpleName;\r\n var partialKey = typesToString(classTypeArguments);\r\n var partialPrototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n classPrototype.internalName + \"<\" + partialKey + \">\" + INSTANCE_DELIMITER + simpleName,\r\n this.declaration,\r\n classPrototype,\r\n this.decoratorFlags\r\n );\r\n partialPrototype.flags = this.flags;\r\n partialPrototype.operatorKind = this.operatorKind;\r\n partialPrototype.classTypeArguments = classTypeArguments;\r\n return partialPrototype;\r\n }\r\n\r\n /** Resolves the specified type arguments prior to resolving this prototype to an instance. */\r\n resolveUsingTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (this.is(CommonFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.program.resolveTypeArguments( // reports\r\n assert(this.declaration.typeParameters),\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n }\r\n return this.resolve(resolvedTypeArguments, contextualTypeArguments);\r\n }\r\n\r\n /** Resolves the type arguments to use when compiling a built-in call. Must be a built-in. */\r\n resolveBuiltinTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null\r\n ): Type[] | null {\r\n assert(this.is(CommonFlags.BUILTIN));\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (typeArgumentNodes) {\r\n let k = typeArgumentNodes.length;\r\n resolvedTypeArguments = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let resolvedType = this.program.resolveType( // reports\r\n typeArgumentNodes[i],\r\n contextualTypeArguments,\r\n true\r\n );\r\n if (!resolvedType) return null;\r\n resolvedTypeArguments[i] = resolvedType;\r\n }\r\n }\r\n return resolvedTypeArguments;\r\n }\r\n\r\n toString(): string { return this.simpleName; }\r\n}\r\n\r\n/** A resolved function. */\r\nexport class Function extends Element {\r\n\r\n kind = ElementKind.FUNCTION;\r\n\r\n /** Prototype reference. */\r\n prototype: FunctionPrototype;\r\n /** Function signature. */\r\n signature: Signature;\r\n /** Map of locals by name. */\r\n localsByName: Map = new Map();\r\n /** Array of locals by index. */\r\n localsByIndex: Local[] = [];\r\n /** List of additional non-parameter locals. */\r\n additionalLocals: Type[] = [];\r\n /** Current break context label. */\r\n breakContext: string | null = null;\r\n /** Contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Current control flow. */\r\n flow: Flow;\r\n /** Remembered debug locations. */\r\n debugLocations: Range[] = [];\r\n /** Function reference, if compiled. */\r\n ref: FunctionRef = 0;\r\n /** Function table index, if any. */\r\n functionTableIndex: i32 = -1;\r\n /** Trampoline function for calling with omitted arguments. */\r\n trampoline: Function | null = null;\r\n /** The outer scope, if a function expression. */\r\n outerScope: Flow | null = null;\r\n\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\r\n nextInlineId: i32 = 0;\r\n\r\n /** Constructs a new concrete function. */\r\n constructor(\r\n prototype: FunctionPrototype,\r\n internalName: string,\r\n signature: Signature,\r\n parent: Element | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.signature = signature;\r\n this.parent = parent;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.contextualTypeArguments = contextualTypeArguments;\r\n if (!(prototype.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN) || prototype.is(CommonFlags.DECLARE))) {\r\n let localIndex = 0;\r\n if (parent && parent.kind == ElementKind.CLASS) {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let local = new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n );\r\n this.localsByName.set(\"this\", local);\r\n this.localsByIndex[local.index] = local;\r\n let inheritedTypeArguments = (parent).contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments.has(inheritedName)) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n }\r\n } else {\r\n assert(!this.is(CommonFlags.INSTANCE)); // internal error\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n let parameterType = parameterTypes[i];\r\n let parameterName = signature.getParameterName(i);\r\n let local = new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n // FIXME: declaration?\r\n );\r\n this.localsByName.set(parameterName, local);\r\n this.localsByIndex[local.index] = local;\r\n }\r\n }\r\n this.flow = Flow.create(this);\r\n }\r\n\r\n /** Adds a local of the specified type, with an optional name. */\r\n addLocal(type: Type, name: string | null = null, declaration: VariableDeclaration | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = this.signature.parameterTypes.length + this.additionalLocals.length;\r\n if (this.is(CommonFlags.INSTANCE)) ++localIndex;\r\n var local = new Local(\r\n this.prototype.program,\r\n name\r\n ? name\r\n : \"var$\" + localIndex.toString(10),\r\n localIndex,\r\n type,\r\n declaration\r\n );\r\n if (name) {\r\n if (this.localsByName.has(name)) throw new Error(\"duplicate local name\");\r\n this.localsByName.set(name, local);\r\n }\r\n this.localsByIndex[local.index] = local;\r\n this.additionalLocals.push(type);\r\n return local;\r\n }\r\n\r\n private tempI32s: Local[] | null = null;\r\n private tempI64s: Local[] | null = null;\r\n private tempF32s: Local[] | null = null;\r\n private tempF64s: Local[] | null = null;\r\n\r\n /** Gets a free temporary local of the specified type. */\r\n getTempLocal(type: Type, wrapped: bool = false): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s;\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps && temps.length) {\r\n local = temps.pop();\r\n local.type = type;\r\n local.flags = CommonFlags.NONE;\r\n } else {\r\n local = this.addLocal(type);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n if (local.is(CommonFlags.INLINED)) return;\r\n assert(local.index >= 0);\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n assert(local.index >= 0);\r\n temps.push(local);\r\n }\r\n\r\n /** Gets and immediately frees a temporary local of the specified type. */\r\n getAndFreeTempLocal(type: Type, wrapped: bool): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps.length) {\r\n local = temps[temps.length - 1];\r\n local.type = type;\r\n } else {\r\n local = this.addLocal(type);\r\n temps.push(local);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Enters a(nother) break context. */\r\n enterBreakContext(): string {\r\n var id = this.nextBreakId++;\r\n if (!this.breakStack) this.breakStack = [ id ];\r\n else this.breakStack.push(id);\r\n return this.breakContext = id.toString(10);\r\n }\r\n\r\n /** Leaves the current break context. */\r\n leaveBreakContext(): void {\r\n assert(this.breakStack != null);\r\n var length = (this.breakStack).length;\r\n assert(length > 0);\r\n (this.breakStack).pop();\r\n if (length > 1) {\r\n this.breakContext = (this.breakStack)[length - 2].toString(10);\r\n } else {\r\n this.breakContext = null;\r\n this.breakStack = null;\r\n }\r\n }\r\n\r\n /** Finalizes the function once compiled, releasing no longer needed resources. */\r\n finalize(module: Module, ref: FunctionRef): void {\r\n this.ref = ref;\r\n assert(!this.breakStack || !this.breakStack.length); // internal error\r\n this.breakStack = null;\r\n this.breakContext = null;\r\n this.tempI32s = this.tempI64s = this.tempF32s = this.tempF64s = null;\r\n if (this.program.options.sourceMap) {\r\n let debugLocations = this.debugLocations;\r\n for (let i = 0, k = debugLocations.length; i < k; ++i) {\r\n let debugLocation = debugLocations[i];\r\n module.setDebugLocation(\r\n ref,\r\n debugLocation.debugInfoRef,\r\n debugLocation.source.debugInfoIndex,\r\n debugLocation.line,\r\n debugLocation.column\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n}\r\n\r\n/** A resolved function target, that is a function called indirectly by an index and signature. */\r\nexport class FunctionTarget extends Element {\r\n\r\n kind = ElementKind.FUNCTION_TARGET;\r\n\r\n /** Underlying signature. */\r\n signature: Signature;\r\n /** Function type. */\r\n type: Type;\r\n\r\n /** Constructs a new function target. */\r\n constructor(program: Program, signature: Signature) {\r\n super(program, \"\", \"\");\r\n var simpleName = signature.toSignatureString();\r\n this.simpleName = simpleName;\r\n this.internalName = simpleName;\r\n this.signature = signature;\r\n this.type = Type.u32.asFunction(signature);\r\n }\r\n}\r\n\r\n/** A yet unresolved instance field prototype. */\r\nexport class FieldPrototype extends Element {\r\n\r\n kind = ElementKind.FIELD_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FieldDeclaration;\r\n /** Parent class prototype. */\r\n classPrototype: ClassPrototype;\r\n\r\n /** Constructs a new field prototype. */\r\n constructor(\r\n classPrototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FieldDeclaration\r\n ) {\r\n super(classPrototype.program, simpleName, internalName);\r\n this.classPrototype = classPrototype;\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** A resolved instance field. */\r\nexport class Field extends VariableLikeElement {\r\n\r\n kind = ElementKind.FIELD;\r\n\r\n /** Field prototype reference. */\r\n prototype: FieldPrototype;\r\n /** Field memory offset, if an instance field. */\r\n memoryOffset: i32 = -1;\r\n\r\n /** Constructs a new field. */\r\n constructor(\r\n prototype: FieldPrototype,\r\n internalName: string,\r\n type: Type,\r\n declaration: FieldDeclaration,\r\n parent: Class\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName, type, declaration);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.type = type;\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A property comprised of a getter and a setter function. */\r\nexport class Property extends Element {\r\n\r\n kind = ElementKind.PROPERTY;\r\n\r\n /** Parent class prototype. */\r\n parent: ClassPrototype;\r\n /** Getter prototype. */\r\n getterPrototype: FunctionPrototype | null = null;\r\n /** Setter prototype. */\r\n setterPrototype: FunctionPrototype | null = null;\r\n\r\n /** Constructs a new property prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n parent: ClassPrototype\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A yet unresolved class prototype. */\r\nexport class ClassPrototype extends Element {\r\n\r\n kind = ElementKind.CLASS_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: ClassDeclaration;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Instance member prototypes. */\r\n instanceMembers: Map | null = null;\r\n /** Base class prototype, if applicable. */\r\n basePrototype: ClassPrototype | null = null; // set in Program#initialize\r\n /** Constructor prototype. */\r\n constructorPrototype: FunctionPrototype | null = null;\r\n /** Operator overload prototypes. */\r\n overloadPrototypes: Map = new Map();\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n /** Resolves this prototype to an instance using the specified concrete type arguments. */\r\n resolve(\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null\r\n ): Class | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n var instance = this.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n // inherit contextual type arguments\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n\r\n var declaration = this.declaration;\r\n var baseClass: Class | null = null;\r\n if (declaration.extendsType) {\r\n let baseClassType = this.program.resolveType(declaration.extendsType, null); // reports\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.classReference)) {\r\n this.program.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n declaration.extendsType.range\r\n );\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.SEALED)) {\r\n this.program.error(\r\n DiagnosticCode.Class_0_is_sealed_and_cannot_be_extended,\r\n declaration.extendsType.range, baseClass.internalName\r\n );\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.UNMANAGED) != this.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n this.program.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa,\r\n Range.join(declaration.name.range, declaration.extendsType.range)\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n // override call specific contextual type arguments if provided\r\n var i: i32, k: i32;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != declaration.typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n for (i = 0; i < k; ++i) {\r\n contextualTypeArguments.set(declaration.typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n } else if (declaration.typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n\r\n var simpleName = this.simpleName;\r\n var internalName = this.internalName;\r\n if (instanceKey.length) {\r\n simpleName += \"<\" + instanceKey + \">\";\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n instance = new Class(this, simpleName, internalName, typeArguments, baseClass);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n this.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n\r\n var memoryOffset: u32 = 0;\r\n if (baseClass) {\r\n memoryOffset = baseClass.currentMemoryOffset;\r\n if (baseClass.members) {\r\n if (!instance.members) instance.members = new Map();\r\n for (let inheritedMember of baseClass.members.values()) {\r\n instance.members.set(inheritedMember.simpleName, inheritedMember);\r\n }\r\n }\r\n }\r\n\r\n // Resolve constructor\r\n if (this.constructorPrototype) {\r\n let partialConstructor = this.constructorPrototype.resolvePartial(typeArguments); // reports\r\n if (partialConstructor) instance.constructorInstance = partialConstructor.resolve(); // reports\r\n }\r\n\r\n // Resolve instance members\r\n if (this.instanceMembers) {\r\n for (let member of this.instanceMembers.values()) {\r\n switch (member.kind) {\r\n\r\n // Lay out fields in advance\r\n case ElementKind.FIELD_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let fieldDeclaration = (member).declaration;\r\n if (!fieldDeclaration.type) {\r\n throw new Error(\"type expected\"); // TODO: check if parent class defines a type\r\n }\r\n let fieldType = this.program.resolveType( // reports\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments\r\n );\r\n if (!fieldType) 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: {\r\n if (memoryOffset & 1) ++memoryOffset;\r\n break;\r\n }\r\n case 4: {\r\n if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1;\r\n break;\r\n }\r\n case 8: {\r\n if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n fieldInstance.memoryOffset = memoryOffset;\r\n memoryOffset += fieldType.byteSize;\r\n instance.members.set(member.simpleName, fieldInstance);\r\n break;\r\n }\r\n\r\n // Partially resolve methods as these might have type arguments on their own\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let partialPrototype = (member).resolvePartial(typeArguments); // reports\r\n if (partialPrototype) {\r\n partialPrototype.internalName = internalName + INSTANCE_DELIMITER + partialPrototype.simpleName;\r\n instance.members.set(member.simpleName, partialPrototype);\r\n }\r\n break;\r\n }\r\n\r\n // Clone properties and partially resolve the wrapped accessors for consistence with other methods\r\n case ElementKind.PROPERTY: {\r\n if (!instance.members) instance.members = new Map();\r\n let getterPrototype = assert((member).getterPrototype);\r\n let setterPrototype = (member).setterPrototype;\r\n let instanceProperty = new Property(\r\n this.program,\r\n member.simpleName,\r\n internalName + INSTANCE_DELIMITER + member.simpleName,\r\n this\r\n );\r\n let partialGetterPrototype = getterPrototype.resolvePartial(typeArguments);\r\n if (!partialGetterPrototype) return null;\r\n partialGetterPrototype.internalName = (\r\n internalName + INSTANCE_DELIMITER + partialGetterPrototype.simpleName\r\n );\r\n instanceProperty.getterPrototype = partialGetterPrototype;\r\n if (setterPrototype) {\r\n let partialSetterPrototype = setterPrototype.resolvePartial(typeArguments);\r\n if (!partialSetterPrototype) return null;\r\n partialSetterPrototype.internalName = (\r\n internalName + INSTANCE_DELIMITER + partialSetterPrototype.simpleName\r\n );\r\n instanceProperty.setterPrototype = partialSetterPrototype;\r\n }\r\n instance.members.set(member.simpleName, instanceProperty);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n // Fully resolve operator overloads (don't have type parameters on their own)\r\n for (let [kind, prototype] of this.overloadPrototypes) {\r\n assert(kind != OperatorKind.INVALID);\r\n let operatorInstance: Function | null;\r\n if (prototype.is(CommonFlags.INSTANCE)) {\r\n let operatorPartial = prototype.resolvePartial(typeArguments); // reports\r\n if (!operatorPartial) continue;\r\n operatorInstance = operatorPartial.resolve(); // reports\r\n } else {\r\n operatorInstance = prototype.resolve(); // reports\r\n }\r\n if (!operatorInstance) continue;\r\n let overloads = instance.overloads;\r\n if (!overloads) instance.overloads = overloads = new Map();\r\n overloads.set(kind, operatorInstance);\r\n }\r\n\r\n instance.currentMemoryOffset = memoryOffset; // offsetof() is the class' byte size in memory\r\n return instance;\r\n }\r\n\r\n /** Resolves the specified type arguments prior to resolving this prototype to an instance. */\r\n resolveUsingTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n alternativeReportNode: Node | null\r\n ): Class | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (this.is(CommonFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.program.resolveTypeArguments(\r\n this.declaration.typeParameters,\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n } else {\r\n assert(typeArgumentNodes == null || !typeArgumentNodes.length);\r\n }\r\n return this.resolve(resolvedTypeArguments, contextualTypeArguments);\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A resolved class. */\r\nexport class Class extends Element {\r\n\r\n kind = ElementKind.CLASS;\r\n\r\n /** Prototype reference. */\r\n prototype: ClassPrototype;\r\n /** Resolved type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Resolved class type. */\r\n type: Type;\r\n /** Base class, if applicable. */\r\n base: Class | null;\r\n /** Contextual type arguments for fields and methods. */\r\n contextualTypeArguments: Map | null = null;\r\n /** Current member memory offset. */\r\n currentMemoryOffset: u32 = 0;\r\n /** Constructor instance. */\r\n constructorInstance: Function | null = null;\r\n /** Operator overloads. */\r\n overloads: Map | null = null;\r\n\r\n /** Constructs a new class. */\r\n constructor(\r\n prototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] | null = null,\r\n base: Class | null = null\r\n ) {\r\n super(prototype.program, simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.typeArguments = typeArguments;\r\n this.type = prototype.program.options.usizeType.asClass(this);\r\n this.base = base;\r\n\r\n // inherit static members and contextual type arguments from base class\r\n if (base) {\r\n let inheritedTypeArguments = base.contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [baseName, baseType] of inheritedTypeArguments) {\r\n this.contextualTypeArguments.set(baseName, baseType);\r\n }\r\n }\r\n }\r\n\r\n // apply instance-specific contextual type arguments\r\n var declaration = this.prototype.declaration;\r\n var i: i32, k: i32;\r\n if (declaration) { // irrelevant for built-ins\r\n let typeParameters = declaration.typeParameters;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n if (k) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (i = 0; i < k; ++i) {\r\n this.contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n }\r\n } else if (typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n }\r\n }\r\n\r\n /** Tests if a value of this class type is assignable to a target of the specified class type. */\r\n isAssignableTo(target: Class): bool {\r\n var current: Class | null = this;\r\n do if (current == target) return true;\r\n while (current = current.base);\r\n return false;\r\n }\r\n\r\n /** Looks up the operator overload of the specified kind. */\r\n lookupOverload(kind: OperatorKind, unchecked: bool = false): Function | null {\r\n if (unchecked) {\r\n switch (kind) {\r\n case OperatorKind.INDEXED_GET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_GET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n case OperatorKind.INDEXED_SET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_SET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n var instance: Class | null = this;\r\n do {\r\n let overloads = instance.overloads;\r\n if (overloads) {\r\n let overload = overloads.get(kind);\r\n if (overload) return overload;\r\n }\r\n } while (instance = instance.base);\r\n return null;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A yet unresolved interface. */\r\nexport class InterfacePrototype extends ClassPrototype {\r\n\r\n kind = ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: InterfaceDeclaration; // more specific\r\n\r\n /** Constructs a new interface prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: InterfaceDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, declaration, decoratorFlags);\r\n }\r\n}\r\n\r\n/** A resolved interface. */\r\nexport class Interface extends Class {\r\n\r\n kind = ElementKind.INTERFACE;\r\n\r\n /** Prototype reference. */\r\n prototype: InterfacePrototype; // more specific\r\n /** Base interface, if applcable. */\r\n base: Interface | null; // more specific\r\n\r\n /** Constructs a new interface. */\r\n constructor(\r\n prototype: InterfacePrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, simpleName, internalName, typeArguments, base);\r\n }\r\n}\r\n\r\n/** Control flow flags indicating specific conditions. */\r\nexport const enum FlowFlags {\r\n /** No specific conditions. */\r\n NONE = 0,\r\n\r\n // 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","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\r\n * Mappings from AssemblyScript types to WebAssembly types.\r\n * @module types\r\n *//***/\r\n\r\nimport {\r\n Class,\r\n FunctionTarget\r\n} 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","/**\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 ) {\r\n ++this.pos;\r\n }\r\n break;\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.SPACE: {\r\n ++this.pos;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EXCLAMATION_EQUALS_EQUALS;\r\n }\r\n return Token.EXCLAMATION_EQUALS;\r\n }\r\n return Token.EXCLAMATION;\r\n }\r\n case CharCode.DOUBLEQUOTE:\r\n case CharCode.SINGLEQUOTE:\r\n case CharCode.BACKTICK: { // TODO\r\n return Token.STRINGLITERAL; // expects a call to readString\r\n }\r\n case CharCode.PERCENT: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.PERCENT_EQUALS;\r\n }\r\n return Token.PERCENT;\r\n }\r\n case CharCode.AMPERSAND: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.AMPERSAND) {\r\n ++this.pos;\r\n return Token.AMPERSAND_AMPERSAND;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.AMPERSAND_EQUALS;\r\n }\r\n }\r\n return Token.AMPERSAND;\r\n }\r\n case CharCode.OPENPAREN: {\r\n ++this.pos;\r\n return Token.OPENPAREN;\r\n }\r\n case CharCode.CLOSEPAREN: {\r\n ++this.pos;\r\n return Token.CLOSEPAREN;\r\n }\r\n case CharCode.ASTERISK: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.ASTERISK_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.ASTERISK_ASTERISK_EQUALS;\r\n }\r\n return Token.ASTERISK_ASTERISK;\r\n }\r\n }\r\n return Token.ASTERISK;\r\n }\r\n case CharCode.PLUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.PLUS) {\r\n ++this.pos;\r\n return Token.PLUS_PLUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.PLUS_EQUALS;\r\n }\r\n }\r\n return Token.PLUS;\r\n }\r\n case CharCode.COMMA: {\r\n ++this.pos;\r\n return Token.COMMA;\r\n }\r\n case CharCode.MINUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.MINUS) {\r\n ++this.pos;\r\n return Token.MINUS_MINUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.MINUS_EQUALS;\r\n }\r\n }\r\n return Token.MINUS;\r\n }\r\n case CharCode.DOT: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (isDecimalDigit(text.charCodeAt(this.pos))) {\r\n --this.pos;\r\n return Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n if (\r\n maxTokenLength > 2 && this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.DOT &&\r\n text.charCodeAt(this.pos + 1) == CharCode.DOT\r\n ) {\r\n this.pos += 2;\r\n return Token.DOT_DOT_DOT;\r\n }\r\n }\r\n return Token.DOT;\r\n }\r\n case CharCode.SLASH: {\r\n let commentStartPos = this.pos;\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.SLASH) { // single-line\r\n let commentKind = CommentKind.LINE;\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n ++this.pos;\r\n commentKind = CommentKind.TRIPLE;\r\n }\r\n while (++this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LINEFEED) {\r\n ++this.pos;\r\n break;\r\n }\r\n }\r\n if (this.onComment) {\r\n this.onComment(\r\n commentKind,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) { // multi-line\r\n let closed = false;\r\n while (++this.pos < this.end) {\r\n c = text.charCodeAt(this.pos);\r\n if (\r\n c == CharCode.ASTERISK &&\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n this.pos += 2;\r\n closed = true;\r\n break;\r\n }\r\n }\r\n if (!closed) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n this.range(this.pos), \"*/\"\r\n );\r\n } else if (this.onComment) {\r\n this.onComment(\r\n CommentKind.BLOCK,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.SLASH_EQUALS;\r\n }\r\n }\r\n return Token.SLASH;\r\n }\r\n case CharCode._0:\r\n case CharCode._1:\r\n case CharCode._2:\r\n case CharCode._3:\r\n case CharCode._4:\r\n case CharCode._5:\r\n case CharCode._6:\r\n case CharCode._7:\r\n case CharCode._8:\r\n case CharCode._9: {\r\n return this.testInteger()\r\n ? Token.INTEGERLITERAL // expects a call to readInteger\r\n : Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n case CharCode.COLON: {\r\n ++this.pos;\r\n return Token.COLON;\r\n }\r\n case CharCode.SEMICOLON: {\r\n ++this.pos;\r\n return Token.SEMICOLON;\r\n }\r\n case CharCode.LESSTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LESSTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.LESSTHAN_LESSTHAN_EQUALS;\r\n }\r\n return Token.LESSTHAN_LESSTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.LESSTHAN_EQUALS;\r\n }\r\n }\r\n return Token.LESSTHAN;\r\n }\r\n case CharCode.EQUALS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EQUALS_EQUALS_EQUALS;\r\n }\r\n return Token.EQUALS_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n return Token.EQUALS_GREATERTHAN;\r\n }\r\n }\r\n return Token.EQUALS;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (maxTokenLength > 2 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 3 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN;\r\n }\r\n case CharCode.QUESTION: {\r\n ++this.pos;\r\n return Token.QUESTION;\r\n }\r\n case CharCode.OPENBRACKET: {\r\n ++this.pos;\r\n return Token.OPENBRACKET;\r\n }\r\n case CharCode.CLOSEBRACKET: {\r\n ++this.pos;\r\n return Token.CLOSEBRACKET;\r\n }\r\n case CharCode.CARET: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.CARET_EQUALS;\r\n }\r\n return Token.CARET;\r\n }\r\n case CharCode.OPENBRACE: {\r\n ++this.pos;\r\n return Token.OPENBRACE;\r\n }\r\n case CharCode.BAR: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.BAR) {\r\n ++this.pos;\r\n return Token.BAR_BAR;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.BAR_EQUALS;\r\n }\r\n }\r\n return Token.BAR;\r\n }\r\n case CharCode.CLOSEBRACE: {\r\n ++this.pos;\r\n return Token.CLOSEBRACE;\r\n }\r\n case CharCode.TILDE: {\r\n ++this.pos;\r\n return Token.TILDE;\r\n }\r\n case CharCode.AT: {\r\n ++this.pos;\r\n return Token.AT;\r\n }\r\n default: {\r\n if (isIdentifierStart(c)) {\r\n if (isKeywordCharacter(c)) {\r\n let posBefore = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(c = text.charCodeAt(this.pos))\r\n ) {\r\n if (!isKeywordCharacter(c)) {\r\n this.pos = posBefore;\r\n return Token.IDENTIFIER;\r\n }\r\n }\r\n let keywordText = text.substring(posBefore, this.pos);\r\n let keywordToken = tokenFromKeyword(keywordText);\r\n if (\r\n keywordToken != Token.INVALID &&\r\n identifierHandling !== IdentifierHandling.ALWAYS &&\r\n !(\r\n identifierHandling === IdentifierHandling.PREFER &&\r\n tokenIsAlsoIdentifier(keywordToken)\r\n )\r\n ) {\r\n return keywordToken;\r\n }\r\n this.pos = posBefore;\r\n }\r\n return Token.IDENTIFIER; // expects a call to readIdentifier\r\n } else if (isWhiteSpace(c)) {\r\n ++this.pos;\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Invalid_character,\r\n this.range(this.pos, this.pos + 1)\r\n );\r\n ++this.pos;\r\n return Token.INVALID;\r\n }\r\n }\r\n }\r\n return Token.ENDOFFILE;\r\n }\r\n\r\n peek(\r\n checkOnNewLine: bool = false,\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxCompoundLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n if (this.nextToken < 0) {\r\n let posBefore = this.pos;\r\n let tokenBefore = this.token;\r\n let tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n this.nextTokenPos = this.tokenPos;\r\n if (checkOnNewLine) {\r\n this.nextTokenOnNewLine = false;\r\n while (--this.tokenPos > posBefore) {\r\n if (isLineBreak(text.charCodeAt(this.tokenPos))) {\r\n this.nextTokenOnNewLine = true;\r\n break;\r\n }\r\n }\r\n }\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n }\r\n return this.nextToken;\r\n }\r\n\r\n skipIdentifier(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.PREFER);\r\n }\r\n\r\n skipIdentifierName(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.ALWAYS);\r\n }\r\n\r\n skip(token: Token, identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): bool {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n var maxCompoundLength = i32.MAX_VALUE;\r\n switch (token) {\r\n case Token.GREATERTHAN: { // where parsing type arguments\r\n maxCompoundLength = 1;\r\n break;\r\n }\r\n }\r\n this.token = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n if (this.token == token) {\r\n this.nextToken = -1;\r\n return true;\r\n } else {\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n return false;\r\n }\r\n }\r\n\r\n mark(): State {\r\n var state: State;\r\n if (reusableState) {\r\n state = reusableState;\r\n reusableState = null;\r\n } else {\r\n state = new State();\r\n }\r\n state.pos = this.pos;\r\n state.token = this.token;\r\n state.tokenPos = this.tokenPos;\r\n return state;\r\n }\r\n\r\n discard(state: State): void {\r\n reusableState = state;\r\n }\r\n\r\n reset(state: State): void {\r\n this.pos = state.pos;\r\n this.token = state.token;\r\n this.tokenPos = state.tokenPos;\r\n this.nextToken = -1;\r\n }\r\n\r\n range(start: i32 = -1, end: i32 = -1): Range {\r\n if (start < 0) {\r\n start = this.tokenPos;\r\n end = this.pos;\r\n } else if (end < 0) {\r\n end = start;\r\n }\r\n return new Range(this.source, start, end);\r\n }\r\n\r\n readIdentifier(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(text.charCodeAt(this.pos))\r\n );\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readString(): string {\r\n var text = this.source.text;\r\n var quote = text.charCodeAt(this.pos++);\r\n var start = this.pos;\r\n var result = \"\";\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.end)\r\n );\r\n break;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == quote) {\r\n result += text.substring(start, this.pos++);\r\n break;\r\n }\r\n if (c == CharCode.BACKSLASH) {\r\n result += text.substring(start, this.pos);\r\n result += this.readEscapeSequence();\r\n start = this.pos;\r\n continue;\r\n }\r\n if (isLineBreak(c)) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n return result;\r\n }\r\n\r\n readEscapeSequence(): string {\r\n if (++this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.end)\r\n );\r\n return \"\";\r\n }\r\n\r\n var text = this.source.text;\r\n var c = text.charCodeAt(this.pos++);\r\n switch (c) {\r\n case CharCode._0: return \"\\0\";\r\n case CharCode.b: return \"\\b\";\r\n case CharCode.t: return \"\\t\";\r\n case CharCode.n: return \"\\n\";\r\n case CharCode.v: return \"\\v\";\r\n case CharCode.f: return \"\\f\";\r\n case CharCode.r: return \"\\r\";\r\n case CharCode.SINGLEQUOTE: return \"'\";\r\n case CharCode.DOUBLEQUOTE: return \"\\\"\";\r\n case CharCode.u: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.OPENBRACE\r\n ) {\r\n ++this.pos;\r\n return this.readExtendedUnicodeEscape(); // \\u{DDDDDDDD}\r\n }\r\n return this.readUnicodeEscape(); // \\uDDDD\r\n }\r\n case CharCode.CARRIAGERETURN: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // fall through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: return \"\";\r\n default: return String.fromCharCode(c);\r\n }\r\n }\r\n\r\n readRegexpPattern(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var escaped = false;\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.end)\r\n );\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.BACKSLASH) {\r\n ++this.pos;\r\n escaped = true;\r\n continue;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.SLASH && !escaped) break;\r\n if (isLineBreak(c)) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n escaped = false;\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readRegexpFlags(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var flags = 0;\r\n while (this.pos < this.end) {\r\n let c: i32 = text.charCodeAt(this.pos);\r\n if (!isIdentifierPart(c)) break;\r\n ++this.pos;\r\n\r\n // make sure each supported flag is unique\r\n switch (c) {\r\n case CharCode.g: {\r\n flags |= flags & 1 ? -1 : 1;\r\n break;\r\n }\r\n case CharCode.i: {\r\n flags |= flags & 2 ? -1 : 2;\r\n break;\r\n }\r\n case CharCode.m: {\r\n flags |= flags & 4 ? -1 : 4;\r\n break;\r\n }\r\n default: {\r\n flags = -1;\r\n break;\r\n }\r\n }\r\n }\r\n if (flags == -1) {\r\n this.error(\r\n DiagnosticCode.Invalid_regular_expression_flags,\r\n this.range(start, this.pos)\r\n );\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n testInteger(): bool {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 1 < this.end) {\r\n switch (text.charCodeAt(this.pos + 2)) {\r\n case CharCode.X:\r\n case CharCode.x:\r\n case CharCode.B:\r\n case CharCode.b:\r\n case CharCode.O:\r\n case CharCode.o: return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode.DOT || c == CharCode.E || c == CharCode.e) {\r\n return false;\r\n }\r\n if ((c < CharCode._0 || c > CharCode._9) && c != CharCode._) break;\r\n // does not validate separator placement (this is done in readXYInteger)\r\n pos++;\r\n }\r\n return true;\r\n }\r\n\r\n readInteger(): I64 {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n switch (text.charCodeAt(this.pos + 1)) {\r\n case CharCode.X:\r\n case CharCode.x: {\r\n this.pos += 2;\r\n return this.readHexInteger();\r\n }\r\n case CharCode.B:\r\n case CharCode.b: {\r\n this.pos += 2;\r\n return this.readBinaryInteger();\r\n }\r\n case CharCode.O:\r\n case CharCode.o: {\r\n this.pos += 2;\r\n return this.readOctalInteger();\r\n }\r\n }\r\n if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n let start = this.pos;\r\n ++this.pos;\r\n let value = this.readOctalInteger();\r\n this.error(\r\n DiagnosticCode.Octal_literals_are_not_allowed_in_strict_mode,\r\n this.range(start, this.pos)\r\n );\r\n return value;\r\n }\r\n }\r\n return this.readDecimalInteger();\r\n }\r\n\r\n readHexInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_16 = i64_new(16, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 16 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n // value = value * 16 + 10 + c - CharCode.A;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.A, 0)\r\n );\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n // value = value * 16 + 10 + c - CharCode.a;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.a, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readDecimalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_10 = i64_new(10, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 10 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_10),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readOctalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_8 = i64_new(8, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._7) {\r\n // value = value * 8 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_8),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Octal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readBinaryInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_2 = i64_new(2, 0);\r\n var i64_1 = i64_new(1, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode._0) {\r\n // value = value * 2;\r\n value = i64_mul(\r\n value,\r\n i64_2\r\n );\r\n } else if (c == CharCode._1) {\r\n // value = value * 2 + 1;\r\n value = i64_add(\r\n i64_mul(value, i64_2),\r\n i64_1\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Binary_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readFloat(): f64 {\r\n // var text = this.source.text;\r\n // if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n // switch (text.charCodeAt(this.pos + 1)) {\r\n // case CharCode.X:\r\n // case CharCode.x: {\r\n // this.pos += 2;\r\n // return this.readHexFloat();\r\n // }\r\n // }\r\n // }\r\n return this.readDecimalFloat();\r\n }\r\n\r\n readDecimalFloat(): f64 {\r\n // TODO: numeric separators (parseFloat can't handle these)\r\n var start = this.pos;\r\n var text = this.source.text;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n if (this.pos < this.end && text.charCodeAt(this.pos) == CharCode.DOT) {\r\n ++this.pos;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n if (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.E || c == CharCode.e) {\r\n if (\r\n ++this.pos < this.end && (\r\n text.charCodeAt(this.pos) == CharCode.MINUS ||\r\n text.charCodeAt(this.pos) == CharCode.PLUS\r\n ) &&\r\n isDecimalDigit(text.charCodeAt(this.pos + 1))\r\n ) {\r\n ++this.pos;\r\n }\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n }\r\n return parseFloat(text.substring(start, this.pos));\r\n }\r\n\r\n readHexFloat(): f64 {\r\n throw new Error(\"not implemented\"); // TBD\r\n }\r\n\r\n readUnicodeEscape(): string {\r\n var remain = 4;\r\n var value = 0;\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos++);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n value = value * 16 + c - CharCode._0;\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n value = value * 16 + 10 + c - CharCode.A;\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n value = value * 16 + 10 + c - CharCode.a;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(this.pos - 1, this.pos)\r\n );\r\n return \"\";\r\n }\r\n if (--remain == 0) break;\r\n }\r\n if (remain) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.pos)\r\n );\r\n return \"\";\r\n }\r\n return String.fromCharCode(value);\r\n }\r\n\r\n private readExtendedUnicodeEscape(): string {\r\n var start = this.pos;\r\n var value = this.readHexInteger();\r\n var value32 = i64_low(value);\r\n var invalid = false;\r\n\r\n assert(!i64_high(value));\r\n if (value32 > 0x10FFFF) {\r\n this.error(\r\n DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n var text = this.source.text;\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(start, this.end)\r\n );\r\n invalid = true;\r\n } else if (text.charCodeAt(this.pos) == CharCode.CLOSEBRACE) {\r\n ++this.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unterminated_Unicode_escape_sequence,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n if (invalid) return \"\";\r\n return value32 < 65536\r\n ? String.fromCharCode(value32)\r\n : String.fromCharCode(\r\n (((value32 - 65536) / 1024 | 0) + 0xD800) as i32,\r\n ( (value32 - 65536) % 1024 + 0xDC00) as i32\r\n );\r\n }\r\n\r\n finish(): void {\r\n }\r\n}\r\n\r\n/** Tokenizer state as returned by {@link Tokenizer#mark} and consumed by {@link Tokenizer#reset}. */\r\nexport class State {\r\n /** Current position. */\r\n pos: i32;\r\n /** Current token. */\r\n token: Token;\r\n /** Current token's position. */\r\n tokenPos: i32;\r\n}\r\n\r\n// Reusable state object to reduce allocations\r\nvar reusableState: State | null = null;\r\n","/**\n * Generated from diagnosticsMessages.json. Do not edit.\n * @module diagnostics\n *//***/\n\n/* tslint:disable:max-line-length */\n\n/** Enum of available diagnostic codes. */\nexport enum DiagnosticCode {\n Operation_not_supported = 100,\n Operation_is_unsafe = 101,\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\n Type_0_cannot_be_changed_to_type_1 = 202,\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\n Basic_type_0_cannot_be_nullable = 204,\n Cannot_export_a_mutable_global = 205,\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\n Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa = 207,\n Unmanaged_classes_cannot_implement_interfaces = 208,\n Invalid_regular_expression_flags = 209,\n Implementation_0_must_match_the_signature_1 = 210,\n Class_0_is_sealed_and_cannot_be_extended = 211,\n Decorator_0_is_not_valid_here = 212,\n Duplicate_decorator = 213,\n An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf = 214,\n Optional_parameter_must_have_an_initializer = 215,\n Unterminated_string_literal = 1002,\n Identifier_expected = 1003,\n _0_expected = 1005,\n A_file_cannot_have_a_reference_to_itself = 1006,\n Trailing_comma_not_allowed = 1009,\n Unexpected_token = 1012,\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\n Parameter_cannot_have_question_mark_and_initializer = 1015,\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\n Enum_member_must_have_initializer = 1061,\n Statements_are_not_allowed_in_ambient_contexts = 1036,\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\n _0_modifier_cannot_be_used_here = 1042,\n A_rest_parameter_cannot_be_optional = 1047,\n A_rest_parameter_cannot_have_an_initializer = 1048,\n A_set_accessor_must_have_exactly_one_parameter = 1049,\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\n A_get_accessor_cannot_have_parameters = 1054,\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\n An_accessor_cannot_have_type_parameters = 1094,\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\n Type_parameter_list_cannot_be_empty = 1098,\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\n Expression_expected = 1109,\n Type_expected = 1110,\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\n Duplicate_label_0 = 1114,\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\n Digit_expected = 1124,\n Hexadecimal_digit_expected = 1125,\n Unexpected_end_of_text = 1126,\n Invalid_character = 1127,\n _case_or_default_expected = 1130,\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\n Type_argument_expected = 1140,\n String_literal_expected = 1141,\n Line_break_not_permitted_here = 1142,\n Declaration_expected = 1146,\n _const_declarations_must_be_initialized = 1155,\n Unterminated_regular_expression_literal = 1161,\n Interface_declaration_cannot_have_implements_clause = 1176,\n Binary_digit_expected = 1177,\n Octal_digit_expected = 1178,\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\n Unterminated_Unicode_escape_sequence = 1199,\n Decorators_are_not_valid_here = 1206,\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\n A_class_may_only_extend_another_class = 1311,\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\n Duplicate_identifier_0 = 2300,\n Cannot_find_name_0 = 2304,\n Module_0_has_no_exported_member_1 = 2305,\n Generic_type_0_requires_1_type_argument_s = 2314,\n Type_0_is_not_generic = 2315,\n Type_0_is_not_assignable_to_type_1 = 2322,\n Index_signature_is_missing_in_type_0 = 2329,\n _this_cannot_be_referenced_in_current_location = 2332,\n _super_can_only_be_referenced_in_a_derived_class = 2335,\n Property_0_does_not_exist_on_type_1 = 2339,\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\n _get_and_set_accessor_must_have_the_same_type = 2380,\n Constructor_implementation_is_missing = 2390,\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\n Multiple_constructor_implementations_are_not_allowed = 2392,\n Duplicate_function_implementation = 2393,\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\n Type_0_has_no_property_1 = 2460,\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\n Index_signature_in_type_0_only_permits_reading = 2542,\n Expected_0_arguments_but_got_1 = 2554,\n Expected_at_least_0_arguments_but_got_1 = 2555,\n Expected_0_type_arguments_but_got_1 = 2558,\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\n Namespace_0_has_no_exported_member_1 = 2694,\n File_0_not_found = 6054,\n Numeric_separators_are_not_allowed_here = 6188,\n Multiple_consecutive_numeric_separators_are_not_permitted = 6189\n}\n\n/** Translates a diagnostic code to its respective string. */\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\n switch (code) {\n case 100: return \"Operation not supported.\";\n case 101: return \"Operation is unsafe.\";\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\n case 204: return \"Basic type '{0}' cannot be nullable.\";\n case 205: return \"Cannot export a mutable global.\";\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\n case 207: return \"Unmanaged classes cannot extend managed classes and vice-versa.\";\n case 208: return \"Unmanaged classes cannot implement interfaces.\";\n case 209: return \"Invalid regular expression flags.\";\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\n case 212: return \"Decorator '{0}' is not valid here.\";\n case 213: return \"Duplicate decorator.\";\n case 214: return \"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.\";\n case 215: return \"Optional parameter must have an initializer.\";\n case 1002: return \"Unterminated string literal.\";\n case 1003: return \"Identifier expected.\";\n case 1005: return \"'{0}' expected.\";\n case 1006: return \"A file cannot have a reference to itself.\";\n case 1009: return \"Trailing comma not allowed.\";\n case 1012: return \"Unexpected token.\";\n case 1014: return \"A rest parameter must be last in a parameter list.\";\n case 1015: return \"Parameter cannot have question mark and initializer.\";\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\n case 1061: return \"Enum member must have initializer.\";\n case 1036: return \"Statements are not allowed in ambient contexts.\";\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\n case 1042: return \"'{0}' modifier cannot be used here.\";\n case 1047: return \"A rest parameter cannot be optional.\";\n case 1048: return \"A rest parameter cannot have an initializer.\";\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\n case 1054: return \"A 'get' accessor cannot have parameters.\";\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\n case 1094: return \"An accessor cannot have type parameters.\";\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\n case 1098: return \"Type parameter list cannot be empty.\";\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\n case 1108: return \"A 'return' statement can only be used within a function body.\";\n case 1109: return \"Expression expected.\";\n case 1110: return \"Type expected.\";\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\n case 1114: return \"Duplicate label '{0}'.\";\n case 1121: return \"Octal literals are not allowed in strict mode.\";\n case 1124: return \"Digit expected.\";\n case 1125: return \"Hexadecimal digit expected.\";\n case 1126: return \"Unexpected end of text.\";\n case 1127: return \"Invalid character.\";\n case 1130: return \"'case' or 'default' expected.\";\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\n case 1140: return \"Type argument expected.\";\n case 1141: return \"String literal expected.\";\n case 1142: return \"Line break not permitted here.\";\n case 1146: return \"Declaration expected.\";\n case 1155: return \"'const' declarations must be initialized.\";\n case 1161: return \"Unterminated regular expression literal.\";\n case 1176: return \"Interface declaration cannot have 'implements' clause.\";\n case 1177: return \"Binary digit expected.\";\n case 1178: return \"Octal digit expected.\";\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\n case 1199: return \"Unterminated Unicode escape sequence.\";\n case 1206: return \"Decorators are not valid here.\";\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\n case 1311: return \"A class may only extend another class.\";\n case 1317: return \"A parameter property cannot be declared using a rest parameter.\";\n case 2300: return \"Duplicate identifier '{0}'.\";\n case 2304: return \"Cannot find name '{0}'.\";\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\n case 2315: return \"Type '{0}' is not generic.\";\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\n case 2329: return \"Index signature is missing in type '{0}'.\";\n case 2332: return \"'this' cannot be referenced in current location.\";\n case 2335: return \"'super' can only be referenced in a derived class.\";\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\n case 2390: return \"Constructor implementation is missing.\";\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\n case 2392: return \"Multiple constructor implementations are not allowed.\";\n case 2393: return \"Duplicate function implementation.\";\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\n case 2460: return \"Type '{0}' has no property '{1}'.\";\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\n case 2554: return \"Expected {0} arguments, but got {1}.\";\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\n case 6054: return \"File '{0}' not found.\";\n case 6188: return \"Numeric separators are not allowed here.\";\n case 6189: return \"Multiple consecutive numeric separators are not permitted.\";\n default: return \"\";\n }\n}\n","/**\r\n * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileAllocate as compileBuiltinAllocate,\r\n compileAbort as compileBuiltinAbort\r\n} from \"./builtins\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module,\r\n MemorySegment,\r\n ExpressionRef,\r\n UnaryOp,\r\n BinaryOp,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionId,\r\n FunctionTypeRef,\r\n GlobalRef,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getFunctionBody,\r\n getGetLocalIndex,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName\r\n} from \"./module\";\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n INNER_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n STATIC_DELIMITER,\r\n GETTER_PREFIX,\r\n SETTER_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Program,\r\n ClassPrototype,\r\n Class,\r\n Element,\r\n ElementKind,\r\n Enum,\r\n Field,\r\n FunctionPrototype,\r\n Function,\r\n FunctionTarget,\r\n Global,\r\n Local,\r\n Namespace,\r\n EnumValue,\r\n Property,\r\n VariableLikeElement,\r\n FlowFlags,\r\n ConstantValueKind,\r\n Flow,\r\n OperatorKind,\r\n DecoratorFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n Token,\r\n operatorTokenToString\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n TypeNode,\r\n Source,\r\n Range,\r\n DecoratorKind,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DoStatement,\r\n EmptyStatement,\r\n EnumDeclaration,\r\n ExportStatement,\r\n ExpressionStatement,\r\n FunctionDeclaration,\r\n ForStatement,\r\n IfStatement,\r\n ImportStatement,\r\n InstanceOfExpression,\r\n InterfaceDeclaration,\r\n NamespaceDeclaration,\r\n ReturnStatement,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n VariableDeclaration,\r\n VariableStatement,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n Expression,\r\n AssertionExpression,\r\n BinaryExpression,\r\n CallExpression,\r\n CommaExpression,\r\n ElementAccessExpression,\r\n FloatLiteralExpression,\r\n FunctionExpression,\r\n IdentifierExpression,\r\n IntegerLiteralExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n NewExpression,\r\n ParenthesizedExpression,\r\n PropertyAccessExpression,\r\n TernaryExpression,\r\n ArrayLiteralExpression,\r\n StringLiteralExpression,\r\n UnaryPostfixExpression,\r\n UnaryPrefixExpression,\r\n FieldDeclaration,\r\n\r\n nodeIsConstantValue,\r\n isLastStatement,\r\n findDecorator\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n Signature,\r\n\r\n typesToNativeTypes\r\n} from \"./types\";\r\n\r\nimport {\r\n writeI32,\r\n writeI64,\r\n writeF32,\r\n writeF64\r\n} from \"./util\";\r\n\r\n/** Compilation target. */\r\nexport enum Target {\r\n /** WebAssembly with 32-bit pointers. */\r\n WASM32,\r\n /** WebAssembly with 64-bit pointers. Experimental and not supported by any runtime yet. */\r\n WASM64\r\n}\r\n\r\n/** Compiler options. */\r\nexport class Options {\r\n\r\n /** WebAssembly target. Defaults to {@link Target.WASM32}. */\r\n target: Target = Target.WASM32;\r\n /** If true, compiles everything instead of just reachable code. */\r\n noTreeShaking: bool = false;\r\n /** If true, replaces assertions with nops. */\r\n noAssert: bool = false;\r\n /** If true, imports the memory provided by the embedder. */\r\n importMemory: bool = false;\r\n /** If true, imports the function table provided by the embedder. */\r\n importTable: bool = false;\r\n /** If true, generates information necessary for source maps. */\r\n sourceMap: bool = false;\r\n /** Static memory start offset. */\r\n memoryBase: i32 = 0;\r\n /** Global aliases. */\r\n globalAliases: Map | null = null;\r\n /** Additional features to activate. */\r\n features: Feature = Feature.NONE;\r\n\r\n /** Hinted optimize level. Not applied by the compiler itself. */\r\n optimizeLevelHint: i32 = 0;\r\n /** Hinted shrink level. Not applied by the compiler itself. */\r\n shrinkLevelHint: i32 = 0;\r\n\r\n /** Tests if the target is WASM64 or, otherwise, WASM32. */\r\n get isWasm64(): bool {\r\n return this.target == Target.WASM64;\r\n }\r\n\r\n /** Gets the unsigned size type matching the target. */\r\n get usizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.usize64 : Type.usize32;\r\n }\r\n\r\n /** Gets the signed size type matching the target. */\r\n get isizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.isize64 : Type.isize32;\r\n }\r\n\r\n /** Gets the native size type matching the target. */\r\n get nativeSizeType(): NativeType {\r\n return this.target == Target.WASM64 ? NativeType.I64 : NativeType.I32;\r\n }\r\n\r\n /** Tests if a specific feature is activated. */\r\n hasFeature(feature: Feature): bool {\r\n return (this.features & feature) != 0;\r\n }\r\n}\r\n\r\n/** Indicates specific features to activate. */\r\nexport const enum Feature {\r\n /** No additional features. */\r\n NONE = 0,\r\n /** Sign extension operations. */\r\n SIGN_EXTENSION = 1 << 0, // see: https://github.com/WebAssembly/sign-extension-ops\r\n /** Mutable global imports and exports. */\r\n MUTABLE_GLOBAL = 1 << 1 // see: https://github.com/WebAssembly/mutable-global\r\n}\r\n\r\n/** Indicates the desired kind of a conversion. */\r\nexport const enum ConversionKind {\r\n /** No conversion. */\r\n NONE,\r\n /** Implicit conversion. */\r\n IMPLICIT,\r\n /** Explicit conversion. */\r\n EXPLICIT\r\n}\r\n\r\n/** Indicates the desired wrap mode of a conversion. */\r\nexport const enum WrapMode {\r\n /** No wrapping. */\r\n NONE,\r\n /** Wrap small integer values. */\r\n WRAP\r\n}\r\n\r\n/** Compiler interface. */\r\nexport class Compiler extends DiagnosticEmitter {\r\n\r\n /** Program reference. */\r\n program: Program;\r\n /** Provided options. */\r\n options: Options;\r\n /** Module instance being compiled. */\r\n module: Module;\r\n /** Current function in compilation. */\r\n currentFunction: Function;\r\n /** Current outer function in compilation, if compiling a function expression. */\r\n currentOuterFunction: Function | null = null;\r\n /** Current enum in compilation. */\r\n currentEnum: Enum | null = null;\r\n /** Current type in compilation. */\r\n currentType: Type = Type.void;\r\n /** Start function being compiled. */\r\n startFunctionInstance: Function;\r\n /** Start function statements. */\r\n startFunctionBody: ExpressionRef[];\r\n /** Counting memory offset. */\r\n memoryOffset: I64;\r\n /** Memory segments being compiled. */\r\n memorySegments: MemorySegment[] = [];\r\n /** Map of already compiled static string segments. */\r\n stringSegments: Map = new Map();\r\n /** Function table being compiled. */\r\n functionTable: Function[] = [];\r\n /** Argument count helper global. */\r\n argcVar: GlobalRef = 0;\r\n /** Argument count helper setter. */\r\n argcSet: FunctionRef = 0;\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n 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, []);\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.program.resolveType(declaration.type); // reports\r\n if (!resolvedType) return false;\r\n if (resolvedType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.type.range\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n\r\n // infer from initializer if not annotated\r\n } else if (declaration.initializer) { // infer type using void/NONE for literal inference\r\n initExpr = this.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 = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!instance) return null;\r\n instance.outerScope = outerScope;\r\n if (!this.compileFunction(instance)) return null; // reports\r\n return instance;\r\n }\r\n\r\n /** Either reuses or creates the function type matching the specified signature. */\r\n private ensureFunctionType(\r\n parameterTypes: Type[] | null,\r\n returnType: Type,\r\n thisType: Type | null = null\r\n ): FunctionTypeRef {\r\n var numParameters = parameterTypes ? parameterTypes.length : 0;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n if (parameterTypes) {\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = parameterTypes[i].toNativeType();\r\n }\r\n }\r\n var resultType = returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n let name = Signature.makeSignatureString(parameterTypes, returnType, thisType);\r\n typeRef = module.addFunctionType(name, resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n assert(!instance.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN));\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 alternativeReportNode: Node | null = null\r\n ): void {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.compileClassUsingTypeArguments(\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n }\r\n\r\n compileClassUsingTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var instance = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n if (!instance) return;\r\n this.compileClass(instance);\r\n }\r\n\r\n compileClass(instance: Class): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n var staticMembers = instance.prototype.members;\r\n if (staticMembers) {\r\n for (let element of staticMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [], null, null,\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], null, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], null, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n var ctorInstance = instance.constructorInstance;\r\n if (ctorInstance) this.compileFunction(ctorInstance);\r\n var instanceMembers = instance.members;\r\n if (instanceMembers) {\r\n for (let element of instanceMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n instance.contextualTypeArguments,\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n element.set(CommonFlags.COMPILED);\r\n if (!instance.is(CommonFlags.MODULE_EXPORT) || element.is(CommonFlags.PRIVATE)) break;\r\n let module = this.module;\r\n let name = (element).simpleName;\r\n let type = (element).type;\r\n let nativeType = type.toNativeType();\r\n let offset = (element).memoryOffset;\r\n let usizeType = this.options.usizeType;\r\n let nativeSizeType = this.options.nativeSizeType;\r\n\r\n // export an implicit getter: get:fieldName(this: usize) -> fieldType\r\n let getterName = mangleExportName(element, GETTER_PREFIX + name);\r\n module.addFunction(\r\n getterName,\r\n this.ensureFunctionType(null, type, usizeType),\r\n null,\r\n module.createLoad(\r\n type.byteSize,\r\n type.is(TypeFlags.SIGNED),\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(getterName, getterName);\r\n\r\n // export an implicit setter: set:fieldName(this: usize, value: fieldType) -> void\r\n if (element.is(CommonFlags.READONLY)) break;\r\n let setterName = mangleExportName(element, SETTER_PREFIX + name);\r\n module.addFunction(\r\n setterName,\r\n this.ensureFunctionType([ type ], Type.void, usizeType),\r\n null,\r\n module.createStore(\r\n type.byteSize,\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createGetLocal(1, nativeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(setterName, setterName);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], instance.contextualTypeArguments, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], instance.contextualTypeArguments, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n compileInterfaceDeclaration(\r\n declaration: InterfaceDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n // TODO\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n }\r\n\r\n // memory\r\n\r\n /** Adds a static memory segment with the specified data. */\r\n addMemorySegment(buffer: Uint8Array, alignment: i32 = 8): MemorySegment {\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n }\r\n\r\n // function table\r\n\r\n /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(CommonFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var functionTable = this.functionTable;\r\n var index = functionTable.length;\r\n if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) {\r\n // insert the trampoline if the function has optional parameters\r\n func = this.ensureTrampoline(func);\r\n }\r\n functionTable.push(func);\r\n func.functionTableIndex = index;\r\n return index;\r\n }\r\n\r\n // statements\r\n\r\n compileStatement(statement: Statement): ExpressionRef {\r\n var module = this.module;\r\n var stmt: ExpressionRef;\r\n switch (statement.kind) {\r\n case NodeKind.BLOCK: {\r\n stmt = this.compileBlockStatement(statement);\r\n break;\r\n }\r\n case NodeKind.BREAK: {\r\n stmt = this.compileBreakStatement(statement);\r\n break;\r\n }\r\n case NodeKind.CONTINUE: {\r\n stmt = this.compileContinueStatement(statement);\r\n break;\r\n }\r\n case NodeKind.DO: {\r\n stmt = this.compileDoStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EMPTY: {\r\n stmt = this.compileEmptyStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EXPRESSION: {\r\n stmt = this.compileExpressionStatement(statement);\r\n break;\r\n }\r\n case NodeKind.FOR: {\r\n stmt = this.compileForStatement(statement);\r\n break;\r\n }\r\n case NodeKind.IF: {\r\n stmt = this.compileIfStatement(statement);\r\n break;\r\n }\r\n case NodeKind.RETURN: {\r\n stmt = this.compileReturnStatement(statement);\r\n break;\r\n }\r\n case NodeKind.SWITCH: {\r\n stmt = this.compileSwitchStatement(statement);\r\n break;\r\n }\r\n case NodeKind.THROW: {\r\n stmt = this.compileThrowStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TRY: {\r\n stmt = this.compileTryStatement(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n stmt = this.compileVariableStatement(statement);\r\n if (!stmt) stmt = module.createNop();\r\n break;\r\n }\r\n case NodeKind.VOID: {\r\n stmt = this.compileVoidStatement(statement);\r\n break;\r\n }\r\n case NodeKind.WHILE: {\r\n stmt = this.compileWhileStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // type declarations must be top-level because function bodies are evaluated when\r\n // reachaable only.\r\n if (this.currentFunction == this.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 for (let i = 0; i < numDeclarations; ++i) {\r\n let declaration = declarations[i];\r\n let name = declaration.name.text;\r\n let type: Type | null = null;\r\n let initExpr: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = program.resolveType( // reports\r\n declaration.type,\r\n flow.contextualTypeArguments\r\n );\r\n if (!type) continue;\r\n if (declaration.initializer) {\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n } else if (declaration.initializer) { // infer type using void/NONE for proper literal inference\r\n initExpr = this.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 assert(false);\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n\r\n var currentType = this.currentType;\r\n if (conversionKind != ConversionKind.NONE && currentType != contextualType) {\r\n expr = this.convertExpression(expr, currentType, contextualType, conversionKind, wrapMode, expression);\r\n this.currentType = contextualType;\r\n } else if (wrapMode == WrapMode.WRAP) {\r\n expr = this.ensureSmallIntegerWrap(expr, currentType);\r\n }\r\n\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(\r\n expression: Expression,\r\n contextualType: Type,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.compileExpression(\r\n expression,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n wrapMode\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.precomputeExpressionRef(\r\n this.compileExpression(expression, contextualType, conversionKind, wrapMode)\r\n );\r\n }\r\n\r\n precomputeExpressionRef(expr: ExpressionRef): ExpressionRef {\r\n var module = this.module;\r\n var type = this.currentType;\r\n var nativeType = type.toNativeType();\r\n var funcRef = module.addTemporaryFunction(nativeType, null, expr);\r\n module.runPasses([ \"precompute\" ], funcRef);\r\n var ret = getFunctionBody(funcRef);\r\n module.removeTemporaryFunction();\r\n return ret;\r\n }\r\n\r\n convertExpression(\r\n expr: ExpressionRef,\r\n fromType: Type,\r\n toType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n assert(conversionKind != ConversionKind.NONE);\r\n var module = this.module;\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.VOID) {\r\n assert(toType.kind != TypeKind.VOID); // convertExpression should not be called with void -> void\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) 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.program.resolveType( // reports\r\n expression.toType,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!toType) return this.module.createUnreachable();\r\n return this.compileExpression(expression.expression, toType, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n private f32ModInstance: Function | null = null;\r\n private f64ModInstance: Function | null = null;\r\n private f32PowInstance: Function | null = null;\r\n private f64PowInstance: Function | null = null;\r\n\r\n compileBinaryExpression(\r\n expression: BinaryExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var left = expression.left;\r\n var right = expression.right;\r\n\r\n var leftExpr: ExpressionRef;\r\n var leftType: Type;\r\n var rightExpr: ExpressionRef;\r\n var rightType: Type;\r\n var commonType: Type | null;\r\n\r\n var expr: ExpressionRef;\r\n var compound = false;\r\n\r\n var operator = expression.operator;\r\n switch (operator) {\r\n case Token.LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n 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 = (prototype).resolve();\r\n }\r\n\r\n // Math.pow otherwise (result is f64)\r\n // TODO: should the result be converted back?\r\n } else {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n this.currentType,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(\r\n right,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n rightType = this.currentType;\r\n if (!(instance = this.f64PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64PowInstance = instance = (prototype).resolve();\r\n }\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case Token.SLASH_EQUALS: compound = true;\r\n case Token.SLASH: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n 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 = (prototype).resolve();\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let instance = this.f64ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64ModInstance = instance = (prototype).resolve();\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: compound = true;\r\n case Token.LESSTHAN_LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\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 currentFunction = this.currentFunction;\r\n var target = program.resolveExpression(expression, currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n\r\n // to compile just the value, we need to know the target's type\r\n var 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 prototype = (target).setterPrototype;\r\n if (prototype) {\r\n let instance = prototype.resolve(); // reports\r\n if (!instance) return this.module.createUnreachable();\r\n assert(instance.signature.parameterTypes.length == 1); // parser must guarantee this\r\n 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 (program.resolvedElementExpression) { // indexed access\r\n let isUnchecked = currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, (target).internalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (target).internalName\r\n );\r\n }\r\n return this.module.createUnreachable();\r\n }\r\n assert(indexedSet.signature.parameterTypes.length == 2); // parser must guarantee this\r\n 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.program.resolveExpression(expression, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let type = (target).type;\r\n 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.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let type = (target).type;\r\n this.currentType = tee ? type : Type.void;\r\n let nativeType = type.toNativeType();\r\n if (type.kind == TypeKind.BOOL) {\r\n // make sure bools are wrapped (usually are) when storing as 8 bits\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type);\r\n }\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let flow = currentFunction.flow;\r\n let tempLocal = currentFunction.getAndFreeTempLocal(\r\n type,\r\n !flow.canOverflow(valueWithCorrectType, type)\r\n );\r\n let tempLocalIndex = tempLocal.index;\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n return module.createBlock(null, [\r\n module.createSetLocal(tempLocalIndex, valueWithCorrectType),\r\n module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n module.createGetLocal(tempLocalIndex, nativeType),\r\n nativeType,\r\n (target).memoryOffset\r\n ),\r\n module.createGetLocal(tempLocalIndex, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n valueWithCorrectType,\r\n nativeType,\r\n (target).memoryOffset\r\n );\r\n }\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (target).setterPrototype;\r\n if (setterPrototype) {\r\n let setterInstance = setterPrototype.resolve(); // reports\r\n if (!setterInstance) return module.createUnreachable();\r\n\r\n // call just the setter if the return value isn't of interest\r\n if (!tee) {\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n return this.makeCallDirect(setterInstance, [ thisExpr, valueWithCorrectType ]);\r\n } else {\r\n return this.makeCallDirect(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n\r\n // otherwise call the setter first, then the getter\r\n let getterPrototype = (target).getterPrototype;\r\n assert(getterPrototype != null); // must have one if there is a setter\r\n let getterInstance = (getterPrototype).resolve(); // reports\r\n if (!getterInstance) return module.createUnreachable();\r\n let returnType = getterInstance.signature.returnType;\r\n let nativeReturnType = returnType.toNativeType();\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(returnType, false);\r\n let tempLocalIndex = tempLocal.index;\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ // set and remember the target\r\n module.createTeeLocal(tempLocalIndex, thisExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [ // get from remembered target\r\n module.createGetLocal(tempLocalIndex, nativeReturnType)\r\n ])\r\n ], nativeReturnType);\r\n } else {\r\n // note that this must be performed here because `resolved` is shared\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCallDirect(getterInstance)\r\n ], nativeReturnType);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, target.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.program.resolvedElementExpression;\r\n if (elementExpression) {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, target.internalName\r\n );\r\n this.currentType = tee ? indexedGet.signature.returnType : Type.void;\r\n return module.createUnreachable();\r\n }\r\n let targetType = (target).type;\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let elementExpr = this.compileExpression(\r\n elementExpression,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let tempLocalTarget = currentFunction.getTempLocal(targetType, false);\r\n let tempLocalElement = currentFunction.getAndFreeTempLocal(this.currentType, false);\r\n let returnType = indexedGet.signature.returnType;\r\n this.currentFunction.freeTempLocal(tempLocalTarget);\r\n return module.createBlock(null, [\r\n this.makeCallDirect(indexedSet, [\r\n module.createTeeLocal(tempLocalTarget.index, thisExpr),\r\n module.createTeeLocal(tempLocalElement.index, elementExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(indexedGet, [\r\n module.createGetLocal(tempLocalTarget.index, tempLocalTarget.type.toNativeType()),\r\n module.createGetLocal(tempLocalElement.index, tempLocalElement.type.toNativeType())\r\n ])\r\n ], returnType.toNativeType());\r\n } else {\r\n return this.makeCallDirect(indexedSet, [\r\n thisExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n }\r\n // fall-through\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var target = this.program.resolveExpression(expression.expression, currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n var signature: Signature | null;\r\n var indexArg: ExpressionRef;\r\n switch (target.kind) {\r\n\r\n // direct call: concrete function\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let prototype = target;\r\n let typeArguments = expression.typeArguments;\r\n\r\n // builtins handle present respectively omitted type arguments on their own\r\n if (prototype.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return this.compileCallExpressionBuiltin(prototype, expression, contextualType);\r\n }\r\n\r\n let instance: Function | null = null;\r\n\r\n // resolve generic call if type arguments have been provided\r\n if (typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.expression.range, prototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n instance = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n\r\n // infer generic call if type arguments have been omitted\r\n } else if (prototype.is(CommonFlags.GENERIC)) {\r\n let inferredTypes = new Map();\r\n let typeParameters = assert(prototype.declaration.typeParameters);\r\n let numTypeParameters = typeParameters.length;\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n inferredTypes.set(typeParameters[i].name.text, null);\r\n }\r\n // let numInferred = 0;\r\n let parameterTypes = prototype.declaration.signature.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.program.resolveType(\r\n parameterTypes[i].type,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n true\r\n );\r\n if (!concreteType) return module.createUnreachable();\r\n argumentExprs[i] = this.compileExpression(\r\n argumentExpression,\r\n concreteType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n let resolvedTypeArguments = new Array(numTypeParameters);\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n let inferredType = assert(inferredTypes.get(typeParameters[i].name.text)); // TODO\r\n resolvedTypeArguments[i] = inferredType;\r\n }\r\n instance = prototype.resolve(\r\n resolvedTypeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n return this.makeCallDirect(instance, argumentExprs);\r\n // TODO: this skips inlining because inlining requires compiling its temporary locals in\r\n // the scope of the inlined flow. might need another mechanism to lock temp. locals early,\r\n // so inlining can be performed in `makeCallDirect` instead?\r\n\r\n // otherwise resolve the non-generic call as usual\r\n } else {\r\n instance = prototype.resolve(\r\n null,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n }\r\n if (!instance) return this.module.createUnreachable();\r\n\r\n // compile 'this' expression if an instance method\r\n let thisExpr: ExpressionRef = 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n thisExpr = this.compileExpressionRetainType(\r\n assert(this.program.resolvedThisExpression),\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n return this.compileCallDirect(\r\n instance,\r\n expression.arguments,\r\n expression,\r\n thisExpr,\r\n instance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n // indirect call: index argument with signature (non-generic, can't be inlined)\r\n case ElementKind.LOCAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetLocal((target).index, NativeType.I32);\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetGlobal((target).internalName, (target).type.toNativeType());\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (signature = type.signatureReference) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n indexArg = module.createLoad(\r\n 4,\r\n false,\r\n thisExpr,\r\n NativeType.I32,\r\n (target).memoryOffset\r\n );\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FUNCTION_TARGET: {\r\n signature = (target).signature;\r\n indexArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n break;\r\n }\r\n case ElementKind.PROPERTY: // TODO\r\n\r\n // not supported\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n return this.compileCallIndirect(\r\n signature,\r\n indexArg,\r\n expression.arguments,\r\n expression\r\n );\r\n }\r\n\r\n private compileCallExpressionBuiltin(\r\n prototype: FunctionPrototype,\r\n expression: CallExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var expr = compileBuiltinCall( // reports\r\n this,\r\n prototype,\r\n prototype.resolveBuiltinTypeArguments(\r\n expression.typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n ),\r\n expression.arguments,\r\n contextualType,\r\n expression\r\n );\r\n if (!expr) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n return expr;\r\n }\r\n\r\n /**\r\n * Checks that a call with the given number as arguments can be performed according to the\r\n * specified signature.\r\n */\r\n checkCallSignature(\r\n signature: Signature,\r\n numArguments: i32,\r\n hasThis: bool,\r\n reportNode: Node\r\n ): bool {\r\n\r\n // cannot call an instance method without a `this` argument (TODO: `.call`?)\r\n var thisType = signature.thisType;\r\n if (hasThis != (thisType != null)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported, // TODO: better message?\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n // not yet implemented (TODO: maybe some sort of an unmanaged/lightweight array?)\r\n var hasRest = signature.hasRest;\r\n if (hasRest) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n var minimum = signature.requiredParameters;\r\n var maximum = signature.parameterTypes.length;\r\n\r\n // must at least be called with required arguments\r\n if (numArguments < minimum) {\r\n this.error(\r\n minimum < maximum\r\n ? DiagnosticCode.Expected_at_least_0_arguments_but_got_1\r\n : DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, minimum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n // must not be called with more than the maximum arguments\r\n if (numArguments > maximum && !hasRest) {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, maximum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Compiles a direct call to a concrete function. */\r\n compileCallDirect(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0,\r\n inline: bool = false\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // Inline if explicitly requested\r\n if (inline) {\r\n assert(!instance.is(CommonFlags.TRAMPOLINE)); // doesn't make sense\r\n return this.compileCallInlineUnchecked(instance, argumentExpressions, reportNode, thisArg);\r\n }\r\n\r\n // Otherwise compile to just a call\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallDirect(instance, operands);\r\n }\r\n\r\n // Depends on being pre-checked in compileCallDirect\r\n private compileCallInlineUnchecked(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n var declaration = instance.prototype.declaration;\r\n\r\n // Create an empty child flow with its own scope and mark it for inlining\r\n var previousFlow = currentFunction.flow;\r\n var returnLabel = instance.internalName + \"|inlined.\" + (instance.nextInlineId++).toString(10);\r\n var returnType = instance.signature.returnType;\r\n var flow = Flow.create(currentFunction);\r\n flow.set(FlowFlags.INLINE_CONTEXT);\r\n flow.returnLabel = returnLabel;\r\n flow.returnType = returnType;\r\n flow.contextualTypeArguments = instance.contextualTypeArguments;\r\n\r\n // Convert provided call arguments to temporary locals. It is important that these are compiled\r\n // here, with their respective locals being blocked. There is no 'makeCallInline'.\r\n var body = [];\r\n if (thisArg) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n if (getExpressionId(thisArg) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(thisArg),\r\n (parent).type,\r\n \"this\"\r\n );\r\n } else {\r\n let thisLocal = flow.addScopedLocal((parent).type, \"this\", false);\r\n body.push(\r\n module.createSetLocal(thisLocal.index, thisArg)\r\n );\r\n }\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i) {\r\n let paramExpr = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(paramExpr) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(paramExpr),\r\n parameterTypes[i],\r\n signature.getParameterName(i)\r\n );\r\n // inherits wrap status\r\n } else {\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(paramExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, paramExpr)\r\n );\r\n }\r\n }\r\n\r\n // Compile optional parameter initializers in the scope of the inlined flow\r\n currentFunction.flow = flow;\r\n var numParameters = signature.parameterTypes.length;\r\n for (let i = numArguments; i < numParameters; ++i) {\r\n let initExpr = this.compileExpression(\r\n assert(declaration.signature.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.program.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n switch (target.kind) {\r\n case ElementKind.CLASS: {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n let thisArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.compileCallDirect(indexedGet, [\r\n expression.elementExpression\r\n ], expression, thisArg);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var name = declaration.name;\r\n var simpleName = (name.text.length\r\n ? name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var currentFunction = this.currentFunction;\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n currentFunction.internalName + INNER_DELIMITER + simpleName,\r\n declaration,\r\n null,\r\n DecoratorFlags.NONE\r\n );\r\n var flow = currentFunction.flow;\r\n var instance = this.compileFunctionUsingTypeArguments(\r\n prototype,\r\n [],\r\n flow.contextualTypeArguments,\r\n flow,\r\n declaration\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = instance.signature.type; // TODO: get cached type?\r\n // NOTE that, in order to make this work in every case, the function must be represented by a\r\n // value, so we add it and rely on the optimizer to figure out where it can be called directly.\r\n var index = this.ensureFunctionTableEntry(instance); // reports\r\n return index < 0\r\n ? this.module.createUnreachable()\r\n : this.module.createI32(index);\r\n }\r\n\r\n /**\r\n * Compiles an identifier in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compileIdentifierExpression(\r\n expression: IdentifierExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // check special keywords first\r\n switch (expression.kind) {\r\n case NodeKind.NULL: {\r\n let options = this.options;\r\n if (!contextualType.classReference) {\r\n this.currentType = options.usizeType;\r\n }\r\n return options.isWasm64\r\n ? module.createI64(0)\r\n : module.createI32(0);\r\n }\r\n case NodeKind.TRUE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(1);\r\n }\r\n case NodeKind.FALSE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\r\n case NodeKind.THIS: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n this.currentType = scopedThis.type;\r\n return module.createGetLocal(scopedThis.index, scopedThis.type.toNativeType());\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisType = (parent).type;\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n if (!flow.is(FlowFlags.ALLOCATES)) {\r\n flow.set(FlowFlags.ALLOCATES);\r\n // must be conditional because `this` could have been provided by a derived class\r\n this.currentType = thisType;\r\n return module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, expression)\r\n );\r\n }\r\n }\r\n this.currentType = thisType;\r\n return module.createGetLocal(0, thisType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n case NodeKind.SUPER: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n let scopedThisClass = assert(scopedThis.type.classReference);\r\n let base = scopedThisClass.base;\r\n if (base) {\r\n this.currentType = base.type;\r\n return module.createGetLocal(scopedThis.index, base.type.toNativeType());\r\n }\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let base = (parent).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return module.createGetLocal(0, superType.toNativeType());\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var target = this.program.resolveIdentifier( // reports\r\n expression,\r\n 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 = (target).resolve(\r\n null,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!(instance && this.compileFunction(instance))) return module.createUnreachable();\r\n let index = this.ensureFunctionTableEntry(instance);\r\n this.currentType = instance.signature.type;\r\n return this.module.createI32(index);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n 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.program.resolveType(expression.isType);\r\n this.currentType = Type.bool;\r\n if (!isType) return module.createUnreachable();\r\n return type.is(TypeFlags.NULLABLE) && !isType.is(TypeFlags.NULLABLE)\r\n ? type.nonNullableType.isAssignableTo(isType)\r\n ? module.createBinary( // not precomputeable\r\n type.is(TypeFlags.LONG)\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n expr,\r\n type.toNativeZero(module)\r\n )\r\n : module.createI32(0)\r\n : module.createI32(type.isAssignableTo(isType, true) ? 1 : 0);\r\n }\r\n\r\n compileLiteralExpression(\r\n expression: LiteralExpression,\r\n contextualType: Type,\r\n implicitNegate: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n switch (expression.literalKind) {\r\n case LiteralKind.ARRAY: {\r\n assert(!implicitNegate);\r\n let classType = contextualType.classReference;\r\n if (\r\n classType &&\r\n classType.prototype == this.program.arrayPrototype\r\n ) {\r\n return this.compileArrayLiteral(\r\n assert(classType.typeArguments)[0],\r\n (expression).elementExpressions,\r\n expression\r\n );\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n case LiteralKind.FLOAT: {\r\n let floatValue = (expression).value;\r\n if (implicitNegate) {\r\n floatValue = -floatValue;\r\n }\r\n if (contextualType == Type.f32) {\r\n return module.createF32(floatValue);\r\n }\r\n this.currentType = Type.f64;\r\n return module.createF64(floatValue);\r\n }\r\n case LiteralKind.INTEGER: {\r\n let intValue = (expression).value;\r\n if (implicitNegate) {\r\n intValue = i64_sub(\r\n i64_new(0),\r\n intValue\r\n );\r\n }\r\n switch (contextualType.kind) {\r\n\r\n // compile to contextualType if matching\r\n\r\n case TypeKind.I8: {\r\n if (i64_is_i8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (i64_is_u8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (i64_is_i16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (i64_is_u16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (i64_is_bool(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.USIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.F32: {\r\n if (i64_is_f32(intValue)) return module.createF32(i64_to_f32(intValue));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n if (i64_is_f64(intValue)) return module.createF64(i64_to_f64(intValue));\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n break; // compiles to best fitting type below, being dropped\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise compile to best fitting native type\r\n\r\n if (i64_is_i32(intValue)) {\r\n this.currentType = Type.i32;\r\n return module.createI32(i64_low(intValue));\r\n } else if (i64_is_u32(intValue)) {\r\n this.currentType = Type.u32;\r\n return module.createI32(i64_low(intValue));\r\n } else {\r\n this.currentType = Type.i64;\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n }\r\n case LiteralKind.STRING: {\r\n assert(!implicitNegate);\r\n return this.compileStaticString((expression).value);\r\n }\r\n // case LiteralKind.OBJECT:\r\n // case LiteralKind.REGEXP:\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n\r\n compileStaticString(stringValue: string): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var stringSegments = this.stringSegments;\r\n\r\n var stringSegment: MemorySegment | null = stringSegments.get(stringValue);\r\n if (!stringSegment) {\r\n let stringLength = stringValue.length;\r\n let stringBuffer = new Uint8Array(4 + stringLength * 2);\r\n stringBuffer[0] = stringLength & 0xff;\r\n stringBuffer[1] = (stringLength >>> 8) & 0xff;\r\n stringBuffer[2] = (stringLength >>> 16) & 0xff;\r\n stringBuffer[3] = (stringLength >>> 24) & 0xff;\r\n for (let i = 0; i < stringLength; ++i) {\r\n stringBuffer[4 + i * 2] = stringValue.charCodeAt(i) & 0xff;\r\n stringBuffer[5 + i * 2] = (stringValue.charCodeAt(i) >>> 8) & 0xff;\r\n }\r\n stringSegment = this.addMemorySegment(stringBuffer, options.usizeType.byteSize);\r\n stringSegments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n var stringType = this.program.typesLookup.get(\"string\");\r\n this.currentType = stringType ? stringType : options.usizeType;\r\n if (options.isWasm64) {\r\n return module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n }\r\n assert(i64_is_i32(stringOffset));\r\n return module.createI32(i64_low(stringOffset));\r\n }\r\n\r\n compileArrayLiteral(elementType: Type, expressions: (Expression | null)[], reportNode: Node): ExpressionRef {\r\n var isStatic = true;\r\n var module = this.module;\r\n\r\n // obtain the array type\r\n var arrayPrototype = assert(this.program.arrayPrototype);\r\n if (!arrayPrototype || arrayPrototype.kind != ElementKind.CLASS_PROTOTYPE) return module.createUnreachable();\r\n var arrayInstance = (arrayPrototype).resolve([ elementType ]);\r\n if (!arrayInstance) return module.createUnreachable();\r\n var arrayType = arrayInstance.type;\r\n\r\n var elementCount = expressions.length;\r\n if (elementCount) { // non-empty static or dynamic\r\n let nativeElementType = elementType.toNativeType();\r\n let values: usize;\r\n let byteLength: usize;\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n values = changetype(new Int32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n values = changetype(new Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n values = changetype(new Float32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n values = changetype(new Float64Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // precompute value expressions\r\n let exprs = new Array(elementCount);\r\n let expr: BinaryenExpressionRef;\r\n for (let i = 0; i < elementCount; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : elementType.toNativeZero(module);\r\n if (isStatic) {\r\n expr = this.precomputeExpressionRef(exprs[i]);\r\n if (getExpressionId(expr) == ExpressionId.Const) {\r\n assert(getExpressionType(expr) == nativeElementType);\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n changetype(values)[i] = getConstValueI32(expr);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n changetype(values)[i] = i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n changetype(values)[i] = getConstValueF32(expr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n changetype(values)[i] = getConstValueF64(expr);\r\n break;\r\n }\r\n default: assert(false); // checked above\r\n }\r\n } else {\r\n // TODO: emit a warning if declared 'const'\r\n // if (isConst) {\r\n // this.warn(\r\n // DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n // reportNode.range\r\n // );\r\n // }\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n let usizeTypeSize = this.options.usizeType.byteSize;\r\n if (isStatic) { // non-empty, all elements can be precomputed\r\n\r\n // Create a combined static memory segment composed of:\r\n // Array struct + ArrayBuffer struct + aligned ArrayBuffer data\r\n\r\n let arraySize = usizeTypeSize + 4; // buffer_ & length_\r\n let bufferHeaderSize = (4 + 7) & ~7; // aligned byteLength (8)\r\n let bufferTotalSize = 1 << (32 - clz(byteLength + bufferHeaderSize - 1)); // see internals\r\n let data = new Uint8Array(arraySize + bufferTotalSize);\r\n let segment = this.addMemorySegment(data);\r\n let offset = 0;\r\n\r\n // write Array struct\r\n if (usizeTypeSize == 8) {\r\n writeI64(i64_add(segment.offset, i64_new(arraySize)), data, offset); // buffer_ @ segment[arSize]\r\n offset += 8;\r\n } else {\r\n assert(i64_high(segment.offset) == 0);\r\n writeI32(i64_low(segment.offset) + arraySize, data, offset); // buffer_ @ segment[arSize]\r\n offset += 4;\r\n }\r\n writeI32(elementCount, data, offset); // length_\r\n offset += 4;\r\n assert(offset == arraySize);\r\n\r\n // write ArrayBuffer struct\r\n writeI32(byteLength, data, offset);\r\n offset += bufferHeaderSize; // incl. alignment\r\n\r\n // write ArrayBuffer data\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.I64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n case NativeType.F32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.F64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n assert(offset <= arraySize + bufferTotalSize);\r\n\r\n this.currentType = arrayType;\r\n return usizeTypeSize == 8\r\n ? module.createI64(\r\n i64_low(segment.offset),\r\n i64_high(segment.offset)\r\n )\r\n : module.createI32(\r\n i64_low(segment.offset)\r\n );\r\n\r\n } else { // non-empty, some elements can't be precomputed\r\n\r\n this.currentType = arrayType;\r\n let setter = arrayInstance.lookupOverload(OperatorKind.INDEXED_SET, true);\r\n if (!setter) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n reportNode.range, arrayInstance.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let nativeArrayType = arrayType.toNativeType();\r\n let currentFunction = this.currentFunction;\r\n let tempLocal = currentFunction.getTempLocal(arrayType, false);\r\n let stmts = new Array(2 + elementCount);\r\n let index = 0;\r\n stmts[index++] = module.createSetLocal(tempLocal.index,\r\n this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(elementCount)\r\n ])\r\n );\r\n for (let i = 0; i < elementCount; ++i) {\r\n stmts[index++] = this.makeCallDirect(setter, [\r\n module.createGetLocal(tempLocal.index, nativeArrayType), // this\r\n module.createI32(i),\r\n exprs[i]\r\n ]);\r\n }\r\n assert(index + 1 == stmts.length);\r\n stmts[index] = module.createGetLocal(tempLocal.index, nativeArrayType);\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = arrayType;\r\n return module.createBlock(null, stmts, nativeArrayType);\r\n }\r\n\r\n } else { // empty, TBD: cache this somehow?\r\n this.currentType = arrayType;\r\n return this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(0)\r\n ]);\r\n }\r\n }\r\n\r\n compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var currentFunction = this.currentFunction;\r\n\r\n // obtain the class being instantiated\r\n var target = this.program.resolveExpression( // reports\r\n expression.expression,\r\n currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n if (target.kind != ElementKind.CLASS_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature,\r\n expression.expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n var classPrototype = target;\r\n var classInstance: 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 = classPrototype.resolve(\r\n classReference.typeArguments,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n } else {\r\n classInstance = classPrototype.resolveUsingTypeArguments( // reports\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 program = this.program;\r\n var module = this.module;\r\n\r\n var target = program.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: { // static property\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // enum value\r\n let parent = (target).parent;\r\n assert(parent !== null && parent.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(parent)) {\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return module.createI32((target).constantValue);\r\n }\r\n return module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FIELD: { // instance field\r\n let thisExpression = assert(program.resolvedThisExpression);\r\n assert((target).memoryOffset >= 0);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = (target).type;\r\n return module.createLoad(\r\n (target).type.byteSize,\r\n (target).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n thisExpr,\r\n (target).type.toNativeType(),\r\n (target).memoryOffset\r\n );\r\n }\r\n case ElementKind.PROPERTY: { // instance property (here: getter)\r\n let prototype = (target).getterPrototype;\r\n if (prototype) {\r\n let instance = prototype.resolve(null); // reports\r\n if (!instance) return module.createUnreachable();\r\n let signature = instance.signature;\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n 0,\r\n instance.is(CommonFlags.INSTANCE),\r\n propertyAccess\r\n )) {\r\n return module.createUnreachable();\r\n }\r\n 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(program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess, thisExpr, 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 IdentifierExpression,\r\n StringLiteralExpression,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DecoratorNode,\r\n DoStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportImportStatement,\r\n ExportMember,\r\n ExportStatement,\r\n ExpressionStatement,\r\n ForStatement,\r\n FunctionExpression,\r\n FunctionDeclaration,\r\n IfStatement,\r\n ImportDeclaration,\r\n ImportStatement,\r\n NamespaceDeclaration,\r\n ParameterNode,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameterNode,\r\n VariableStatement,\r\n VariableDeclaration,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n mangleInternalPath,\r\n 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 parseClassMember(\r\n tn: Tokenizer,\r\n parent: ClassDeclaration\r\n ): DeclarationStatement | null {\r\n\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\r\n // 'readonly'?\r\n // ('get' | 'set')?\r\n // Identifier ...\r\n\r\n var startPos = tn.pos;\r\n\r\n var decorators = new Array();\r\n while (tn.skip(Token.AT)) {\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n decorators.push(decorator);\r\n }\r\n\r\n var flags = parent.flags & CommonFlags.AMBIENT; // inherit\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n flags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n flags |= CommonFlags.PRIVATE;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n flags |= CommonFlags.PROTECTED;\r\n }\r\n\r\n var staticStart: i32 = 0;\r\n var staticEnd: i32 = 0;\r\n var abstractStart: i32 = 0;\r\n var abstractEnd: i32 = 0;\r\n if (tn.skip(Token.STATIC)) {\r\n flags |= CommonFlags.STATIC;\r\n staticStart = tn.tokenPos;\r\n staticEnd = tn.pos;\r\n } else {\r\n if (tn.skip(Token.ABSTRACT)) {\r\n flags |= (CommonFlags.ABSTRACT | CommonFlags.INSTANCE);\r\n abstractStart = tn.tokenPos;\r\n abstractEnd = tn.pos;\r\n } else {\r\n flags |= CommonFlags.INSTANCE;\r\n }\r\n if (parent.flags & CommonFlags.GENERIC) {\r\n flags |= CommonFlags.GENERIC_CONTEXT;\r\n }\r\n }\r\n\r\n var readonlyStart: i32 = 0;\r\n var readonlyEnd: i32 = 0;\r\n if (tn.skip(Token.READONLY)) {\r\n flags |= CommonFlags.READONLY;\r\n readonlyStart = tn.tokenPos;\r\n readonlyEnd = tn.pos;\r\n }\r\n\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n var state = tn.mark();\r\n var isConstructor = false;\r\n var isGetter = false;\r\n var getStart: i32 = 0;\r\n var getEnd: i32 = 0;\r\n var isSetter = false;\r\n var setStart: i32 = 0;\r\n var setEnd: i32 = 0;\r\n if (tn.skip(Token.GET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.GET;\r\n isGetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.SET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.SET | CommonFlags.SET;\r\n isSetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.CONSTRUCTOR)) {\r\n flags |= CommonFlags.CONSTRUCTOR;\r\n isConstructor = true;\r\n if (flags & CommonFlags.STATIC) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(staticStart, staticEnd), \"static\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (!isConstructor && !tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var name = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n let typeParametersStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.An_accessor_cannot_have_type_parameters,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else {\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n }\r\n\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let signatureStart = tn.tokenPos;\r\n let parameters = this.parseParameters(tn, isConstructor);\r\n if (!parameters) return null;\r\n 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 }\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n let retMethod = Node.createMethodDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retMethod;\r\n\r\n } else if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Constructor_implementation_is_missing,\r\n name.range\r\n );\r\n\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n name.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(getStart, getEnd), \"get\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.SET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(setStart, setEnd), \"set\"\r\n ); // recoverable\r\n }\r\n\r\n let type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n initializer = this.parseExpression(tn);\r\n if (!initializer) return null;\r\n }\r\n let retField = Node.createFieldDeclaration(\r\n name,\r\n type,\r\n initializer,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retField;\r\n }\r\n return null;\r\n }\r\n\r\n parseNamespace(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): NamespaceDeclaration | null {\r\n\r\n // at 'namespace': Identifier '{' (Variable | Function)* '}'\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n let ns = Node.createNamespaceDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseTopLevelStatement(tn, ns);\r\n if (!member) return null;\r\n member.parent = ns;\r\n members.push(member);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ns;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExport(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n startPos: i32\r\n ): ExportStatement | null {\r\n\r\n // at 'export': '{' ExportMember (',' ExportMember)* }' ('from' StringLiteral)? ';'?\r\n\r\n 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 expr: Expression | null = null;\r\n\r\n if (token == Token.NULL) {\r\n return Node.createNullExpression(tn.range());\r\n }\r\n if (token == Token.TRUE) {\r\n return Node.createTrueExpression(tn.range());\r\n }\r\n if (token == Token.FALSE) {\r\n return Node.createFalseExpression(tn.range());\r\n }\r\n\r\n var precedence = determinePrecedenceStart(token);\r\n if (precedence != Precedence.INVALID) {\r\n let operand: Expression | null;\r\n\r\n // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions)\r\n\r\n // NewExpression\r\n if (token == Token.NEW) {\r\n operand = this.parseExpression(tn, Precedence.CALL);\r\n if (!operand) return null;\r\n if (operand.kind == NodeKind.CALL) {\r\n return Node.createNewExpression(\r\n (operand).expression,\r\n (operand).typeArguments,\r\n (operand).arguments,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n } else {\r\n operand = this.parseExpression(tn, 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 switch (token) {\r\n\r\n // ParenthesizedExpression\r\n // FunctionExpression\r\n case Token.OPENPAREN: {\r\n\r\n // determine whether this is a function expression\r\n if (tn.skip(Token.CLOSEPAREN)) { // must be a function expression (fast route)\r\n return this.parseFunctionExpressionCommon(\r\n tn,\r\n Node.createEmptyIdentifierExpression(tn.range(startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n let state = tn.mark();\r\n let again = true;\r\n do {\r\n switch (tn.next(IdentifierHandling.PREFER)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT: {\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n switch (tn.next()) {\r\n\r\n // if we got here, check for arrow\r\n case Token.CLOSEPAREN: {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n again = false;\r\n break;\r\n }\r\n // fall-through\r\n }\r\n // function expression\r\n case Token.COLON: { // type annotation\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.QUESTION: // optional parameter or ternary\r\n case Token.COMMA: {\r\n break; // continue\r\n }\r\n // parenthesized expression\r\n // case Token.EQUALS: // missing type annotation for simplicity\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n // parenthesized expression\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n } while (again);\r\n tn.reset(state);\r\n\r\n // parse parenthesized\r\n expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return Node.createParenthesizedExpression(expr, tn.range(startPos, tn.pos));\r\n }\r\n // ArrayLiteralExpression\r\n case Token.OPENBRACKET: {\r\n let elementExpressions = new Array();\r\n while (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (tn.peek() == Token.COMMA) {\r\n expr = null; // omitted\r\n } else {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n }\r\n elementExpressions.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACKET)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n }\r\n // AssertionExpression (unary prefix)\r\n case Token.LESSTHAN: {\r\n let toType = this.parseType(tn);\r\n if (!toType) return null;\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n expr = this.parseExpression(tn, Precedence.CALL);\r\n if (!expr) return null;\r\n return Node.createAssertionExpression(\r\n AssertionKind.PREFIX,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.IDENTIFIER: {\r\n return Node.createIdentifierExpression(tn.readIdentifier(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.THIS: {\r\n return Node.createThisExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.CONSTRUCTOR: {\r\n return Node.createConstructorExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.SUPER: {\r\n return Node.createSuperExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.STRINGLITERAL: {\r\n return Node.createStringLiteralExpression(tn.readString(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.INTEGERLITERAL: {\r\n return Node.createIntegerLiteralExpression(tn.readInteger(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.FLOATLITERAL: {\r\n return Node.createFloatLiteralExpression(tn.readFloat(), tn.range(startPos, tn.pos));\r\n }\r\n // RegexpLiteralExpression\r\n // note that this also continues on invalid ones so the surrounding AST remains intact\r\n case Token.SLASH: {\r\n let regexpPattern = tn.readRegexpPattern(); // also reports\r\n if (!tn.skip(Token.SLASH)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"/\"\r\n );\r\n return null;\r\n }\r\n return Node.createRegexpLiteralExpression(\r\n regexpPattern,\r\n tn.readRegexpFlags(), // also reports\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.FUNCTION: {\r\n return this.parseFunctionExpression(tn);\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Expression_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): CommonTypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n var state = tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n if (tn.peek() === Token.GREATERTHAN) {\r\n break;\r\n }\r\n let type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset(state);\r\n return null;\r\n }\r\n typeArguments.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n if (tn.skip(Token.GREATERTHAN) && tn.skip(Token.OPENPAREN)) {\r\n return typeArguments;\r\n }\r\n tn.reset(state);\r\n return null;\r\n }\r\n\r\n parseArguments(\r\n tn: Tokenizer\r\n ): Expression[] | null {\r\n\r\n // at '(': (Expression (',' Expression)*)? ')'\r\n\r\n var args = new Array();\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return args;\r\n }\r\n\r\n parseExpression(\r\n tn: Tokenizer,\r\n precedence: Precedence = 0\r\n ): Expression | null {\r\n\r\n var expr = this.parseExpressionStart(tn);\r\n if (!expr) return null;\r\n var startPos = expr.range.start;\r\n\r\n // CallExpression?\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 ? Precedence.COMMA + 1 : 0);\r\n if (!ifElse) return null;\r\n expr = Node.createTernaryExpression(\r\n expr,\r\n ifThen,\r\n ifElse,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // CommaExpression\r\n case Token.COMMA: {\r\n let commaExprs: Expression[] = [ expr ];\r\n do {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n commaExprs.push(expr);\r\n } while (tn.skip(Token.COMMA));\r\n expr = Node.createCommaExpression(commaExprs, tn.range(startPos, tn.pos));\r\n break;\r\n }\r\n default: {\r\n next = this.parseExpression(tn,\r\n isRightAssociative(token)\r\n ? nextPrecedence\r\n : nextPrecedence + 1\r\n );\r\n if (!next) return null;\r\n\r\n // PropertyAccessExpression\r\n if (token == Token.DOT) {\r\n if (next.kind == NodeKind.IDENTIFIER) {\r\n expr = Node.createPropertyAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else if (next.kind == NodeKind.CALL) { // join\r\n let propertyCall = next;\r\n if (propertyCall.expression.kind == NodeKind.IDENTIFIER) {\r\n propertyCall.expression = Node.createPropertyAccessExpression(\r\n expr,\r\n propertyCall.expression,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n propertyCall.expression.range\r\n );\r\n return null;\r\n }\r\n expr = propertyCall;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n next.range\r\n );\r\n return null;\r\n }\r\n\r\n // BinaryExpression\r\n } else {\r\n expr = Node.createBinaryExpression(token, expr, next, tn.range(startPos, tn.pos));\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Skips over a statement on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n skipStatement(tn: Tokenizer): void {\r\n tn.peek(true);\r\n if (tn.nextTokenOnNewLine) tn.next(); // if reset() to the previous line\r\n do {\r\n let nextToken = tn.peek(true);\r\n if (\r\n nextToken == Token.ENDOFFILE || // next step should handle this\r\n nextToken == Token.SEMICOLON // end of the statement for sure\r\n ) {\r\n tn.next();\r\n break;\r\n }\r\n if (tn.nextTokenOnNewLine) break; // end of the statement maybe\r\n switch (tn.next()) {\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n break;\r\n }\r\n case Token.STRINGLITERAL: {\r\n tn.readString();\r\n break;\r\n }\r\n case Token.INTEGERLITERAL: {\r\n tn.readInteger();\r\n break;\r\n }\r\n case Token.FLOATLITERAL: {\r\n tn.readFloat();\r\n break;\r\n }\r\n }\r\n } while (true);\r\n }\r\n\r\n /** Skips over a block on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n // skipBlock(tn: Tokenizer): void {\r\n // var depth = 0;\r\n // var token: Token;\r\n // do {\r\n // token = tn.next();\r\n // if (token == Token.OPENBRACE) {\r\n // ++depth;\r\n // } else if (token == Token.CLOSEBRACE) {\r\n // if (depth) --depth;\r\n // if (!depth) break; // done\r\n // }\r\n // } while (token != Token.ENDOFFILE);\r\n // }\r\n}\r\n\r\n/** Operator precedence from least to largest. */\r\nexport const enum Precedence {\r\n COMMA,\r\n SPREAD,\r\n YIELD,\r\n ASSIGNMENT,\r\n CONDITIONAL,\r\n LOGICAL_OR,\r\n LOGICAL_AND,\r\n BITWISE_OR,\r\n BITWISE_XOR,\r\n BITWISE_AND,\r\n EQUALITY,\r\n RELATIONAL,\r\n SHIFT,\r\n ADDITIVE,\r\n MULTIPLICATIVE,\r\n EXPONENTIATED,\r\n UNARY_PREFIX,\r\n UNARY_POSTFIX,\r\n CALL,\r\n MEMBERACCESS,\r\n GROUPING,\r\n INVALID = -1\r\n}\r\n\r\n/** Determines the precedence of a starting token. */\r\nfunction determinePrecedenceStart(kind: Token): 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 default: return Precedence.INVALID;\r\n }\r\n}\r\n\r\n/** Determines the precende of a non-starting token. */\r\nfunction determinePrecedence(kind: Token): 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 default: return Precedence.INVALID;\r\n }\r\n}\r\n\r\n/** Determines whether a non-starting token is right associative. */\r\nfunction isRightAssociative(kind: Token): bool {\r\n switch (kind) {\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS:\r\n case Token.QUESTION:\r\n case Token.ASTERISK_ASTERISK: return true;\r\n default: return false;\r\n }\r\n}\r\n","/**\r\n * Definition builders for WebIDL and TypeScript.\r\n * @module definitions\r\n *//***/\r\n\r\nimport {\r\n 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\n/** Compiles a call to a built-in function. */\r\nexport function compileCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n\r\n var arg0: ExpressionRef,\r\n arg1: ExpressionRef,\r\n arg2: ExpressionRef,\r\n ret: ExpressionRef;\r\n\r\n // NOTE that some implementations below make use of the select expression where straight-forward.\r\n // whether worth or not should probably be tested once/ it's known if/how embedders handle it.\r\n // search: createSelect\r\n\r\n switch (prototype.internalName) {\r\n\r\n // types\r\n\r\n case \"isInteger\": { // isInteger() / isInteger(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.INTEGER) && !type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isFloat\": { // isFloat() / isFloat(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.FLOAT)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isSigned\": { // isSigned() / isSigned(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.SIGNED)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isReference\": { // isReference() / isReference(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n compiler.currentType = Type.bool;\r\n return type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isString\": { // isString() / isString(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n if (classType) {\r\n let stringInstance = compiler.program.stringInstance;\r\n if (stringInstance && classType.isAssignableTo(stringInstance)) return module.createI32(1);\r\n }\r\n return module.createI32(0);\r\n }\r\n case \"isArray\": { // isArray() / isArray(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n return classType != null && classType.lookupOverload(OperatorKind.INDEXED_GET) != null\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n\r\n // math\r\n\r\n case \"clz\": { // clz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ClzI64\r\n : UnaryOp.ClzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.ClzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ctz\": { // ctz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.NONE, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.CtzI64\r\n : UnaryOp.CtzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.CtzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"popcnt\": { // popcnt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.PopcntI64\r\n : UnaryOp.PopcntI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.PopcntI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"rotl\": { // rotl(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotlI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotlI64\r\n : BinaryOp.RotlI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotlI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflows\r\n }\r\n case \"rotr\": { // rotr(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotrI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotrI64\r\n : BinaryOp.RotrI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotrI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflowws\r\n }\r\n case \"abs\": { // abs(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n // possibly overflows, e.g. abs(-128) == 128\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createSelect( // x > 0 ? x : 0-x\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI32, // ifFalse\r\n module.createI32(0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32)\r\n ),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n module.createI32(0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n compiler.options.usizeType.toNativeZero(module),\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n ),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType),\r\n compiler.options.usizeType.toNativeZero(module)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI64,\r\n module.createI64(0, 0),\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n ),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n module.createI64(0, 0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.BOOL: {\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.AbsF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.AbsF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"max\": { // max(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MaxF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MaxF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"min\": { // min(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MinF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MinF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ceil\": { // ceil(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.CeilF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.CeilF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"floor\": { // floor(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.FloorF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.FloorF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"copysign\": { // copysign(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) { // TODO: does an integer version make sense?\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.CopysignF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.CopysignF64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"nearest\": { // nearest(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.NearestF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.NearestF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"reinterpret\": { // reinterpret(value: *) -> T\r\n if (operands.length != 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (typeArguments[0].kind) {\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF32, arg0);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF64, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (typeArguments[0].is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.f64\r\n : Type.f32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ReinterpretF64\r\n : UnaryOp.ReinterpretF32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI64, arg0);\r\n break;\r\n }\r\n default: { // small integers and void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return ret;\r\n }\r\n case \"sqrt\": { // sqrt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) { // TODO: integer versions (that return f64 or convert)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.SqrtF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.SqrtF64, arg0);\r\n break;\r\n }\r\n // case TypeKind.VOID:\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"trunc\": { // trunc(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments && typeArguments.length) {\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n // TODO: truncate to contextual type directly (if not void etc.)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.TruncF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.TruncF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n // memory access\r\n\r\n case \"load\": { // load(offset: usize, constantOffset?: usize) -> *\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let offset = operands.length == 2 ? evaluateConstantOffset(compiler, operands[1]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return module.createLoad(\r\n typeArguments[0].byteSize,\r\n typeArguments[0].is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n arg0,\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n contextualType.size > typeArguments[0].size\r\n ? (compiler.currentType = contextualType).toNativeType()\r\n : (compiler.currentType = typeArguments[0]).toNativeType(),\r\n offset\r\n );\r\n }\r\n case \"store\": { // store(offset: usize, value: *, constantOffset?: usize) -> void\r\n compiler.currentType = Type.void;\r\n if (operands.length < 2 || operands.length > 3) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n typeArguments[0],\r\n typeArguments[0].is(TypeFlags.INTEGER)\r\n ? ConversionKind.NONE // no need to convert to small int (but now might result in a float)\r\n : ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let type: Type;\r\n if (\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n (\r\n !compiler.currentType.is(TypeFlags.INTEGER) || // float to int\r\n compiler.currentType.size < typeArguments[0].size // int to larger int (clear garbage bits)\r\n )\r\n ) {\r\n arg1 = compiler.convertExpression(\r\n arg1,\r\n compiler.currentType, typeArguments[0],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE, // still clears garbage bits\r\n operands[1]\r\n );\r\n type = typeArguments[0];\r\n } else {\r\n type = compiler.currentType;\r\n }\r\n let offset = operands.length == 3 ? evaluateConstantOffset(compiler, operands[2]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n return module.createStore(typeArguments[0].byteSize, arg0, arg1, type.toNativeType(), offset);\r\n }\r\n case \"sizeof\": { // sizeof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(byteSize);\r\n } else {\r\n ret = module.createI64(byteSize, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(byteSize, 0);\r\n } else {\r\n ret = module.createI32(byteSize);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"alignof\": { // alignof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n let alignLog2: i32;\r\n switch (byteSize) {\r\n case 1: { alignLog2 = 0; break; }\r\n case 2: { alignLog2 = 1; break; }\r\n case 4: { alignLog2 = 2; break; }\r\n case 8: { alignLog2 = 3; break; }\r\n default: { assert(false); return module.createUnreachable(); }\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(alignLog2);\r\n } else {\r\n ret = module.createI64(alignLog2, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(alignLog2, 0);\r\n } else {\r\n ret = module.createI32(alignLog2);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"offsetof\": { // offsetof(fieldName?: string) -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length > 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let classType = typeArguments[0].classReference;\r\n if (!classType) {\r\n compiler.error( // TODO: better error\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let offset: i32;\r\n if (operands.length) {\r\n if (\r\n operands[0].kind != NodeKind.LITERAL ||\r\n (operands[0]).literalKind != LiteralKind.STRING\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.String_literal_expected,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let fieldName = (operands[0]).value;\r\n let field = classType.members ? classType.members.get(fieldName) : null;\r\n if (!(field && field.kind == ElementKind.FIELD)) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_has_no_property_1,\r\n operands[0].range, classType.internalName, fieldName\r\n );\r\n return module.createUnreachable();\r\n }\r\n offset = (field).memoryOffset;\r\n } else {\r\n offset = classType.currentMemoryOffset;\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n return module.createI32(offset);\r\n } else {\r\n return module.createI64(offset);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n return module.createI64(offset);\r\n } else {\r\n return module.createI32(offset);\r\n }\r\n }\r\n }\r\n\r\n // control flow\r\n\r\n case \"select\": { // select(ifTrue: T, ifFalse: T, condition: bool) -> T\r\n if (operands.length != 3) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n let type = compiler.currentType;\r\n arg1 = compiler.compileExpression(operands[1], type, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n arg2 = compiler.makeIsTrueish(\r\n compiler.compileExpressionRetainType(operands[2], Type.bool, WrapMode.NONE),\r\n compiler.currentType\r\n );\r\n compiler.currentType = type;\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n default: { // any other value type\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unreachable\": { // unreachable() -> *\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n\r\n // host operations\r\n\r\n case \"current_memory\": { // current_memory() -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.CurrentMemory);\r\n }\r\n case \"grow_memory\": { // grow_memory(pages: i32) -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n arg0 = module.createUnreachable();\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.GrowMemory, null, [ arg0 ]);\r\n }\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n case \"move_memory\": { // move_memory(dest: usize, src: usize: n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.MoveMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n case \"set_memory\": { // set_memory(dest: usize, value: u8, n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n Type.u32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.SetMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n\r\n // other\r\n\r\n case \"changetype\": { // changetype(value: *) -> T\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpressionRetainType(\r\n operands[0],\r\n typeArguments[0],\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.size != typeArguments[0].size) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // if (reportNode.range.source.sourceKind != SourceKind.STDLIB)\r\n // compiler.warning(DiagnosticCode.Operation_is_unsafe, reportNode.range);\r\n return arg0; // any usize to any usize\r\n }\r\n case \"assert\": { // assert(isTrueish: T, message?: string) -> T with T != null\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else if (operands.length > 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.bool, WrapMode.WRAP);\r\n }\r\n\r\n let type = compiler.currentType;\r\n compiler.currentType = type.nonNullableType;\r\n\r\n // just return ifTrueish if assertions are disabled, or simplify if dropped anyway\r\n if (compiler.options.noAssert) {\r\n if (contextualType == Type.void) {\r\n compiler.currentType = Type.void;\r\n return module.createNop();\r\n }\r\n return arg0;\r\n }\r\n\r\n let abort = compileAbort(compiler, operands.length == 2 ? operands[1] : null, reportNode);\r\n\r\n compiler.currentType = type.nonNullableType;\r\n\r\n if (contextualType == Type.void) { // simplify if dropped anyway\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n // TODO: also check for NaN in float assertions, as in `Boolean(NaN) -> false`?\r\n case TypeKind.F32: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n arg0,\r\n module.createF32(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n arg0,\r\n module.createF64(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n default: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.I64)\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F32)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f64, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F64)\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unchecked\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = compiler.currentFunction.flow;\r\n flow.set(FlowFlags.UNCHECKED_CONTEXT);\r\n ret = compiler.compileExpressionRetainType(operands[0], contextualType, WrapMode.NONE);\r\n flow.unset(FlowFlags.UNCHECKED_CONTEXT);\r\n return ret;\r\n }\r\n case \"call_indirect\": { // call_indirect(target: Function | u32, ...args: *[]) -> T\r\n if (operands.length < 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let returnType: Type;\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n returnType = typeArguments[0];\r\n } else {\r\n returnType = contextualType;\r\n }\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n if (compiler.currentType.kind != TypeKind.U32) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let numOperands = operands.length - 1;\r\n let operandExprs = new Array(numOperands);\r\n let signatureParts = new Array(numOperands + 1);\r\n let nativeReturnType = returnType.toNativeType();\r\n let nativeParamTypes = new Array(numOperands);\r\n for (let i = 0; i < numOperands; ++i) {\r\n operandExprs[i] = compiler.compileExpressionRetainType(operands[1 + i], Type.i32, WrapMode.NONE);\r\n let operandType = compiler.currentType;\r\n signatureParts[i] = operandType.toSignatureString();\r\n nativeParamTypes[i] = operandType.toNativeType();\r\n }\r\n signatureParts[numOperands] = returnType.toSignatureString();\r\n let typeName = signatureParts.join(\"\");\r\n let typeRef = module.getFunctionTypeBySignature(nativeReturnType, nativeParamTypes);\r\n if (!typeRef) typeRef = module.addFunctionType(typeName, nativeReturnType, nativeParamTypes);\r\n compiler.currentType = returnType;\r\n // of course this can easily result in a 'RuntimeError: function signature mismatch' trap and\r\n // thus must be used with care. it exists because it *might* be useful in specific scenarios.\r\n return module.createCallIndirect(arg0, operandExprs, typeName);\r\n }\r\n\r\n // conversions\r\n\r\n case \"i8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"isize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"usize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"bool\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.bool;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.bool,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n var expr = deferASMCall(compiler, prototype, operands, contextualType, reportNode);\r\n if (expr) {\r\n if (typeArguments && typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return expr;\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n}\r\n\r\n/** Defers an inline-assembler-like call to a built-in function. */\r\nfunction deferASMCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (prototype.internalName) {\r\n\r\n // TODO: Operators can't be just deferred (don't have a corresponding generic built-in)\r\n // add, sub, mul, div_s, div_u, rem_s, rem_u\r\n // and, or, xor, shl, shr_u, shr_s\r\n // eq, eqz, ne, lt_s, lt_u, le_s, le_u, gt_s, gt_u, ge_s, ge_u\r\n\r\n case \"i32.clz\": return deferASM(\"clz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.clz\": return deferASM(\"clz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.ctz\": return deferASM(\"ctz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.ctz\": return deferASM(\"ctz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.popcnt\": return deferASM(\"popcnt\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.popcnt\": return deferASM(\"popcnt\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotl\": return deferASM(\"rotl\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotl\": return deferASM(\"rotl\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotr\": return deferASM(\"rotr\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotr\": return deferASM(\"rotr\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.abs\": return deferASM(\"abs\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.abs\": return deferASM(\"abs\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.max\": return deferASM(\"max\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.max\": return deferASM(\"max\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.min\": return deferASM(\"min\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.min\": return deferASM(\"min\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.ceil\": return deferASM(\"ceil\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.ceil\": return deferASM(\"ceil\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.floor\": return deferASM(\"floor\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.floor\": return deferASM(\"floor\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.copysign\": return deferASM(\"copysign\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.copysign\": return deferASM(\"copysign\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.nearest\": return deferASM(\"nearest\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.nearest\": return deferASM(\"nearest\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.reinterpret_f32\": return deferASM(\"reinterpret\", compiler, Type.i32, operands, Type.f32, reportNode);\r\n case \"i64.reinterpret_f64\": return deferASM(\"reinterpret\", compiler, Type.i64, operands, Type.f64, reportNode);\r\n case \"f32.reinterpret_i32\": return deferASM(\"reinterpret\", compiler, Type.f32, operands, Type.i32, reportNode);\r\n case \"f64.reinterpret_i64\": return deferASM(\"reinterpret\", compiler, Type.f64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.sqrt\": return deferASM(\"sqrt\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.sqrt\": return deferASM(\"sqrt\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.trunc\": return deferASM(\"trunc\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.trunc\": return deferASM(\"trunc\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u32, reportNode);\r\n case \"i32.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u32, reportNode);\r\n case \"i32.load\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u64, reportNode);\r\n case \"i64.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u64, reportNode);\r\n case \"i64.load32_s\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.load32_u\": return deferASM(\"load\", compiler, Type.u32, operands, Type.u64, reportNode);\r\n case \"i64.load\": return deferASM(\"load\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.load\": return deferASM(\"load\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.load\": return deferASM(\"load\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.store\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.store32\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.store\": return deferASM(\"store\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.store\": return deferASM(\"store\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.store\": return deferASM(\"store\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n }\r\n return 0;\r\n}\r\n\r\n/** A helper for deferring inline-assembler-like calls to built-in functions. */\r\nfunction deferASM(\r\n name: string,\r\n compiler: Compiler,\r\n typeArgument: Type,\r\n operands: Expression[],\r\n valueType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var prototype = assert(compiler.program.elementsLookup.get(name));\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return compileCall(compiler, prototype, [ typeArgument ], operands, valueType, reportNode);\r\n}\r\n\r\n/** Evaluates the constant type of a type argument *or* expression. */\r\nfunction evaluateConstantType(\r\n compiler: Compiler,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n reportNode: Node\r\n): Type | null {\r\n if (operands.length == 0) { // requires type argument\r\n if (!typeArguments || typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return null;\r\n }\r\n return typeArguments[0];\r\n }\r\n if (operands.length == 1) { // optional type argument\r\n if (typeArguments) {\r\n if (typeArguments.length == 1) {\r\n compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n if (typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return null;\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n } else {\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n return compiler.currentType;\r\n }\r\n if (typeArguments && typeArguments.length > 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return null;\r\n}\r\n\r\n/** Evaluates a `constantOffset` argument.*/\r\nfunction evaluateConstantOffset(compiler: Compiler, expression: Expression): i32 {\r\n var expr: ExpressionRef;\r\n var value: i32;\r\n if (compiler.options.isWasm64) {\r\n expr = compiler.precomputeExpression(expression, Type.usize64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I64 ||\r\n getConstValueI64High(expr) != 0 ||\r\n (value = getConstValueI64Low(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n } else {\r\n expr = compiler.precomputeExpression(expression, Type.usize32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I32 ||\r\n (value = getConstValueI32(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n }\r\n return value;\r\n}\r\n\r\nconst allocateInternalName = \"allocate_memory\";\r\n\r\n/** Compiles a memory allocation for an instance of the specified class. */\r\nexport function compileAllocate(\r\n compiler: Compiler,\r\n classInstance: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n assert(classInstance.program == program);\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n\r\n var allocatePrototype = program.elementsLookup.get(allocateInternalName);\r\n if (!allocatePrototype) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, allocateInternalName\r\n );\r\n program.info(\r\n DiagnosticCode.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (allocatePrototype.kind != ElementKind.FUNCTION_PROTOTYPE) {\r\n program.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n reportNode.range, allocatePrototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n var allocateInstance = (allocatePrototype).resolve(); // reports\r\n if (!(allocateInstance && compiler.compileFunction(allocateInstance))) return module.createUnreachable();\r\n\r\n compiler.currentType = classInstance.type;\r\n return module.createCall(\r\n allocateInstance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(classInstance.currentMemoryOffset)\r\n : module.createI32(classInstance.currentMemoryOffset)\r\n ],\r\n options.nativeSizeType\r\n );\r\n}\r\n\r\nconst abortInternalName = \"abort\";\r\n\r\n/** Compiles an abort wired to the conditionally imported 'abort' function. */\r\nexport function compileAbort(\r\n compiler: Compiler,\r\n message: Expression | null,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n var module = compiler.module;\r\n\r\n var stringType = program.typesLookup.get(\"string\"); // might be intended\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortPrototype = program.elementsLookup.get(abortInternalName); // might be intended\r\n if (!abortPrototype || abortPrototype.kind != ElementKind.FUNCTION_PROTOTYPE) return module.createUnreachable();\r\n\r\n var abortInstance = (abortPrototype).resolve(); // reports\r\n if (!(abortInstance && compiler.compileFunction(abortInstance))) return module.createUnreachable();\r\n\r\n var messageArg = message != null\r\n ? compiler.compileExpression(message, stringType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : stringType.toNativeZero(module);\r\n\r\n var filenameArg = compiler.compileStaticString(reportNode.range.source.normalizedPath);\r\n\r\n compiler.currentType = Type.void;\r\n return module.createBlock(null, [\r\n module.createCallImport(\r\n abortInstance.internalName, [\r\n messageArg,\r\n filenameArg,\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ],\r\n NativeType.None\r\n ),\r\n module.createUnreachable()\r\n ]);\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__23__;","// Copy Binaryen exports to global scope\r\n\r\nconst binaryen = global.Binaryen || require(\"binaryen\");\r\n\r\nfor (var key in binaryen)\r\n if (key.startsWith(\"_Binaryen\") || key.startsWith(\"_Relooper\"))\r\n global[key] = binaryen[key];\r\n\r\n// Utilize Binaryen's heap\r\n\r\nglobal.allocate_memory = function(size) {\r\n if (!size) return 0; // should be safe in our case\r\n return binaryen._malloc(size);\r\n};\r\n\r\nglobal.free_memory = function(ptr) {\r\n if (ptr) binaryen._free(ptr);\r\n};\r\n\r\nglobal.move_memory = function(dest, src, n) {\r\n return binaryen._memmove(dest, src, n);\r\n};\r\n\r\nglobal.store = function(ptr, val) {\r\n binaryen.HEAPU8[ptr] = val;\r\n};\r\n\r\nglobal.load = function(ptr) {\r\n return binaryen.HEAPU8[ptr];\r\n};\r\n\r\n// Implement module stubs\r\n\r\nconst Module = require(\"../../module\").Module;\r\n\r\nModule.prototype.toText = function toText() {\r\n var previousPrint = binaryen.print;\r\n var ret = \"\";\r\n binaryen.print = function(x) { ret += x + \"\\n\" };\r\n _BinaryenModulePrint(this.ref);\r\n binaryen.print = previousPrint;\r\n return ret;\r\n};\r\n\r\nModule.prototype.toAsmjs = function toAsmjs() {\r\n var previousPrint = binaryen.print;\r\n var ret = \"\";\r\n binaryen.print = function(x) { ret += x + \"\\n\" };\r\n _BinaryenModulePrintAsmjs(this.ref);\r\n binaryen.print = previousPrint;\r\n return ret;\r\n};\r\n","module.exports = globalScope => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n\r\n globalScope[\"allocate_memory\"] = function allocate_memory(size) {\r\n if (!(size >>>= 0)) return 0;\r\n\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7)\r\n HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n\r\n return ptr;\r\n };\r\n\r\n globalScope[\"free_memory\"] = function free_memory(ptr) {\r\n // TODO\r\n };\r\n\r\n globalScope[\"move_memory\"] = function move_memory(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n };\r\n\r\n globalScope[\"store\"] = function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n };\r\n\r\n globalScope[\"load\"] = function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n };\r\n};\r\n","/** @module 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/util/index.ts","webpack://assemblyscript/./src/diagnostics.ts","webpack://assemblyscript/./src/module.ts","webpack://assemblyscript/./src/ast.ts","webpack://assemblyscript/./src/program.ts","webpack://assemblyscript/(webpack)/buildin/global.js","webpack://assemblyscript/./src/types.ts","webpack://assemblyscript/./src/tokenizer.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.ts","webpack://assemblyscript/./src/compiler.ts","webpack://assemblyscript/./src/parser.ts","webpack://assemblyscript/./src/definitions.ts","webpack://assemblyscript/./src/decompiler.ts","webpack://assemblyscript/./src/index.ts","webpack://assemblyscript/./node_modules/long/src/long.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./src/glue/js/float.js","webpack://assemblyscript/./src/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__23__","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","__export","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","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","expr","_BinaryenUnary","createBinary","left","right","_BinaryenBinary","createHost","operands","allocPtrArray","_BinaryenHost","createGetLocal","index","type","_BinaryenGetLocal","createTeeLocal","_BinaryenTeeLocal","createGetGlobal","_BinaryenGetGlobal","createLoad","bytes","signed","ptr","_BinaryenLoad","createStore","_BinaryenStore","createAtomicLoad","_BinaryenAtomicLoad","createAtomicStore","_BinaryenAtomicStore","createAtomicRMW","_BinaryenAtomicRMW","createAtomicCmpxchg","expected","replacement","_BinaryenAtomicCmpxchg","createAtomicWait","timeout","expectedType","_BinaryenAtomicWait","createAtomicWake","wakeCount","_BinaryenAtomicWake","createSetLocal","_BinaryenSetLocal","createSetGlobal","_BinaryenSetGlobal","createBlock","label","children","None","_BinaryenBlock","createBreak","condition","_BinaryenBreak","createDrop","expression","_BinaryenDrop","createLoop","body","_BinaryenLoop","createIf","ifTrue","ifFalse","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","names","defaultName","numNames","strs","_BinaryenSwitch","createCall","target","returnType","_BinaryenCall","createCallImport","_BinaryenCallImport","createCallIndirect","typeName","_BinaryenCallIndirect","createUnreachable","_BinaryenUnreachable","addGlobal","mutable","initializer","_BinaryenAddGlobal","addFunction","varTypes","_BinaryenAddFunction","removeFunction","_BinaryenRemoveFunction","addTemporaryFunction","tempName","typeRef","removeTemporaryFunction","addFunctionExport","internalName","externalName","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","k","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","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","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","extendsType","elem","TypeParameterNode","createParameter","ParameterNode","parameterKind","createSignature","parameters","explicitThisType","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","arguments","decoratorKind","decoratorNameToKind","createComment","node","CommentNode","commentKind","IdentifierExpression","createEmptyIdentifierExpression","createArrayLiteralExpression","elements","ArrayLiteralExpression","elementExpressions","nodes","setParentIfNotNull","createAssertionExpression","assertionKind","toType","AssertionExpression","createBinaryExpression","operator","BinaryExpression","createCallExpression","typeArgs","CallExpression","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","element","ElementAccessExpression","elementExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","declaration","FunctionExpression","ARROW","createInstanceOfExpression","isType","InstanceOfExpression","createIntegerLiteralExpression","IntegerLiteralExpression","createNewExpression","NewExpression","createNullExpression","NullExpression","createParenthesizedExpression","ParenthesizedExpression","createPropertyAccessExpression","PropertyAccessExpression","createRegexpLiteralExpression","pattern","RegexpLiteralExpression","patternFlags","createTernaryExpression","ifThen","ifElse","TernaryExpression","createStringLiteralExpression","StringLiteralExpression","createSuperExpression","SuperExpression","createThisExpression","ThisExpression","createTrueExpression","TrueExpression","createUnaryPostfixExpression","operand","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","statements","BlockStatement","createBreakStatement","BreakStatement","createClassDeclaration","identifier","typeParameters","implementsTypes","members","decorators","ClassDeclaration","createContinueStatement","ContinueStatement","createDoStatement","statement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","values","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","path","ExportStatement","normalizePath","startsWith","resolvePath","internalPath","mangleInternalPath","createExportImportStatement","ExportImportStatement","createExportMember","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","IfStatement","createImportStatement","decls","ImportStatement","declarations","namespaceName","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createFunctionDeclaration","signature","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","COMMA","CONSTRUCTOR","FLOAT","FUNCTION","INSTANCEOF","INTEGER","NEW","PARENTHESIZED","REGEXP","TERNARY","STRING","SUPER","THIS","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","isLastStatement","BLOCK","FUNCTIONDECLARATION","METHODDECLARATION","SourceKind","Statement","Source","SOURCE","tokenizer","debugInfoIndex","exportPaths","sourceKind","pos","lastIndexOf","simplePath","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","VARIABLE","NAMESPACEDECLARATION","EXPORT","isTopLevelExport","CLASSDECLARATION","STATIC","needsExplicitExport","member","VariableLikeDeclarationStatement","BREAK","CONTINUE","DO","EMPTY","ENUMDECLARATION","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","FIELDDECLARATION","parameterIndex","FOR","IF","IMPORTDECLARATION","IMPORT","INTERFACEDECLARATION","RETURN","SWITCHCASE","SWITCH","THROW","TRY","TYPEDECLARATION","VARIABLEDECLARATION","VOID","WHILE","asGlobal","endsWith","findDecorator","decorator","OperatorKind","diagnostics_1","types_1","ast_1","module_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","resolvedThisExpression","resolvedElementExpression","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","tryResolveImport","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","resolve","has","Duplicate_identifier_0","programLevelInternalName","FUNCTION_PROTOTYPE","startFunction","GENERIC","AMBIENT","MAIN","Global","withConstantIntegerValue","setConstantFloat","withConstantFloatValue","queuedNamedExports","filterDecorators","acceptedFlags","presentFlags","decoratorKindToFlag","Duplicate_decorator","Decorator_0_is_not_valid_here","checkGlobalOptions","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","staticField","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","resolveSignature","contextualTypeArguments","reportNotFound","thisType","resolveType","parameterTypeNodes","numParameters","parameterTypes","parameterNames","requiredParameters","hasRest","parameterTypeNode","DEFAULT","REST","parameterType","returnTypeNode","Signature","asNullable","typeNode","ENUM","instance","resolveUsingTypeArguments","paramType","instanceKey","typesToString","placeholderType","resolveTypeArguments","typeArgumentNodes","alternativeReportNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","atEnd","context","flow","getScopedLocal","CLASS","resolvePropertyAccess","propertyAccess","contextualFunction","targetExpression","resolveExpression","propertyName","LOCAL","FIELD","classReference","Property_0_does_not_exist_on_type_1","indexedGet","lookupOverload","Index_signature_is_missing_in_type_0","base","resolveElementAccess","elementAccess","classType","explicitLocal","_this_cannot_be_referenced_in_current_location","_super_can_only_be_referenced_in_a_derived_class","signatureReference","functionTarget","cachedFunctionTarget","FunctionTarget","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","Element","program","NAMESPACE","ENUMVALUE","constantValue","ConstantValueKind","VariableLikeElement","constantValueKind","constantIntegerValue","CONST","INLINED","constantFloatValue","Parameter","Local","scopedGlobal","instances","classTypeArguments","functionTypeArguments","isInstance","INSTANCE","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","_b","inheritedName","inheritedType","classTypeParameters","numClassTypeParameters","numFunctionTypeArguments","signatureNode","functionTypeParameters","classInstance","signatureParameters","signatureParameterCount","parameterDeclaration","Function","resolvePartial","partialKey","partialPrototype","reportNode","resolvedTypeArguments","resolveBuiltinTypeArguments","resolvedType","localsByName","localsByIndex","additionalLocals","breakContext","debugLocations","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","DECLARE","localIndex","local","inheritedTypeArguments_2","inheritedTypeArguments_2_1","parameterName","getParameterName","Flow","addLocal","getTempLocal","wrapped","temps","toNativeType","pop","setLocalWrapped","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","debugLocation","debugInfoRef","FUNCTION_TARGET","toSignatureString","asFunction","FIELD_PROTOTYPE","Field","memoryOffset","inheritedTypeArguments_3","inheritedTypeArguments_3_1","_e","baseClass","baseClassType","Class_0_is_sealed_and_cannot_be_extended","Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa","Class","currentMemoryOffset","_f","_g","inheritedMember","partialConstructor","constructorInstance","_h","_j","fieldDeclaration","fieldType","fieldInstance","byteSize","instanceProperty","partialGetterPrototype","partialSetterPrototype","_k","_l","_m","operatorInstance","operatorPartial","asClass","inheritedTypeArguments_4","inheritedTypeArguments_4_1","baseType","isAssignableTo","current","unchecked","uncheckedOverload","overload","INTERFACE_PROTOTYPE","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","returnLabel","wrappedLocals","wrappedLocalsExt","unset","fork","branch","slice","free","scopedLocal","SCOPED","addScopedLocal","existingLocal","addScopedLocalAlias","scopedAlias","isLocalWrapped","map","ext","i64_ne","i64_and","i64_shl","i64_one","i64_zero","off","i64_or","i64_not","inherit","other","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","toSize","g","eval","e","window","TypeKind","TypeFlags","cachedNullableType","ceil","nonNullableType","isize64","isize32","usize64","usize32","computeSmallIntegerShift","targetType","signednessIsRelevant","currentClass","targetClass","targetFunction","commonCompatible","signednessIsImportant","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","typesToNativeTypes","types","numTypes","getDefaultParameterName","thisThisType","targetThisType","thisParameterTypes","targetParameterTypes","thisParameterType","targetParameterType","thisReturnType","targetReturnType","makeSignatureString","includeThis","optionalStart","restIndex","cachedDefaultParameterNames","IdentifierHandling","tokenFromKeyword","ABSTRACT","AS","ASYNC","AWAIT","CASE","CATCH","DEBUGGER","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","IS","KEYOF","LET","MODULE","OF","PACKAGE","PRIVATE","PROTECTED","PUBLIC","READONLY","TYPEOF","VAR","WITH","YIELD","tokenIsAlsoIdentifier","token","operatorTokenToString","DOT_DOT_DOT","LESSTHAN","GREATERTHAN","LESSTHAN_EQUALS","GREATERTHAN_EQUALS","EQUALS_EQUALS","EXCLAMATION_EQUALS","EQUALS_EQUALS_EQUALS","EXCLAMATION_EQUALS_EQUALS","ASTERISK_ASTERISK","ASTERISK","SLASH","PERCENT","PLUS_PLUS","MINUS_MINUS","LESSTHAN_LESSTHAN","GREATERTHAN_GREATERTHAN","GREATERTHAN_GREATERTHAN_GREATERTHAN","AMPERSAND","BAR","CARET","EXCLAMATION","TILDE","AMPERSAND_AMPERSAND","BAR_BAR","EQUALS","PLUS_EQUALS","MINUS_EQUALS","ASTERISK_EQUALS","ASTERISK_ASTERISK_EQUALS","SLASH_EQUALS","PERCENT_EQUALS","LESSTHAN_LESSTHAN_EQUALS","GREATERTHAN_GREATERTHAN_EQUALS","GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS","AMPERSAND_EQUALS","BAR_EQUALS","CARET_EQUALS","a","b","Tokenizer","tokenPos","nextToken","nextTokenPos","nextTokenOnNewLine","onComment","identifierHandling","unsafeNext","maxTokenLength","STRINGLITERAL","OPENPAREN","CLOSEPAREN","isDecimalDigit","FLOATLITERAL","DOT","commentStartPos","LINE","TRIPLE","closed","_0_expected","testInteger","INTEGERLITERAL","COLON","SEMICOLON","EQUALS_GREATERTHAN","QUESTION","OPENBRACKET","CLOSEBRACKET","OPENBRACE","CLOSEBRACE","AT","isIdentifierStart","isKeywordCharacter","posBefore","isIdentifierPart","keywordToken","ALWAYS","PREFER","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skipIdentifier","skip","skipIdentifierName","mark","state","reusableState","State","discard","reset","readIdentifier","quote","Unterminated_string_literal","readEscapeSequence","Unexpected_end_of_text","readExtendedUnicodeEscape","readUnicodeEscape","fromCharCode","readRegexpPattern","escaped","Unterminated_regular_expression_literal","readRegexpFlags","Invalid_regular_expression_flags","readInteger","readHexInteger","readBinaryInteger","readOctalInteger","isOctalDigit","Octal_literals_are_not_allowed_in_strict_mode","readDecimalInteger","i64_16","sepEnd","i64_add","i64_mul","Numeric_separators_are_not_allowed_here","Multiple_consecutive_numeric_separators_are_not_permitted","Hexadecimal_digit_expected","i64_10","Digit_expected","i64_8","Octal_digit_expected","i64_2","i64_1","Binary_digit_expected","readFloat","readDecimalFloat","parseFloat","readHexFloat","remain","value32","invalid","An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive","Unterminated_Unicode_escape_sequence","finish","builtins_1","program_1","Options","WASM32","importMemory","importTable","features","feature","Feature","ConversionKind","WrapMode","mangleImportName_moduleName","mangleImportName_elementName","Compiler","currentOuterFunction","currentEnum","currentType","memorySegments","stringSegments","functionTable","argcVar","argcSet","f32ModInstance","f64ModInstance","f32PowInstance","f64PowInstance","max","compile","startFunctionInstance","startFunctionBody","compileSource","funcRef","ensureFunctionType","i64_align","numPages","i64_shr_u","functionTableSize","functionTableExported","entries","compileSourceByPath","File_0_not_found","COMPILED","isGeneric","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","initExpr","Type_expected","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","Type_0_is_not_generic","inferredTypes","numTypeParameters","numParameterTypes","numArguments","argumentExprs","argumentExpression","inferredType","concreteType","compileCallIndirect","compileCall","checkCallSignature","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","inline","compileCallInlineUnchecked","numArgumentsInclThis","previousFlow","thisLocal","paramExpr","argumentLocal","bodyStatement","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","trampolineSignature","trampolineName","ofN","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","stringValue","stringSegment","stringLength","stringBuffer","stringOffset","stringType","elementType","isStatic","arrayInstance","arrayType","elementCount","nativeElementType","byteLength","Int32Array","Float32Array","Float64Array","usizeTypeSize","arraySize","bufferTotalSize","clz","data","writeI64","writeI32","writeF32","writeF64","nativeArrayType","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","currentClassInstance","makeAllocate","ifThenFlow","ifThenExpr","ifThenType","ifElseFlow","ifElseExpr","ifElseType","getValue","nativeOne","setValue","NegF32","NegF64","makeIsFalseish","ExtendI8ToI32","ExtendI16ToI32","compileAllocate","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","isInterface","Interface_declaration_cannot_have_implements_clause","parseClassMember","VIRTUAL","staticStart","staticEnd","abstractStart","abstractEnd","readonlyStart","readonlyEnd","setEnd","typeParametersStart","Type_parameters_cannot_appear_on_a_constructor_declaration","An_accessor_cannot_have_type_parameters","Type_annotation_cannot_appear_on_a_constructor_declaration","A_set_accessor_cannot_have_a_return_type_annotation","Method_0_cannot_have_an_implementation_because_it_is_marked_abstract","retMethod","Constructor_implementation_is_missing","retField","parseExportMember","asIdentifier","skipFrom","parseImportDeclaration","topLevel","parseBreak","parseContinue","parseDoStatement","parseForStatement","parseIfStatement","A_return_statement_can_only_be_used_within_a_function_body","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseVoidStatement","parseWhileStatement","parseExpressionStatement","elseStatement","case_","parseSwitchCase","_case_or_default_expected","parseExpressionStart","precedence","determinePrecedenceStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","PREFIX","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","nextPrecedence","determinePrecedence","commaExprs","isRightAssociative","propertyCall","Precedence","ExportsWalker","includePrivate","todo","walk","visitElement","visitGlobal","visitEnum","visitFunctionInstances","visitClassInstances","visitField","prop","hasCompiledMember","visitNamespace","visitFunction","visitClass","IDLBuilder","indentLevel","build","isConst","indent","typeToString","i64_to_string","members_1","members_1_1","visitInterface","TSDBuilder","numMembers","members_2","members_2_1","ctor","Decompiler","functionId","decompile","decompiler","decompileFunction","nativeTypeToType","decompileExpression","nested","string","Loop","Break","Switch","CallImport","CallIndirect","SetGlobal","Store","AbsF32","CeilF32","FloorF32","TruncF32","NearestF32","SqrtF32","ClzI64","CtzI64","PopcntI64","AbsF64","CeilF64","FloorF64","TruncF64","NearestF64","SqrtF64","ReinterpretF32","ReinterpretF64","ReinterpretI32","ReinterpretI64","RotlI32","RotrI32","RotlI64","RotrI64","CopysignF32","MinF32","MaxF32","CopysignF64","MinF64","MaxF64","Drop","Return","Host","CurrentMemory","GrowMemory","AtomicCmpxchg","AtomicRMW","AtomicWait","AtomicWake","Auto","decompiler_1","definitions_1","formatDiagnostic","parser_1","parser","nextDiagnostic","isInfo","isWarning","isError","createOptions","setTarget","setNoTreeShaking","setNoAssert","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","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","previousPrint","print","x","_BinaryenModulePrint","_BinaryenModulePrintAsmjs","globalScope","HEAP","HEAP_OFFSET","oldHeap","copyWithin","UnreachableError","captureStackTrace","stack","AssertionError","ASC_TARGET","defineProperties","writable","MIN_POSITIVE_VALUE","EPSILON","clz32","abs","trunc","round","sqrt","y","sign","isTrueish","undefined","fromCodePoint","Number","isInteger","isArray"],"mappings":"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,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAEtCE,GACJ,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IACpB,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KACxB,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,M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","file":"assemblyscript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"binaryen\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"binaryen\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"assemblyscript\"] = factory(require(\"binaryen\"));\n\telse\n\t\troot[\"assemblyscript\"] = factory(root[\"binaryen\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__23__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 28);\n","/**\r\n * Common constants.\r\n * @module common\r\n *//***/\r\n\r\n/** Indicates traits of a {@link Node} or {@link Element}. */\r\nexport enum CommonFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n\r\n // Basic modifiers\r\n\r\n /** Has an `import` modifier. */\r\n IMPORT = 1 << 0,\r\n /** Has an `export` modifier. */\r\n EXPORT = 1 << 1,\r\n /** Has a `declare` modifier. */\r\n DECLARE = 1 << 2,\r\n /** Has a `const` modifier. */\r\n CONST = 1 << 3,\r\n /** Has a `let` modifier. */\r\n LET = 1 << 4,\r\n /** Has a `static` modifier. */\r\n STATIC = 1 << 5,\r\n /** Has a `readonly` modifier. */\r\n READONLY = 1 << 6,\r\n /** Has an `abstract` modifier. */\r\n ABSTRACT = 1 << 7,\r\n /** Has a `public` modifier. */\r\n PUBLIC = 1 << 8,\r\n /** Has a `private` modifier. */\r\n PRIVATE = 1 << 9,\r\n /** Has a `protected` modifier. */\r\n PROTECTED = 1 << 10,\r\n /** Has a `get` modifier. */\r\n GET = 1 << 11,\r\n /** Has a `set` modifier. */\r\n SET = 1 << 12,\r\n\r\n // Extended modifiers usually derived from basic modifiers\r\n\r\n /** Is ambient, that is either declared or nested in a declared element. */\r\n AMBIENT = 1 << 13,\r\n /** Is generic. */\r\n GENERIC = 1 << 14,\r\n /** Is part of a generic context. */\r\n GENERIC_CONTEXT = 1 << 15,\r\n /** Is an instance member. */\r\n INSTANCE = 1 << 16,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 17,\r\n /** Is an arrow function. */\r\n ARROW = 1 << 18,\r\n /** Is a module export. */\r\n MODULE_EXPORT = 1 << 19,\r\n /** Is a module import. */\r\n MODULE_IMPORT = 1 << 20,\r\n\r\n // Compilation states\r\n\r\n /** Is a builtin. */\r\n BUILTIN = 1 << 21,\r\n /** Is compiled. */\r\n COMPILED = 1 << 22,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 23,\r\n /** Is scoped. */\r\n SCOPED = 1 << 24,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 25,\r\n /** Is a virtual method. */\r\n VIRTUAL = 1 << 26,\r\n /** Is the main function. */\r\n MAIN = 1 << 27\r\n}\r\n\r\n/** Path delimiter inserted between file system levels. */\r\nexport const PATH_DELIMITER = \"/\";\r\n/** Substitution used to indicate the parent directory. */\r\nexport const PARENT_SUBST = \"..\";\r\n/** Function name prefix used for getters. */\r\nexport const GETTER_PREFIX = \"get:\";\r\n/** Function name prefix used for setters. */\r\nexport const SETTER_PREFIX = \"set:\";\r\n/** Delimiter used between class names and instance members. */\r\nexport const INSTANCE_DELIMITER = \"#\";\r\n/** Delimiter used between class and namespace names and static members. */\r\nexport const STATIC_DELIMITER = \".\";\r\n/** Delimiter used between a function and its inner elements. */\r\nexport const INNER_DELIMITER = \"~\";\r\n/** Substitution used to indicate a library directory. */\r\nexport const LIBRARY_SUBST = \"~lib\";\r\n/** Library directory prefix. */\r\nexport const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER;\r\n/** Prefix used to indicate a filespace element. */\r\nexport const FILESPACE_PREFIX = \"file:\";\r\n","/**\r\n * Various compiler utilities.\r\n * @module util\r\n * @preferred\r\n *//***/\r\n\r\nexport * from \"./charcode\";\r\nexport * from \"./path\";\r\nexport * from \"./text\";\r\nexport * from \"./binary\";\r\n","/**\r\n * Shared diagnostic handling inherited by the parser and the compiler.\r\n * @module diagnostics\r\n * @preferred\r\n *//***/\r\n\r\nimport {\r\n Range\r\n} from \"./ast\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nimport {\r\n isLineBreak\r\n} from \"./util\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\n/** Indicates the category of a {@link DiagnosticMessage}. */\r\nexport enum DiagnosticCategory {\r\n /** Informatory message. */\r\n INFO,\r\n /** Warning message. */\r\n WARNING,\r\n /** Error message. */\r\n ERROR\r\n}\r\n\r\n/** Returns the string representation of the specified diagnostic category. */\r\nexport function diagnosticCategoryToString(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return \"INFO\";\r\n case DiagnosticCategory.WARNING: return \"WARNING\";\r\n case DiagnosticCategory.ERROR: return \"ERROR\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** ANSI escape sequence for blue foreground. */\r\nexport const COLOR_BLUE: string = \"\\u001b[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 * A thin wrapper around Binaryen's C-API.\r\n * @module module\r\n *//***/\r\n\r\nimport {\r\n Target\r\n} from \"./compiler\";\r\n\r\nexport type ModuleRef = usize;\r\nexport type FunctionTypeRef = usize;\r\nexport type FunctionRef = usize;\r\nexport type ExpressionRef = usize;\r\nexport type GlobalRef = usize;\r\nexport type ImportRef = usize;\r\nexport type ExportRef = usize;\r\nexport type Index = u32;\r\n\r\nexport enum NativeType {\r\n None = _BinaryenTypeNone(),\r\n I32 = _BinaryenTypeInt32(),\r\n I64 = _BinaryenTypeInt64(),\r\n F32 = _BinaryenTypeFloat32(),\r\n F64 = _BinaryenTypeFloat64(),\r\n Unreachable = _BinaryenTypeUnreachable(),\r\n Auto = _BinaryenTypeAuto()\r\n}\r\n\r\nexport enum ExpressionId {\r\n Invalid = _BinaryenInvalidId(),\r\n Block = _BinaryenBlockId(),\r\n If = _BinaryenIfId(),\r\n Loop = _BinaryenLoopId(),\r\n Break = _BinaryenBreakId(),\r\n Switch = _BinaryenSwitchId(),\r\n Call = _BinaryenCallId(),\r\n CallImport = _BinaryenCallImportId(),\r\n CallIndirect = _BinaryenCallIndirectId(),\r\n GetLocal = _BinaryenGetLocalId(),\r\n SetLocal = _BinaryenSetLocalId(),\r\n GetGlobal = _BinaryenGetGlobalId(),\r\n SetGlobal = _BinaryenSetGlobalId(),\r\n Load = _BinaryenLoadId(),\r\n Store = _BinaryenStoreId(),\r\n Const = _BinaryenConstId(),\r\n Unary = _BinaryenUnaryId(),\r\n Binary = _BinaryenBinaryId(),\r\n Select = _BinaryenSelectId(),\r\n Drop = _BinaryenDropId(),\r\n Return = _BinaryenReturnId(),\r\n Host = _BinaryenHostId(),\r\n Nop = _BinaryenNopId(),\r\n Unreachable = _BinaryenUnreachableId(),\r\n AtomicCmpxchg = _BinaryenAtomicCmpxchgId(),\r\n AtomicRMW = _BinaryenAtomicRMWId(),\r\n AtomicWait = _BinaryenAtomicWaitId(),\r\n AtomicWake = _BinaryenAtomicWakeId()\r\n}\r\n\r\nexport enum UnaryOp {\r\n ClzI32 = _BinaryenClzInt32(),\r\n CtzI32 = _BinaryenCtzInt32(),\r\n PopcntI32 = _BinaryenPopcntInt32(),\r\n NegF32 = _BinaryenNegFloat32(),\r\n AbsF32 = _BinaryenAbsFloat32(),\r\n CeilF32 = _BinaryenCeilFloat32(),\r\n FloorF32 = _BinaryenFloorFloat32(),\r\n TruncF32 = _BinaryenTruncFloat32(),\r\n NearestF32 = _BinaryenNearestFloat32(),\r\n SqrtF32 = _BinaryenSqrtFloat32(),\r\n EqzI32 = _BinaryenEqZInt32(),\r\n ClzI64 = _BinaryenClzInt64(),\r\n CtzI64 = _BinaryenCtzInt64(),\r\n PopcntI64 = _BinaryenPopcntInt64(),\r\n NegF64 = _BinaryenNegFloat64(),\r\n AbsF64 = _BinaryenAbsFloat64(),\r\n CeilF64 = _BinaryenCeilFloat64(),\r\n FloorF64 = _BinaryenFloorFloat64(),\r\n TruncF64 = _BinaryenTruncFloat64(),\r\n NearestF64 = _BinaryenNearestFloat64(),\r\n SqrtF64 = _BinaryenSqrtFloat64(),\r\n EqzI64 = _BinaryenEqZInt64(),\r\n ExtendI32 = _BinaryenExtendSInt32(),\r\n ExtendU32 = _BinaryenExtendUInt32(),\r\n WrapI64 = _BinaryenWrapInt64(),\r\n TruncF32ToI32 = _BinaryenTruncSFloat32ToInt32(),\r\n TruncF32ToI64 = _BinaryenTruncSFloat32ToInt64(),\r\n TruncF32ToU32 = _BinaryenTruncUFloat32ToInt32(),\r\n TruncF32ToU64 = _BinaryenTruncUFloat32ToInt64(),\r\n TruncF64ToI32 = _BinaryenTruncSFloat64ToInt32(),\r\n TruncF64ToI64 = _BinaryenTruncSFloat64ToInt64(),\r\n TruncF64ToU32 = _BinaryenTruncUFloat64ToInt32(),\r\n TruncF64ToU64 = _BinaryenTruncUFloat64ToInt64(),\r\n ReinterpretF32 = _BinaryenReinterpretFloat32(),\r\n ReinterpretF64 = _BinaryenReinterpretFloat64(),\r\n ConvertI32ToF32 = _BinaryenConvertSInt32ToFloat32(),\r\n ConvertI32ToF64 = _BinaryenConvertSInt32ToFloat64(),\r\n ConvertU32ToF32 = _BinaryenConvertUInt32ToFloat32(),\r\n ConvertU32ToF64 = _BinaryenConvertUInt32ToFloat64(),\r\n ConvertI64ToF32 = _BinaryenConvertSInt64ToFloat32(),\r\n ConvertI64ToF64 = _BinaryenConvertSInt64ToFloat64(),\r\n ConvertU64ToF32 = _BinaryenConvertUInt64ToFloat32(),\r\n ConvertU64ToF64 = _BinaryenConvertUInt64ToFloat64(),\r\n PromoteF32 = _BinaryenPromoteFloat32(),\r\n DemoteF64 = _BinaryenDemoteFloat64(),\r\n ReinterpretI32 = _BinaryenReinterpretInt32(),\r\n ReinterpretI64 = _BinaryenReinterpretInt64(),\r\n\r\n // see: https://github.com/WebAssembly/sign-extension-ops\r\n ExtendI8ToI32 = _BinaryenExtendS8Int32(),\r\n ExtendI16ToI32 = _BinaryenExtendS16Int32(),\r\n ExtendI8ToI64 = _BinaryenExtendS8Int64(),\r\n ExtendI16ToI64 = _BinaryenExtendS16Int64(),\r\n ExtendI32ToI64 = _BinaryenExtendS32Int64()\r\n\r\n // see: https://github.com/WebAssembly/nontrapping-float-to-int-conversions\r\n // TruncF32ToI32Sat\r\n // TruncF32ToU32Sat\r\n // TruncF64ToI32Sat\r\n // TruncF64ToU32Sat\r\n // TruncF32ToI64Sat\r\n // TruncF32ToU64Sat\r\n // TruncF64ToI64Sat\r\n // TruncF64ToU64Sat\r\n}\r\n\r\nexport enum BinaryOp {\r\n AddI32 = _BinaryenAddInt32(),\r\n SubI32 = _BinaryenSubInt32(),\r\n MulI32 = _BinaryenMulInt32(),\r\n DivI32 = _BinaryenDivSInt32(),\r\n DivU32 = _BinaryenDivUInt32(),\r\n RemI32 = _BinaryenRemSInt32(),\r\n RemU32 = _BinaryenRemUInt32(),\r\n AndI32 = _BinaryenAndInt32(),\r\n OrI32 = _BinaryenOrInt32(),\r\n XorI32 = _BinaryenXorInt32(),\r\n ShlI32 = _BinaryenShlInt32(),\r\n ShrU32 = _BinaryenShrUInt32(),\r\n ShrI32 = _BinaryenShrSInt32(),\r\n RotlI32 = _BinaryenRotLInt32(),\r\n RotrI32 = _BinaryenRotRInt32(),\r\n EqI32 = _BinaryenEqInt32(),\r\n NeI32 = _BinaryenNeInt32(),\r\n LtI32 = _BinaryenLtSInt32(),\r\n LtU32 = _BinaryenLtUInt32(),\r\n LeI32 = _BinaryenLeSInt32(),\r\n LeU32 = _BinaryenLeUInt32(),\r\n GtI32 = _BinaryenGtSInt32(),\r\n GtU32 = _BinaryenGtUInt32(),\r\n GeI32 = _BinaryenGeSInt32(),\r\n GeU32 = _BinaryenGeUInt32(),\r\n AddI64 = _BinaryenAddInt64(),\r\n SubI64 = _BinaryenSubInt64(),\r\n MulI64 = _BinaryenMulInt64(),\r\n DivI64 = _BinaryenDivSInt64(),\r\n DivU64 = _BinaryenDivUInt64(),\r\n RemI64 = _BinaryenRemSInt64(),\r\n RemU64 = _BinaryenRemUInt64(),\r\n AndI64 = _BinaryenAndInt64(),\r\n OrI64 = _BinaryenOrInt64(),\r\n XorI64 = _BinaryenXorInt64(),\r\n ShlI64 = _BinaryenShlInt64(),\r\n ShrU64 = _BinaryenShrUInt64(),\r\n ShrI64 = _BinaryenShrSInt64(),\r\n RotlI64 = _BinaryenRotLInt64(),\r\n RotrI64 = _BinaryenRotRInt64(),\r\n EqI64 = _BinaryenEqInt64(),\r\n NeI64 = _BinaryenNeInt64(),\r\n LtI64 = _BinaryenLtSInt64(),\r\n LtU64 = _BinaryenLtUInt64(),\r\n LeI64 = _BinaryenLeSInt64(),\r\n LeU64 = _BinaryenLeUInt64(),\r\n GtI64 = _BinaryenGtSInt64(),\r\n GtU64 = _BinaryenGtUInt64(),\r\n GeI64 = _BinaryenGeSInt64(),\r\n GeU64 = _BinaryenGeUInt64(),\r\n AddF32 = _BinaryenAddFloat32(),\r\n SubF32 = _BinaryenSubFloat32(),\r\n MulF32 = _BinaryenMulFloat32(),\r\n DivF32 = _BinaryenDivFloat32(),\r\n CopysignF32 = _BinaryenCopySignFloat32(),\r\n MinF32 = _BinaryenMinFloat32(),\r\n MaxF32 = _BinaryenMaxFloat32(),\r\n EqF32 = _BinaryenEqFloat32(),\r\n NeF32 = _BinaryenNeFloat32(),\r\n LtF32 = _BinaryenLtFloat32(),\r\n LeF32 = _BinaryenLeFloat32(),\r\n GtF32 = _BinaryenGtFloat32(),\r\n GeF32 = _BinaryenGeFloat32(),\r\n AddF64 = _BinaryenAddFloat64(),\r\n SubF64 = _BinaryenSubFloat64(),\r\n MulF64 = _BinaryenMulFloat64(),\r\n DivF64 = _BinaryenDivFloat64(),\r\n CopysignF64 = _BinaryenCopySignFloat64(),\r\n MinF64 = _BinaryenMinFloat64(),\r\n MaxF64 = _BinaryenMaxFloat64(),\r\n EqF64 = _BinaryenEqFloat64(),\r\n NeF64 = _BinaryenNeFloat64(),\r\n LtF64 = _BinaryenLtFloat64(),\r\n LeF64 = _BinaryenLeFloat64(),\r\n GtF64 = _BinaryenGtFloat64(),\r\n GeF64 = _BinaryenGeFloat64()\r\n}\r\n\r\nexport enum HostOp {\r\n PageSize = _BinaryenPageSize(),\r\n CurrentMemory = _BinaryenCurrentMemory(),\r\n GrowMemory = _BinaryenGrowMemory(),\r\n HasFeature = _BinaryenHasFeature(),\r\n\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n // MoveMemory\r\n // SetMemory\r\n}\r\n\r\nexport enum AtomicRMWOp {\r\n Add = _BinaryenAtomicRMWAdd(),\r\n Sub = _BinaryenAtomicRMWSub(),\r\n And = _BinaryenAtomicRMWAnd(),\r\n Or = _BinaryenAtomicRMWOr(),\r\n Xor = _BinaryenAtomicRMWXor(),\r\n Xchg = _BinaryenAtomicRMWXchg()\r\n}\r\n\r\nexport class MemorySegment {\r\n\r\n buffer: Uint8Array;\r\n offset: I64;\r\n\r\n static create(buffer: Uint8Array, offset: I64): MemorySegment {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n }\r\n}\r\n\r\nexport class Module {\r\n\r\n ref: ModuleRef;\r\n\r\n private cachedByValue: usize;\r\n\r\n /** Maximum number of pages when targeting WASM32. */\r\n static readonly MAX_MEMORY_WASM32: Index = 0xffff;\r\n\r\n /** Maximum number of pages when targeting WASM64. */\r\n static readonly MAX_MEMORY_WASM64: Index = 0xffff; // TODO\r\n\r\n static create(): Module {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.cachedByValue = allocate_memory(16);\r\n return module;\r\n }\r\n\r\n static createFrom(buffer: Uint8Array): Module {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.cachedByValue = allocate_memory(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n free_memory(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeFunctionType(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunctionType(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocPtrArray(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, numNames, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) free_memory(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallImport(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCallImport(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocPtrArray(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[] | null,\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes ? varTypes.length : 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n private cachedTemporaryName: usize = 0;\r\n private hasTemporaryFunction: bool = false;\r\n\r\n addTemporaryFunction(result: NativeType, paramTypes: NativeType[] | null, body: ExpressionRef): FunctionRef {\r\n this.hasTemporaryFunction = assert(!this.hasTemporaryFunction);\r\n var tempName = this.cachedTemporaryName;\r\n if (!tempName) this.cachedTemporaryName = tempName = allocString(\"\"); // works because strings are interned\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n let typeRef = _BinaryenAddFunctionType(this.ref, tempName, result, cArr, paramTypes ? paramTypes.length : 0);\r\n return _BinaryenAddFunction(this.ref, tempName, typeRef, 0, 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeTemporaryFunction(): void {\r\n this.hasTemporaryFunction = !assert(this.hasTemporaryFunction);\r\n var tempName = assert(this.cachedTemporaryName);\r\n _BinaryenRemoveFunction(this.ref, tempName);\r\n _BinaryenRemoveFunctionType(this.ref, tempName);\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeImport(internalName: string): void {\r\n var cStr = allocString(internalName);\r\n try {\r\n _BinaryenRemoveImport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n free_memory(cArr3);\r\n free_memory(cArr2);\r\n free_memory(cArr1);\r\n for (let i = k - 1; i >= 0; --i) free_memory(segs[i]);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(funcs: FunctionRef[]): void {\r\n var cArr = allocPtrArray(funcs);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, funcs.length);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n free_memory(cArr);\r\n for (let i = numNames; i >= 0; --i) {\r\n free_memory(names[i]);\r\n }\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0;\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeFunction(func: FunctionRef): void {\r\n var names = this.cachedPrecomputeNames;\r\n if (!names) {\r\n let name = allocString(\"precompute\");\r\n this.cachedPrecomputeName = name;\r\n this.cachedPrecomputeNames = names = allocI32Array([ name ]);\r\n }\r\n _BinaryenFunctionRunPasses(func, this.ref, names, 1);\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): BinaryModule {\r\n var out = this.cachedByValue;\r\n var cStr = allocString(sourceMapUrl);\r\n var binaryPtr: usize = 0;\r\n var sourceMapPtr: usize = 0;\r\n try {\r\n _BinaryenModuleAllocateAndWrite(out, this.ref, cStr);\r\n binaryPtr = readInt(out);\r\n let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let ret = new BinaryModule();\r\n ret.output = readBuffer(binaryPtr, binaryBytes);\r\n ret.sourceMap = readString(sourceMapPtr);\r\n return ret;\r\n } finally {\r\n if (cStr) free_memory(cStr);\r\n if (binaryPtr) free_memory(binaryPtr);\r\n if (sourceMapPtr) free_memory(sourceMapPtr);\r\n }\r\n }\r\n\r\n toText(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n toAsmjs(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n dispose(): void {\r\n assert(this.ref);\r\n free_memory(this.cachedByValue);\r\n free_memory(this.cachedTemporaryName);\r\n free_memory(this.cachedPrecomputeName);\r\n free_memory(this.cachedPrecomputeNames);\r\n _BinaryenModuleDispose(this.ref);\r\n this.ref = 0;\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(\r\n expr: ExpressionRef,\r\n noSideEffects: bool = false,\r\n maxDepth: i32 = i32.MAX_VALUE\r\n ): ExpressionRef { // currently supports side effect free expressions only\r\n if (maxDepth < 0) return 0;\r\n maxDepth -= 1;\r\n\r\n var nested1: ExpressionRef,\r\n nested2: ExpressionRef;\r\n\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n }\r\n case ExpressionId.GetLocal: {\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n }\r\n case ExpressionId.GetGlobal: {\r\n let globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n }\r\n case ExpressionId.Load: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return (\r\n _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n );\r\n }\r\n case ExpressionId.Unary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n }\r\n case ExpressionId.Binary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\n// expressions\r\n\r\nexport function getExpressionId(expr: ExpressionRef): ExpressionId {\r\n return _BinaryenExpressionGetId(expr);\r\n}\r\n\r\nexport function getExpressionType(expr: ExpressionRef): NativeType {\r\n return _BinaryenExpressionGetType(expr);\r\n}\r\n\r\nexport function getConstValueI32(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI32(expr);\r\n}\r\n\r\nexport function getConstValueI64Low(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64Low(expr);\r\n}\r\n\r\nexport function getConstValueI64High(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64High(expr);\r\n}\r\n\r\nexport function getConstValueF32(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF32(expr);\r\n}\r\n\r\nexport function getConstValueF64(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF64(expr);\r\n}\r\n\r\nexport function getGetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenGetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenSetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSetLocalGetValue(expr);\r\n}\r\n\r\nexport function isTeeLocal(expr: ExpressionRef): bool {\r\n return _BinaryenSetLocalIsTee(expr);\r\n}\r\n\r\nexport function getBinaryOp(expr: ExpressionRef): BinaryOp {\r\n return _BinaryenBinaryGetOp(expr);\r\n}\r\n\r\nexport function getBinaryLeft(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetLeft(expr);\r\n}\r\n\r\nexport function getBinaryRight(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetRight(expr);\r\n}\r\n\r\nexport function getUnaryOp(expr: ExpressionRef): UnaryOp {\r\n return _BinaryenUnaryGetOp(expr);\r\n}\r\n\r\nexport function getUnaryValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenUnaryGetValue(expr);\r\n}\r\n\r\nexport function getLoadBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetBytes(expr);\r\n}\r\n\r\nexport function getLoadOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetOffset(expr);\r\n}\r\n\r\nexport function getLoadPtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoadGetPtr(expr);\r\n}\r\n\r\nexport function isLoadSigned(expr: ExpressionRef): bool {\r\n return _BinaryenLoadIsSigned(expr);\r\n}\r\n\r\nexport function getStoreBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetBytes(expr);\r\n}\r\n\r\nexport function getStoreOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetOffset(expr);\r\n}\r\n\r\nexport function getStorePtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetPtr(expr);\r\n}\r\n\r\nexport function getStoreValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetValue(expr);\r\n}\r\n\r\nexport function getBlockName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBlockGetName(expr));\r\n}\r\n\r\nexport function getBlockChildCount(expr: ExpressionRef): Index {\r\n return _BinaryenBlockGetNumChildren(expr);\r\n}\r\n\r\nexport function getBlockChild(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenBlockGetChild(expr, index);\r\n}\r\n\r\nexport function getIfCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetCondition(expr);\r\n}\r\n\r\nexport function getIfTrue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfTrue(expr);\r\n}\r\n\r\nexport function getIfFalse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfFalse(expr);\r\n}\r\n\r\nexport function getLoopName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenLoopGetName(expr));\r\n}\r\n\r\nexport function getLoopBody(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoopGetBody(expr);\r\n}\r\n\r\nexport function getBreakName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBreakGetName(expr));\r\n}\r\n\r\nexport function getBreakCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBreakGetCondition(expr);\r\n}\r\n\r\nexport function getSelectThen(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfTrue(expr);\r\n}\r\n\r\nexport function getSelectElse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfFalse(expr);\r\n}\r\n\r\nexport function getSelectCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetCondition(expr);\r\n}\r\n\r\nexport function getDropValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenDropGetValue(expr);\r\n}\r\n\r\nexport function getReturnValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenReturnGetValue(expr);\r\n}\r\n\r\nexport function getCallTarget(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenCallGetTarget(expr));\r\n}\r\n\r\nexport function getHostOp(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenHostGetOp(expr);\r\n}\r\n\r\nexport function getHostOperandCount(expr: ExpressionRef): Index {\r\n return _BinaryenHostGetNumOperands(expr);\r\n}\r\n\r\nexport function getHostOperand(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenHostGetOperand(expr, index);\r\n}\r\n\r\nexport function getHostName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenHostGetNameOperand(expr));\r\n}\r\n\r\n// functions\r\n\r\nexport function getFunctionBody(func: FunctionRef): ExpressionRef {\r\n return _BinaryenFunctionGetBody(func);\r\n}\r\n\r\nexport function getFunctionName(func: FunctionRef): string | null {\r\n return readString(_BinaryenFunctionGetName(func));\r\n}\r\n\r\nexport function getFunctionParamCount(func: FunctionRef): Index {\r\n return _BinaryenFunctionGetNumParams(func);\r\n}\r\n\r\nexport function getFunctionParamType(func: FunctionRef, index: Index): NativeType {\r\n return _BinaryenFunctionGetParam(func, index);\r\n}\r\n\r\nexport function getFunctionResultType(func: FunctionRef): NativeType {\r\n return _BinaryenFunctionGetResult(func);\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n }\r\n\r\n private constructor() {}\r\n\r\n addBlock(code: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlock(this.ref, code);\r\n }\r\n\r\n addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void {\r\n _RelooperAddBranch(from, to, condition, code);\r\n }\r\n\r\n addBlockWithSwitch(code: ExpressionRef, condition: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n }\r\n\r\n addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n }\r\n}\r\n\r\n// export function hasSideEffects(expr: ExpressionRef): bool {\r\n// switch (_BinaryenExpressionGetId(expr = getPtr(expr))) {\r\n// case ExpressionId.GetLocal:\r\n// case ExpressionId.GetGlobal:\r\n// case ExpressionId.Const:\r\n// case ExpressionId.Nop:\r\n// case ExpressionId.Unreachable: {\r\n// return false;\r\n// }\r\n// case ExpressionId.Block: {\r\n// for (let i = 0, k = _BinaryenBlockGetNumChildren(expr); i < k; ++i) {\r\n// if (hasSideEffects(_BinaryenBlockGetChild(expr, i))) return true;\r\n// }\r\n// return false;\r\n// }\r\n// case ExpressionId.If: {\r\n// return hasSideEffects(_BinaryenIfGetCondition(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfFalse(expr));\r\n// }\r\n// case ExpressionId.Unary: {\r\n// return hasSideEffects(_BinaryenUnaryGetValue(expr));\r\n// }\r\n// case ExpressionId.Binary: {\r\n// return hasSideEffects(_BinaryenBinaryGetLeft(expr))\r\n// || hasSideEffects(_BinaryenBinaryGetRight(expr));\r\n// }\r\n// case ExpressionId.Drop: {\r\n// return hasSideEffects(_BinaryenDropGetValue(expr));\r\n// }\r\n// case ExpressionId.Select: {\r\n// return hasSideEffects(_BinaryenSelectGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenSelectGetIfFalse(expr))\r\n// || hasSideEffects(_BinaryenSelectGetCondition(expr));\r\n// }\r\n// }\r\n// return true;\r\n// }\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var numValues = u8s.length;\r\n var ptr = allocate_memory(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = allocate_memory(i32s.length << 2);\r\n var idx = ptr;\r\n for (let i = 0, k = i32s.length; i < k; ++i) {\r\n let val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocPtrArray(ptrs: usize[] | null): usize {\r\n return allocI32Array(ptrs); // TODO: WASM64 one day\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = allocate_memory(stringLengthUTF8(str) + 1);\r\n // the following is based on Emscripten's stringToUTF8Array\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\nfunction readInt(ptr: usize): i32 {\r\n return (\r\n load(ptr ) |\r\n (load(ptr + 1) << 8) |\r\n (load(ptr + 2) << 16) |\r\n (load(ptr + 3) << 24)\r\n );\r\n}\r\n\r\nfunction readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (let i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n arr.push(cp);\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\nexport class BinaryModule {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n","/**\r\n * Abstract syntax tree representing a source file once parsed.\r\n * @module ast\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX\r\n} from \"./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 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 createCommaExpression(\r\n expressions: Expression[],\r\n range: Range\r\n ): CommaExpression {\r\n var expr = new CommaExpression();\r\n expr.range = range;\r\n expr.expressions = expressions; setParent(expressions, expr);\r\n return expr;\r\n }\r\n\r\n static createConstructorExpression(\r\n range: Range\r\n ): ConstructorExpression {\r\n var expr = new ConstructorExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createElementAccessExpression(\r\n expression: Expression,\r\n element: Expression,\r\n range: Range\r\n ): ElementAccessExpression {\r\n var expr = new ElementAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.elementExpression = element; element.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createFalseExpression(\r\n range: Range\r\n ): FalseExpression {\r\n var expr = new FalseExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createFloatLiteralExpression(\r\n value: f64,\r\n range: Range\r\n ): FloatLiteralExpression {\r\n var expr = new FloatLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createFunctionExpression(\r\n declaration: FunctionDeclaration\r\n ): FunctionExpression {\r\n var expr = new FunctionExpression();\r\n expr.flags = declaration.flags & CommonFlags.ARROW;\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createInstanceOfExpression(\r\n expression: Expression,\r\n isType: CommonTypeNode,\r\n range: Range\r\n ): InstanceOfExpression {\r\n var expr = new InstanceOfExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.isType = isType; isType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createIntegerLiteralExpression(\r\n value: I64,\r\n range: Range\r\n ): IntegerLiteralExpression {\r\n var expr = new IntegerLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createNewExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): NewExpression {\r\n var expr = new NewExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createNullExpression(\r\n range: Range\r\n ): NullExpression {\r\n var expr = new NullExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createParenthesizedExpression(\r\n expression: Expression,\r\n range: Range\r\n ): ParenthesizedExpression {\r\n var expr = new ParenthesizedExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createPropertyAccessExpression(\r\n expression: Expression,\r\n property: IdentifierExpression,\r\n range: Range\r\n ): PropertyAccessExpression {\r\n var expr = new PropertyAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.property = property; property.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createRegexpLiteralExpression(\r\n pattern: string,\r\n flags: string,\r\n range: Range\r\n ): RegexpLiteralExpression {\r\n var expr = new RegexpLiteralExpression();\r\n expr.range = range;\r\n expr.pattern = pattern;\r\n expr.patternFlags = flags;\r\n return expr;\r\n }\r\n\r\n static createTernaryExpression(\r\n condition: Expression,\r\n ifThen: Expression,\r\n ifElse: Expression,\r\n range: Range\r\n ): TernaryExpression {\r\n var expr = new TernaryExpression();\r\n expr.range = range;\r\n expr.condition = condition; condition.parent = expr;\r\n expr.ifThen = ifThen; ifThen.parent = expr;\r\n expr.ifElse = ifElse; ifElse.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createStringLiteralExpression(\r\n value: string,\r\n range: Range\r\n ): StringLiteralExpression {\r\n var expr = new StringLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createSuperExpression(\r\n range: Range\r\n ): SuperExpression {\r\n var expr = new SuperExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createThisExpression(\r\n range: Range\r\n ): ThisExpression {\r\n var expr = new ThisExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createTrueExpression(\r\n range: Range\r\n ): TrueExpression {\r\n var expr = new TrueExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createUnaryPostfixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPostfixExpression {\r\n var expr = new UnaryPostfixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createUnaryPrefixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPrefixExpression {\r\n var expr = new UnaryPrefixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n // statements\r\n\r\n static createBlockStatement(\r\n statements: Statement[],\r\n range: Range\r\n ): BlockStatement {\r\n var stmt = new BlockStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createBreakStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): BreakStatement {\r\n var stmt = new BreakStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createClassDeclaration(\r\n identifier: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n implementsTypes: TypeNode[] | null, // can't be functions\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ClassDeclaration {\r\n var stmt = new ClassDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = identifier; identifier.parent = stmt;\r\n stmt.typeParameters = typeParameters; setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.implementsTypes = implementsTypes; if (implementsTypes) setParent(implementsTypes, stmt);\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createContinueStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): ContinueStatement {\r\n var stmt = new ContinueStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createDoStatement(\r\n statement: Statement,\r\n condition: Expression,\r\n range: Range\r\n ): DoStatement {\r\n var stmt = new DoStatement();\r\n stmt.range = range;\r\n stmt.statement = statement; statement.parent = stmt;\r\n stmt.condition = condition; condition.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createEmptyStatement(\r\n range: Range\r\n ): EmptyStatement {\r\n var stmt = new EmptyStatement();\r\n stmt.range = range;\r\n return stmt;\r\n }\r\n\r\n static createEnumDeclaration(\r\n name: IdentifierExpression,\r\n members: EnumValueDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumDeclaration {\r\n var stmt = new EnumDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.values = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createEnumValueDeclaration(\r\n name: IdentifierExpression,\r\n value: Expression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumValueDeclaration {\r\n var stmt = new EnumValueDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportStatement(\r\n members: ExportMember[] | null,\r\n path: StringLiteralExpression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ExportStatement {\r\n var stmt = new ExportStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.members = members; if (members) setParent(members, stmt);\r\n stmt.path = path;\r\n if (path) {\r\n let normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n } else {\r\n stmt.normalizedPath = null;\r\n stmt.internalPath = null;\r\n }\r\n return stmt;\r\n }\r\n\r\n static createExportImportStatement(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression,\r\n range: Range\r\n ): ExportImportStatement {\r\n var stmt = new ExportImportStatement();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.externalName = externalName; externalName.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportMember(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression | null,\r\n range: Range\r\n ): ExportMember {\r\n var elem = new ExportMember();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n if (!externalName) {\r\n externalName = name;\r\n } else {\r\n externalName.parent = elem;\r\n }\r\n elem.externalName = externalName;\r\n return elem;\r\n }\r\n\r\n static createExpressionStatement(\r\n expression: Expression\r\n ): ExpressionStatement {\r\n var stmt = new ExpressionStatement();\r\n stmt.range = expression.range;\r\n stmt.expression = expression; expression.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createIfStatement(\r\n condition: Expression,\r\n ifTrue: Statement,\r\n ifFalse: Statement | null,\r\n range: Range\r\n ): IfStatement {\r\n var stmt = new IfStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.ifTrue = ifTrue; ifTrue.parent = stmt;\r\n stmt.ifFalse = ifFalse; if (ifFalse) ifFalse.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createImportStatement(\r\n decls: ImportDeclaration[] | null,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = decls; if (decls) setParent(decls, stmt);\r\n stmt.namespaceName = null;\r\n stmt.path = path;\r\n var normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative in project\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute in library\r\n if (!normalizedPath.startsWith(LIBRARY_PREFIX)) {\r\n normalizedPath = LIBRARY_PREFIX + normalizedPath;\r\n }\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportStatementWithWildcard(\r\n identifier: IdentifierExpression,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = null;\r\n stmt.namespaceName = identifier;\r\n stmt.path = path;\r\n stmt.normalizedPath = resolvePath(\r\n normalizePath(path.value),\r\n range.source.normalizedPath\r\n );\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportDeclaration(\r\n externalName: IdentifierExpression,\r\n name: IdentifierExpression | null,\r\n range: Range\r\n ): ImportDeclaration {\r\n var elem = new ImportDeclaration();\r\n elem.range = range;\r\n elem.externalName = externalName; externalName.parent = elem;\r\n if (!name) {\r\n name = externalName;\r\n } else {\r\n name.parent = elem;\r\n }\r\n elem.name = name;\r\n return elem;\r\n }\r\n\r\n static createInterfaceDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): InterfaceDeclaration {\r\n var stmt = new InterfaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createFieldDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FieldDeclaration {\r\n var stmt = new FieldDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.type = type; if (type) type.parent = stmt;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createForStatement(\r\n initializer: Statement | null,\r\n condition: Expression | null,\r\n incrementor: Expression | null,\r\n statement: Statement,\r\n range: Range\r\n ): ForStatement {\r\n var stmt = new ForStatement();\r\n stmt.range = range;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.condition = condition; if (condition) condition.parent = stmt;\r\n stmt.incrementor = incrementor; if (incrementor) incrementor.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FunctionDeclaration {\r\n var stmt = new FunctionDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createMethodDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): MethodDeclaration {\r\n var stmt = new MethodDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): NamespaceDeclaration {\r\n var stmt = new NamespaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createReturnStatement(\r\n value: Expression | null,\r\n range: Range\r\n ): ReturnStatement {\r\n var stmt = new ReturnStatement();\r\n stmt.range = range;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createSwitchStatement(\r\n condition: Expression,\r\n cases: SwitchCase[],\r\n range: Range\r\n ): SwitchStatement {\r\n var stmt = new SwitchStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.cases = cases; setParent(cases, stmt);\r\n return stmt;\r\n }\r\n\r\n static createSwitchCase(\r\n label: Expression | null,\r\n statements: Statement[],\r\n range: Range\r\n ): SwitchCase {\r\n var elem = new SwitchCase();\r\n elem.range = range;\r\n elem.label = label; if (label) label.parent = elem;\r\n elem.statements = statements; setParent(statements, elem);\r\n return elem;\r\n }\r\n\r\n static createThrowStatement(\r\n value: Expression,\r\n range: Range\r\n ): ThrowStatement {\r\n var stmt = new ThrowStatement();\r\n stmt.range = range;\r\n stmt.value = value; value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createTryStatement(\r\n statements: Statement[],\r\n catchVariable: IdentifierExpression | null,\r\n catchStatements: Statement[] | null,\r\n finallyStatements: Statement[] | null,\r\n range: Range\r\n ): TryStatement {\r\n var stmt = new TryStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n stmt.catchVariable = catchVariable;\r\n if (catchVariable) catchVariable.parent = stmt;\r\n stmt.catchStatements = catchStatements;\r\n if (catchStatements) setParent(catchStatements, stmt);\r\n stmt.finallyStatements = finallyStatements;\r\n if (finallyStatements) setParent(finallyStatements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createTypeDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n alias: CommonTypeNode,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): TypeDeclaration {\r\n var stmt = new TypeDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.type = alias; alias.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableStatement(\r\n declarations: VariableDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableStatement {\r\n var stmt = new VariableStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.declarations = declarations; setParent(declarations, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableDeclaration {\r\n var elem = new VariableDeclaration();\r\n elem.range = range;\r\n elem.flags = flags;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.decorators = decorators; // inherited\r\n return elem;\r\n }\r\n\r\n static createVoidStatement(\r\n expression: Expression,\r\n range: Range\r\n ): VoidStatement {\r\n var stmt = new VoidStatement();\r\n stmt.range = range;\r\n stmt.expression = expression;\r\n return stmt;\r\n }\r\n\r\n static createWhileStatement(\r\n condition: Expression,\r\n statement: Statement,\r\n range: Range\r\n ): WhileStatement {\r\n var stmt = new WhileStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n}\r\n\r\n// types\r\n\r\nexport abstract class CommonTypeNode extends Node {\r\n // kind varies\r\n\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type annotation. */\r\nexport class TypeNode extends CommonTypeNode {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: CommonTypeNode[] | null;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameterNode extends Node {\r\n kind = NodeKind.TYPEPARAMETER;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Extended type reference, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n}\r\n\r\n/** Represents the kind of a parameter. */\r\nexport enum ParameterKind {\r\n /** No specific flags. */\r\n DEFAULT,\r\n /** Is an optional parameter. */\r\n OPTIONAL,\r\n /** Is a rest parameter. */\r\n REST\r\n}\r\n\r\n/** Represents a function parameter. */\r\nexport class ParameterNode extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: CommonTypeNode;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n /** Implicit field declaration, if applicable. */\r\n implicitFieldDeclaration: FieldDeclaration | null = null;\r\n}\r\n\r\n/** Represents a function signature. */\r\nexport class SignatureNode extends CommonTypeNode {\r\n kind = NodeKind.SIGNATURE;\r\n\r\n /** Accepted parameters. */\r\n parameters: ParameterNode[];\r\n /** Return type. */\r\n returnType: CommonTypeNode;\r\n /** Explicitly provided this type, if any. */\r\n explicitThisType: TypeNode | null; // can't be a function\r\n}\r\n\r\n// special\r\n\r\n/** Built-in decorator kinds. */\r\nexport enum DecoratorKind {\r\n CUSTOM,\r\n GLOBAL,\r\n OPERATOR,\r\n OPERATOR_BINARY,\r\n OPERATOR_PREFIX,\r\n OPERATOR_POSTFIX,\r\n UNMANAGED,\r\n SEALED,\r\n INLINE,\r\n EXTERNAL\r\n}\r\n\r\n/** Returns the kind of the specified decorator. Defaults to {@link DecoratorKind.CUSTOM}. */\r\nexport function decoratorNameToKind(name: Expression): DecoratorKind {\r\n // @global, @inline, @operator, @sealed, @unmanaged\r\n if (name.kind == NodeKind.IDENTIFIER) {\r\n let nameStr = (name).text;\r\n assert(nameStr.length);\r\n switch (nameStr.charCodeAt(0)) {\r\n case CharCode.e: {\r\n if (nameStr == \"external\") return DecoratorKind.EXTERNAL;\r\n break;\r\n }\r\n case CharCode.g: {\r\n if (nameStr == \"global\") return DecoratorKind.GLOBAL;\r\n break;\r\n }\r\n case CharCode.i: {\r\n if (nameStr == \"inline\") return DecoratorKind.INLINE;\r\n break;\r\n }\r\n case CharCode.o: {\r\n if (nameStr == \"operator\") return DecoratorKind.OPERATOR;\r\n break;\r\n }\r\n case CharCode.s: {\r\n if (nameStr == \"sealed\") return DecoratorKind.SEALED;\r\n break;\r\n }\r\n case CharCode.u: {\r\n if (nameStr == \"unmanaged\") return DecoratorKind.UNMANAGED;\r\n break;\r\n }\r\n }\r\n } else if (\r\n name.kind == NodeKind.PROPERTYACCESS &&\r\n (name).expression.kind == NodeKind.IDENTIFIER\r\n ) {\r\n let nameStr = ((name).expression).text;\r\n assert(nameStr.length);\r\n let propStr = (name).property.text;\r\n assert(propStr.length);\r\n // @operator.binary, @operator.prefix, @operator.postfix\r\n if (nameStr == \"operator\") {\r\n switch (propStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (propStr == \"binary\") return DecoratorKind.OPERATOR_BINARY;\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (propStr) {\r\n case \"prefix\": return DecoratorKind.OPERATOR_PREFIX;\r\n case \"postfix\": return DecoratorKind.OPERATOR_POSTFIX;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return DecoratorKind.CUSTOM;\r\n}\r\n\r\n/** Represents a decorator. */\r\nexport class DecoratorNode extends Node {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n}\r\n\r\n/** Comment kinds. */\r\nexport enum CommentKind {\r\n /** Line comment. */\r\n LINE,\r\n /** Triple-slash comment. */\r\n TRIPLE,\r\n /** Block comment. */\r\n BLOCK\r\n}\r\n\r\n/** Represents a comment. */\r\nexport class CommentNode extends Node {\r\n kind = NodeKind.COMMENT;\r\n\r\n /** Comment kind. */\r\n commentKind: CommentKind;\r\n /** Comment text. */\r\n text: string;\r\n}\r\n\r\n// expressions\r\n\r\n/** Base class of all expression nodes. */\r\nexport abstract class Expression extends Node { }\r\n\r\n/** Represents an identifier expression. */\r\nexport class IdentifierExpression extends Expression {\r\n kind = NodeKind.IDENTIFIER;\r\n\r\n /** Textual name. */\r\n text: string;\r\n}\r\n\r\n/** Indicates the kind of a literal. */\r\nexport enum LiteralKind {\r\n FLOAT,\r\n INTEGER,\r\n STRING,\r\n REGEXP,\r\n ARRAY,\r\n OBJECT\r\n}\r\n\r\n/** Base class of all literal expressions. */\r\nexport abstract class LiteralExpression extends Expression {\r\n kind = NodeKind.LITERAL;\r\n\r\n /** Specific literal kind. */\r\n literalKind: LiteralKind;\r\n}\r\n\r\n/** Represents an `[]` literal expression. */\r\nexport class ArrayLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.ARRAY;\r\n\r\n /** Nested element expressions. */\r\n elementExpressions: (Expression | null)[];\r\n}\r\n\r\n/** Indicates the kind of an assertion. */\r\nexport enum AssertionKind {\r\n PREFIX,\r\n AS\r\n}\r\n\r\n/** Represents an assertion expression. */\r\nexport class AssertionExpression extends Expression {\r\n kind = NodeKind.ASSERTION;\r\n\r\n /** Specific kind of this assertion. */\r\n assertionKind: AssertionKind;\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Target type. */\r\n toType: CommonTypeNode;\r\n}\r\n\r\n/** Represents a binary expression. */\r\nexport class BinaryExpression extends Expression {\r\n kind = NodeKind.BINARY;\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Left-hand side expression */\r\n left: Expression;\r\n /** Right-hand side expression. */\r\n right: Expression;\r\n}\r\n\r\n/** Represents a call expression. */\r\nexport class CallExpression extends Expression {\r\n kind = NodeKind.CALL;\r\n\r\n /** Called expression. Usually an identifier or property access expression. */\r\n expression: Expression;\r\n /** Provided type arguments. */\r\n typeArguments: CommonTypeNode[] | null;\r\n /** Provided arguments. */\r\n arguments: Expression[];\r\n}\r\n\r\n/** Represents a comma expression composed of multiple expressions. */\r\nexport class CommaExpression extends Expression {\r\n kind = NodeKind.COMMA;\r\n\r\n /** Sequential expressions. */\r\n expressions: Expression[];\r\n}\r\n\r\n/** Represents a `constructor` expression. */\r\nexport class ConstructorExpression extends IdentifierExpression {\r\n kind = NodeKind.CONSTRUCTOR;\r\n text = \"constructor\";\r\n}\r\n\r\n/** Represents an element access expression, e.g., array access. */\r\nexport class ElementAccessExpression extends Expression {\r\n kind = NodeKind.ELEMENTACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Element of the expression being accessed. */\r\n elementExpression: Expression;\r\n}\r\n\r\n/** Represents a float literal expression. */\r\nexport class FloatLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.FLOAT;\r\n\r\n /** Float value. */\r\n value: f64;\r\n}\r\n\r\n/** Represents a function expression using the 'function' keyword. */\r\nexport class FunctionExpression extends Expression {\r\n kind = NodeKind.FUNCTION;\r\n\r\n /** Inline function declaration. */\r\n declaration: FunctionDeclaration;\r\n}\r\n\r\n/** Represents an `instanceof` expression. */\r\nexport class InstanceOfExpression extends Expression {\r\n kind = NodeKind.INSTANCEOF;\r\n\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Type to test for. */\r\n isType: CommonTypeNode;\r\n}\r\n\r\n/** Represents an integer literal expression. */\r\nexport class IntegerLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.INTEGER;\r\n\r\n /** Integer value. */\r\n value: I64;\r\n}\r\n\r\n/** Represents a `new` expression. Like a call but with its own kind. */\r\nexport class NewExpression extends CallExpression {\r\n kind = NodeKind.NEW;\r\n}\r\n\r\n/** Represents a `null` expression. */\r\nexport class NullExpression extends IdentifierExpression {\r\n kind = NodeKind.NULL;\r\n text = \"null\";\r\n}\r\n\r\n/** Represents a parenthesized expression. */\r\nexport class ParenthesizedExpression extends Expression {\r\n kind = NodeKind.PARENTHESIZED;\r\n\r\n /** Expression in parenthesis. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a property access expression. */\r\nexport class PropertyAccessExpression extends Expression {\r\n kind = NodeKind.PROPERTYACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Property of the expression being accessed. */\r\n property: IdentifierExpression;\r\n}\r\n\r\n/** Represents a regular expression literal expression. */\r\nexport class RegexpLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.REGEXP;\r\n\r\n /** Regular expression pattern. */\r\n pattern: string;\r\n /** Regular expression flags. */\r\n patternFlags: string;\r\n}\r\n\r\n/** Represents a ternary expression, i.e., short if notation. */\r\nexport class TernaryExpression extends Expression {\r\n kind = NodeKind.TERNARY;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Expression executed when condition is `true`. */\r\n ifThen: Expression;\r\n /** Expression executed when condition is `false`. */\r\n ifElse: Expression;\r\n}\r\n\r\n/** Represents a string literal expression. */\r\nexport class StringLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.STRING;\r\n\r\n /** String value without quotes. */\r\n value: string;\r\n}\r\n\r\n/** Represents a `super` expression. */\r\nexport class SuperExpression extends IdentifierExpression {\r\n kind = NodeKind.SUPER;\r\n text = \"super\";\r\n}\r\n\r\n/** Represents a `this` expression. */\r\nexport class ThisExpression extends IdentifierExpression {\r\n kind = NodeKind.THIS;\r\n text = \"this\";\r\n}\r\n\r\n/** Represents a `true` expression. */\r\nexport class TrueExpression extends IdentifierExpression {\r\n kind = NodeKind.TRUE;\r\n text = \"true\";\r\n}\r\n\r\n/** Represents a `false` expression. */\r\nexport class FalseExpression extends IdentifierExpression {\r\n kind = NodeKind.FALSE;\r\n text = \"false\";\r\n}\r\n\r\n/** Base class of all unary expressions. */\r\nexport abstract class UnaryExpression extends Expression {\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Operand expression. */\r\n operand: Expression;\r\n}\r\n\r\n/** Represents a unary postfix expression, e.g. a postfix increment. */\r\nexport class UnaryPostfixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPOSTFIX;\r\n}\r\n\r\n/** Represents a unary prefix expression, e.g. a negation. */\r\nexport class UnaryPrefixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPREFIX;\r\n}\r\n\r\n// statements\r\n\r\nexport function isLastStatement(statement: Statement): bool {\r\n var parent = assert(statement.parent);\r\n if (parent.kind == NodeKind.BLOCK) {\r\n let statements = (parent).statements;\r\n if (statements[statements.length - 1] === statement) {\r\n switch (assert(parent.parent).kind) {\r\n case NodeKind.FUNCTIONDECLARATION:\r\n case NodeKind.METHODDECLARATION: return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all statement nodes. */\r\nexport abstract class Statement extends Node { }\r\n\r\n/** Indicates the specific kind of a source. */\r\nexport enum SourceKind {\r\n /** Default source. Usually imported from an entry file. */\r\n DEFAULT,\r\n /** Entry file. */\r\n ENTRY,\r\n /** Library file. */\r\n LIBRARY\r\n}\r\n\r\n/** A top-level source node. */\r\nexport class Source extends Node {\r\n kind = NodeKind.SOURCE;\r\n parent = null;\r\n\r\n /** Source kind. */\r\n sourceKind: SourceKind;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Path used internally. */\r\n internalPath: string;\r\n /** Simple path (last part without extension). */\r\n simplePath: string;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Full source text. */\r\n text: string;\r\n /** Tokenizer reference. */\r\n tokenizer: Tokenizer | null = null;\r\n /** Source map index. */\r\n debugInfoIndex: i32 = -1;\r\n /** Re-exported sources. */\r\n exportPaths: Set | null = null;\r\n\r\n /** Constructs a new source node. */\r\n constructor(normalizedPath: string, text: string, kind: SourceKind) {\r\n super();\r\n this.sourceKind = kind;\r\n this.normalizedPath = normalizedPath;\r\n var internalPath = mangleInternalPath(this.normalizedPath);\r\n this.internalPath = internalPath;\r\n var pos = internalPath.lastIndexOf(PATH_DELIMITER);\r\n this.simplePath = pos >= 0 ? internalPath.substring(pos + 1) : internalPath;\r\n this.statements = new Array();\r\n this.range = new Range(this, 0, text.length);\r\n this.text = text;\r\n }\r\n\r\n /** Tests if this source is an entry file. */\r\n get isEntry(): bool { return this.sourceKind == SourceKind.ENTRY; }\r\n /** Tests if this source is a stdlib file. */\r\n get isLibrary(): bool { return this.sourceKind == SourceKind.LIBRARY; }\r\n}\r\n\r\n/** Base class of all declaration statements. */\r\nexport abstract class DeclarationStatement extends Statement {\r\n\r\n /** Simple name being declared. */\r\n name: IdentifierExpression;\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null = null;\r\n\r\n protected cachedProgramLevelInternalName: string | null = null;\r\n protected cachedFileLevelInternalName: string | null = null;\r\n\r\n /** Gets the mangled program-level internal name of this declaration. */\r\n get programLevelInternalName(): string {\r\n if (!this.cachedProgramLevelInternalName) {\r\n this.cachedProgramLevelInternalName = mangleInternalName(this, true);\r\n }\r\n return this.cachedProgramLevelInternalName;\r\n }\r\n\r\n /** Gets the mangled file-level internal name of this declaration. */\r\n get fileLevelInternalName(): string {\r\n if (!this.cachedFileLevelInternalName) {\r\n this.cachedFileLevelInternalName = mangleInternalName(this, false);\r\n }\r\n return this.cachedFileLevelInternalName;\r\n }\r\n\r\n /** Tests if this is a top-level declaration within its source file. */\r\n get isTopLevel(): bool {\r\n var parent = this.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent)) {\r\n return false;\r\n }\r\n return parent.kind == NodeKind.SOURCE;\r\n }\r\n\r\n /** Tests if this declaration is a top-level export within its source file. */\r\n get isTopLevelExport(): bool {\r\n var parent = this.parent;\r\n if (!parent || (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent))) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.NAMESPACEDECLARATION) {\r\n return this.is(CommonFlags.EXPORT) && (parent).isTopLevelExport;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return this.is(CommonFlags.STATIC) && (parent).isTopLevelExport;\r\n }\r\n return parent.kind == NodeKind.SOURCE && this.is(CommonFlags.EXPORT);\r\n }\r\n\r\n /** Tests if this declaration needs an explicit export. */\r\n needsExplicitExport(member: ExportMember): bool {\r\n // This is necessary because module-level exports are automatically created\r\n // for top level declarations of all sorts. This function essentially tests\r\n // that there isn't a otherwise duplicate top-level export already.\r\n return (\r\n member.name.text != member.externalName.text || // if aliased\r\n this.range.source != member.range.source || // if a re-export\r\n !this.isTopLevelExport // if not top-level\r\n );\r\n }\r\n}\r\n\r\n/** Base class of all variable-like declaration statements. */\r\nexport abstract class VariableLikeDeclarationStatement extends DeclarationStatement {\r\n\r\n /** Variable type. */\r\n type: CommonTypeNode | null;\r\n /** Variable initializer. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a block statement. */\r\nexport class BlockStatement extends Statement {\r\n kind = NodeKind.BLOCK;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `break` statement. */\r\nexport class BreakStatement extends Statement {\r\n kind = NodeKind.BREAK;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `class` declaration. */\r\nexport class ClassDeclaration extends DeclarationStatement {\r\n kind = NodeKind.CLASSDECLARATION;\r\n\r\n /** Accepted type parameters. */\r\n typeParameters: TypeParameterNode[];\r\n /** Base class type being extended, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n /** Interface types being implemented, if any. */\r\n implementsTypes: TypeNode[] | null; // can't be functions\r\n /** Class member declarations. */\r\n members: DeclarationStatement[];\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents a `continue` statement. */\r\nexport class ContinueStatement extends Statement {\r\n kind = NodeKind.CONTINUE;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `do` statement. */\r\nexport class DoStatement extends Statement {\r\n kind = NodeKind.DO;\r\n\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n /** Condition when to repeat. */\r\n condition: Expression;\r\n}\r\n\r\n/** Represents an empty statement, i.e., a semicolon terminating nothing. */\r\nexport class EmptyStatement extends Statement {\r\n kind = NodeKind.EMPTY;\r\n}\r\n\r\n/** Represents an `enum` declaration. */\r\nexport class EnumDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMDECLARATION;\r\n\r\n /** Enum value declarations. */\r\n values: EnumValueDeclaration[];\r\n}\r\n\r\n/** Represents a value of an `enum` declaration. */\r\nexport class EnumValueDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMVALUEDECLARATION;\r\n // name is inherited\r\n\r\n /** Value expression. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents an `export import` statement of an interface. */\r\nexport class ExportImportStatement extends Node {\r\n kind = NodeKind.EXPORTIMPORT;\r\n\r\n /** Identifier being imported. */\r\n name: IdentifierExpression;\r\n /** Identifier being exported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents a member of an `export` statement. */\r\nexport class ExportMember extends Node {\r\n kind = NodeKind.EXPORTMEMBER;\r\n\r\n /** Identifier being exported. */\r\n name: IdentifierExpression;\r\n /** Identifier seen when imported again. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `export` statement. */\r\nexport class ExportStatement extends Statement {\r\n kind = NodeKind.EXPORT;\r\n\r\n /** Array of members if a set of named exports, or `null` if a filespace export. */\r\n members: ExportMember[] | null;\r\n /** Path being exported from, if applicable. */\r\n path: StringLiteralExpression | null;\r\n /** Normalized path, if `path` is set. */\r\n normalizedPath: string | null;\r\n /** Mangled internal path being referenced, if `path` is set. */\r\n internalPath: string | null;\r\n}\r\n\r\n/** Represents an expression that is used as a statement. */\r\nexport class ExpressionStatement extends Statement {\r\n kind = NodeKind.EXPRESSION;\r\n\r\n /** Expression being used as a statement.*/\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a field declaration within a `class`. */\r\nexport class FieldDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.FIELDDECLARATION;\r\n\r\n /** Parameter index within the constructor, if applicable. */\r\n parameterIndex: i32 = -1;\r\n}\r\n\r\n/** Represents a `for` statement. */\r\nexport class ForStatement extends Statement {\r\n kind = NodeKind.FOR;\r\n\r\n /**\r\n * Initializer statement, if present.\r\n * Either a {@link VariableStatement} or {@link ExpressionStatement}.\r\n */\r\n initializer: Statement | null;\r\n /** Condition expression, if present. */\r\n condition: Expression | null;\r\n /** Incrementor expression, if present. */\r\n incrementor: Expression | null;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Represents a `function` declaration. */\r\nexport class FunctionDeclaration extends DeclarationStatement {\r\n kind = NodeKind.FUNCTIONDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Function signature. */\r\n signature: SignatureNode;\r\n /** Body statement. Usually a block. */\r\n body: Statement | null;\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents an `if` statement. */\r\nexport class IfStatement extends Statement {\r\n kind = NodeKind.IF;\r\n\r\n /** Condition. */\r\n condition: Expression;\r\n /** Statement executed when condition is `true`. */\r\n ifTrue: Statement;\r\n /** Statement executed when condition is `false`. */\r\n ifFalse: Statement | null;\r\n}\r\n\r\n/** Represents an `import` declaration part of an {@link ImportStatement}. */\r\nexport class ImportDeclaration extends DeclarationStatement {\r\n kind = NodeKind.IMPORTDECLARATION;\r\n\r\n /** Identifier being imported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `import` statement. */\r\nexport class ImportStatement extends Statement {\r\n kind = NodeKind.IMPORT;\r\n\r\n /** Array of member declarations or `null` if an asterisk import. */\r\n declarations: ImportDeclaration[] | null;\r\n /** Name of the local namespace, if an asterisk import. */\r\n namespaceName: IdentifierExpression | null;\r\n /** Path being imported from. */\r\n path: StringLiteralExpression;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Mangled internal path being referenced. */\r\n internalPath: string;\r\n}\r\n\r\n/** Represents an `interfarce` declaration. */\r\nexport class InterfaceDeclaration extends ClassDeclaration {\r\n kind = NodeKind.INTERFACEDECLARATION;\r\n}\r\n\r\n/** Represents a method declaration within a `class`. */\r\nexport class MethodDeclaration extends FunctionDeclaration {\r\n kind = NodeKind.METHODDECLARATION;\r\n}\r\n\r\n/** Represents a `namespace` declaration. */\r\nexport class NamespaceDeclaration extends DeclarationStatement {\r\n kind = NodeKind.NAMESPACEDECLARATION;\r\n\r\n /** Array of namespace members. */\r\n members: Statement[];\r\n}\r\n\r\n/** Represents a `return` statement. */\r\nexport class ReturnStatement extends Statement {\r\n kind = NodeKind.RETURN;\r\n\r\n /** Value expression being returned, if present. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents a single `case` within a `switch` statement. */\r\nexport class SwitchCase extends Node {\r\n kind = NodeKind.SWITCHCASE;\r\n\r\n /** Label expression. `null` indicates the default case. */\r\n label: Expression | null;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `switch` statement. */\r\nexport class SwitchStatement extends Statement {\r\n kind = NodeKind.SWITCH;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Contained cases. */\r\n cases: SwitchCase[];\r\n}\r\n\r\n/** Represents a `throw` statement. */\r\nexport class ThrowStatement extends Statement {\r\n kind = NodeKind.THROW;\r\n\r\n /** Value expression being thrown. */\r\n value: Expression;\r\n}\r\n\r\n/** Represents a `try` statement. */\r\nexport class TryStatement extends Statement {\r\n kind = NodeKind.TRY;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Exception variable name, if a `catch` clause is present. */\r\n catchVariable: IdentifierExpression | null;\r\n /** Statements being executed on catch, if a `catch` clause is present. */\r\n catchStatements: Statement[] | null;\r\n /** Statements being executed afterwards, if a `finally` clause is present. */\r\n finallyStatements: Statement[] | null;\r\n}\r\n\r\n/** Represents a `type` declaration. */\r\nexport class TypeDeclaration extends DeclarationStatement {\r\n kind = NodeKind.TYPEDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Type being aliased. */\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents a variable declaration part of a {@link VariableStatement}. */\r\nexport class VariableDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.VARIABLEDECLARATION;\r\n}\r\n\r\n/** Represents a variable statement wrapping {@link VariableDeclaration}s. */\r\nexport class VariableStatement extends Statement {\r\n kind = NodeKind.VARIABLE;\r\n\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null;\r\n /** Array of member declarations. */\r\n declarations: VariableDeclaration[];\r\n}\r\n\r\n/** Represents a void statement dropping an expression's value. */\r\nexport class VoidStatement extends Statement {\r\n kind = NodeKind.VOID;\r\n\r\n /** Expression being dropped. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a `while` statement. */\r\nexport class WhileStatement extends Statement {\r\n kind = NodeKind.WHILE;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Finds the first decorator matching the specified kind. */\r\nexport function findDecorator(kind: DecoratorKind, decorators: DecoratorNode[] | null): DecoratorNode | null {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n if (decorator.decoratorKind == kind) return decorator;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Mangles a declaration's name to an internal name. */\r\nexport function mangleInternalName(declaration: DeclarationStatement, asGlobal: bool = false): string {\r\n var name = declaration.name.text;\r\n var parent = declaration.parent;\r\n if (!parent) return name;\r\n if (\r\n declaration.kind == NodeKind.VARIABLEDECLARATION &&\r\n parent.kind == NodeKind.VARIABLE\r\n ) { // skip over\r\n if (!(parent = parent.parent)) return name;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) + (\r\n declaration.is(CommonFlags.STATIC)\r\n ? STATIC_DELIMITER\r\n : INSTANCE_DELIMITER\r\n ) + name;\r\n }\r\n if (\r\n parent.kind == NodeKind.NAMESPACEDECLARATION ||\r\n parent.kind == NodeKind.ENUMDECLARATION\r\n ) {\r\n return mangleInternalName(parent, asGlobal) +\r\n STATIC_DELIMITER + name;\r\n }\r\n return asGlobal\r\n ? name\r\n : declaration.range.source.internalPath + PATH_DELIMITER + name;\r\n}\r\n\r\n/** Mangles an external to an internal path. */\r\nexport function mangleInternalPath(path: string): string {\r\n if (path.endsWith(\".ts\")) path = path.substring(0, path.length - 3);\r\n return path;\r\n}\r\n\r\n// Helpers\r\n\r\n/** Sets the parent node on an array of nodes. */\r\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\n/** Sets the parent node on an array of nullable nodes. */\r\nfunction setParentIfNotNull(nodes: (Node | null)[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n let node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\r\n}\r\n","/**\r\n * 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 typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n CommonTypeNode,\r\n TypeNode,\r\n TypeParameterNode,\r\n ParameterKind,\r\n SignatureNode,\r\n DecoratorNode,\r\n DecoratorKind,\r\n\r\n Expression,\r\n AssertionExpression,\r\n ElementAccessExpression,\r\n IdentifierExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n ParenthesizedExpression,\r\n PropertyAccessExpression,\r\n StringLiteralExpression,\r\n CallExpression,\r\n\r\n ClassDeclaration,\r\n DeclarationStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportMember,\r\n ExportStatement,\r\n FieldDeclaration,\r\n FunctionDeclaration,\r\n ImportDeclaration,\r\n ImportStatement,\r\n InterfaceDeclaration,\r\n MethodDeclaration,\r\n NamespaceDeclaration,\r\n TypeDeclaration,\r\n VariableDeclaration,\r\n VariableLikeDeclarationStatement,\r\n VariableStatement,\r\n\r\n 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\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 /** Diagnostic offset used where repeatedly 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 /** Target expression of the previously resolved property or element access. */\r\n resolvedThisExpression: Expression | null = null;\r\n /** Element expression of the previously resolved element access. */\r\n resolvedElementExpression : Expression | null = null;\r\n /** 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.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.tryResolveImport(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.tryResolveImport(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 for (let i = 0, k = queuedExtends.length; i < k; ++i) {\r\n let derivedPrototype = queuedExtends[i];\r\n let derivedDeclaration = derivedPrototype.declaration;\r\n let derivedType = assert(derivedDeclaration.extendsType);\r\n let baseElement = this.resolveIdentifier(derivedType.name, null); // reports\r\n if (!baseElement) continue;\r\n if (baseElement.kind == ElementKind.CLASS_PROTOTYPE) {\r\n let basePrototype = baseElement;\r\n derivedPrototype.basePrototype = basePrototype;\r\n } else {\r\n this.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n derivedType.range\r\n );\r\n }\r\n }\r\n\r\n // set up global aliases\r\n var globalAliases = options.globalAliases;\r\n if (globalAliases) {\r\n for (let [alias, name] of globalAliases) {\r\n 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 = (stringPrototype).resolve(null); // reports\r\n if (stringInstance) {\r\n if (this.typesLookup.has(\"string\")) {\r\n let declaration = (stringPrototype).declaration;\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n } else {\r\n this.stringInstance = stringInstance;\r\n this.typesLookup.set(\"string\", stringInstance.type);\r\n }\r\n }\r\n }\r\n\r\n // 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 resolve an import by traversing exports and queued exports. */\r\n private tryResolveImport(\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 private filterDecorators(decorators: DecoratorNode[], acceptedFlags: DecoratorFlags): DecoratorFlags {\r\n var presentFlags = DecoratorFlags.NONE;\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n 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 /** Processes global options, if present. */\r\n private checkGlobalOptions(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var parentNode = declaration.parent;\r\n if (\r\n (element.hasDecorator(DecoratorFlags.GLOBAL)) ||\r\n (declaration.range.source.is(CommonFlags.BUILTIN)) ||\r\n (\r\n declaration.range.source.isLibrary &&\r\n element.is(CommonFlags.EXPORT) &&\r\n (\r\n assert(parentNode).kind == NodeKind.SOURCE ||\r\n (\r\n parentNode).kind == NodeKind.VARIABLE &&\r\n assert((parentNode).parent).kind == NodeKind.SOURCE\r\n )\r\n )\r\n ) {\r\n let globalName = declaration.programLevelInternalName;\r\n if (this.elementsLookup.has(globalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, element.internalName\r\n );\r\n } else {\r\n this.elementsLookup.set(globalName, element);\r\n if (element.is(CommonFlags.BUILTIN)) element.internalName = globalName;\r\n }\r\n }\r\n }\r\n\r\n private initializeClass(\r\n declaration: ClassDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new ClassPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.SEALED |\r\n DecoratorFlags.UNMANAGED\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n var implementsTypes = declaration.implementsTypes;\r\n if (implementsTypes) {\r\n let numImplementsTypes = implementsTypes.length;\r\n if (prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (numImplementsTypes) {\r\n this.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_implement_interfaces,\r\n Range.join(\r\n declaration.name.range,\r\n implementsTypes[numImplementsTypes - 1].range\r\n )\r\n );\r\n }\r\n\r\n // remember classes that implement interfaces\r\n } else if (numImplementsTypes) {\r\n 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 throw new Error(\"class member expected\");\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobalOptions(prototype, declaration);\r\n }\r\n\r\n private initializeField(\r\n declaration: FieldDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var decorators = declaration.decorators;\r\n\r\n // static fields become global variables\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n let staticField = new Global(\r\n this,\r\n name,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators, DecoratorFlags.NONE)\r\n : DecoratorFlags.NONE\r\n );\r\n staticField.parent = classPrototype;\r\n classPrototype.members.set(name, staticField);\r\n this.elementsLookup.set(internalName, staticField);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n staticField.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance fields are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instanceField = new FieldPrototype(\r\n classPrototype,\r\n name,\r\n internalName,\r\n declaration\r\n );\r\n if (decorators) this.filterDecorators(decorators, DecoratorFlags.NONE);\r\n classPrototype.instanceMembers.set(name, instanceField);\r\n // TBD: no need to mark as MODULE_EXPORT\r\n }\r\n }\r\n\r\n private initializeMethod(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var prototype: FunctionPrototype | null = null;\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.filterDecorators(decorators,\r\n DecoratorFlags.OPERATOR_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.filterDecorators(decorators,\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n var baseName = (isGetter ? GETTER_PREFIX : SETTER_PREFIX) + simpleName;\r\n\r\n // static accessors become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n let staticName = classPrototype.internalName + STATIC_DELIMITER + baseName;\r\n if (this.elementsLookup.has(staticName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n let staticPrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n staticName,\r\n declaration,\r\n null,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = staticPrototype;\r\n } else {\r\n (propertyElement).setterPrototype = staticPrototype;\r\n }\r\n if (isNew) {\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n classPrototype.members.set(simpleName, propertyElement); // check above\r\n } else {\r\n assert(classPrototype.members && classPrototype.members.has(simpleName));\r\n }\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance accessors are remembered until resolved\r\n } else {\r\n let instanceName = classPrototype.internalName + INSTANCE_DELIMITER + baseName;\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(baseName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instancePrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n instanceName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = instancePrototype;\r\n } else {\r\n (propertyElement).setterPrototype = instancePrototype;\r\n }\r\n classPrototype.instanceMembers.set(baseName, propertyElement);\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n instancePrototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n }\r\n\r\n private initializeEnum(\r\n declaration: EnumDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var element = new Enum(this, simpleName, internalName, declaration);\r\n element.parent = namespace;\r\n this.elementsLookup.set(internalName, element);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, element);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && element.is(CommonFlags.EXPORT)) {\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (element.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, element);\r\n 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.checkGlobalOptions(element, declaration);\r\n }\r\n\r\n private initializeEnumValue(\r\n declaration: EnumValueDeclaration,\r\n enm: Enum\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n if (enm.members) {\r\n if (enm.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n enm.members = new Map();\r\n }\r\n var value = new EnumValue(enm, this, name, internalName, declaration);\r\n enm.members.set(name, value);\r\n if (enm.is(CommonFlags.MODULE_EXPORT)) {\r\n value.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n private initializeExports(\r\n statement: ExportStatement,\r\n queuedExports: Map\r\n ): void {\r\n var members = statement.members;\r\n 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.filterDecorators(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.checkGlobalOptions(prototype, declaration);\r\n }\r\n\r\n private initializeImports(\r\n statement: ImportStatement,\r\n queuedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var declarations = statement.declarations;\r\n if (declarations) {\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n this.initializeImport(\r\n declarations[i],\r\n statement.internalPath,\r\n queuedExports, queuedImports\r\n );\r\n }\r\n } else if (statement.namespaceName) { // import * as simpleName from \"file\"\r\n let simpleName = statement.namespaceName.text;\r\n let internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n simpleName\r\n );\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n statement.namespaceName.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n\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.filterDecorators(decorators, DecoratorFlags.GLOBAL)\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(prototype.internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(prototype.internalName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n 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.checkGlobalOptions(prototype, declaration);\r\n }\r\n\r\n private initializeNamespace(\r\n declaration: NamespaceDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n parentNamespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n var simpleName = declaration.name.text;\r\n var namespace = this.elementsLookup.get(internalName);\r\n if (!namespace) {\r\n namespace = new Namespace(this, simpleName, internalName, declaration);\r\n namespace.parent = parentNamespace;\r\n this.elementsLookup.set(internalName, namespace);\r\n this.checkGlobalOptions(namespace, declaration);\r\n }\r\n\r\n if (parentNamespace) {\r\n if (parentNamespace.members) {\r\n if (parentNamespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n parentNamespace.members = new Map();\r\n }\r\n parentNamespace.members.set(simpleName, namespace);\r\n if (parentNamespace.is(CommonFlags.MODULE_EXPORT) && namespace.is(CommonFlags.EXPORT)) {\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (namespace.is(CommonFlags.EXPORT)) { // no parent namespace\r\n let existingExport = this.fileLevelExports.get(internalName);\r\n if (existingExport) {\r\n if (!existingExport.is(CommonFlags.EXPORT)) {\r\n this.error(\r\n DiagnosticCode.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local,\r\n declaration.name.range, namespace.internalName\r\n ); // recoverable\r\n }\r\n namespace = existingExport; // join\r\n } else {\r\n this.fileLevelExports.set(internalName, namespace);\r\n }\r\n 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.filterDecorators(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.checkGlobalOptions(global, declaration);\r\n }\r\n }\r\n\r\n /** Resolves a {@link SignatureNode} to a concrete {@link Signature}. */\r\n resolveSignature(\r\n node: SignatureNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Signature | null {\r\n var explicitThisType = node.explicitThisType;\r\n var thisType: Type | null = null;\r\n if (explicitThisType) {\r\n thisType = this.resolveType(\r\n explicitThisType,\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!thisType) return null;\r\n }\r\n var parameterTypeNodes = node.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 reportNotFound\r\n );\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterTypeNode.name.text;\r\n }\r\n var returnTypeNode = node.returnType;\r\n var returnType: Type | null;\r\n if (returnTypeNode) {\r\n returnType = this.resolveType(\r\n returnTypeNode,\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Type.void;\r\n }\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n signature.hasRest = hasRest;\r\n return signature;\r\n }\r\n\r\n /** Resolves a {@link CommonTypeNode} to a concrete {@link Type}. */\r\n resolveType(\r\n node: CommonTypeNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Type | null {\r\n if (node.kind == NodeKind.SIGNATURE) {\r\n let signature = this.resolveSignature(node, contextualTypeArguments, reportNotFound);\r\n if (!signature) return null;\r\n return node.isNullable\r\n ? signature.type.asNullable()\r\n : signature.type;\r\n }\r\n var typeNode = node;\r\n var simpleName = typeNode.name.text;\r\n var globalName = simpleName;\r\n var localName = typeNode.range.source.internalPath + PATH_DELIMITER + simpleName;\r\n\r\n var element: Element | null;\r\n if (\r\n (element = this.elementsLookup.get(localName)) || // file-global\r\n (element = this.elementsLookup.get(globalName)) // program-global\r\n ) {\r\n switch (element.kind) {\r\n case ElementKind.ENUM: return Type.i32;\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n let instance = (element).resolveUsingTypeArguments(\r\n typeNode.typeArguments,\r\n contextualTypeArguments,\r\n null\r\n ); // reports\r\n if (!instance) return null;\r\n return node.isNullable\r\n ? instance.type.asNullable()\r\n : instance.type;\r\n }\r\n }\r\n }\r\n\r\n // check (global) type alias\r\n var alias = this.typeAliases.get(simpleName);\r\n if (alias) return this.resolveType(alias.type, contextualTypeArguments, reportNotFound);\r\n\r\n // resolve parameters\r\n if (typeNode.typeArguments) {\r\n let k = typeNode.typeArguments.length;\r\n let paramTypes = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let paramType = this.resolveType( // reports\r\n typeNode.typeArguments[i],\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!paramType) return null;\r\n paramTypes[i] = paramType;\r\n }\r\n\r\n if (k) { // can't be a placeholder if it has parameters\r\n let instanceKey = typesToString(paramTypes);\r\n if (instanceKey.length) {\r\n localName += \"<\" + instanceKey + \">\";\r\n globalName += \"<\" + instanceKey + \">\";\r\n }\r\n } else if (contextualTypeArguments) {\r\n let placeholderType = contextualTypeArguments.get(globalName);\r\n if (placeholderType) return placeholderType;\r\n }\r\n }\r\n\r\n var type: Type | null;\r\n\r\n // check file-global / program-global type\r\n if ((type = this.typesLookup.get(localName)) || (type = this.typesLookup.get(globalName))) {\r\n return type;\r\n }\r\n\r\n if (reportNotFound) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n typeNode.name.range, globalName\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves an array of type arguments to concrete types. */\r\n resolveTypeArguments(\r\n typeParameters: TypeParameterNode[],\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): Type[] | null {\r\n var parameterCount = typeParameters.length;\r\n var argumentCount = typeArgumentNodes ? typeArgumentNodes.length : 0;\r\n if (parameterCount != argumentCount) {\r\n if (argumentCount) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n Range.join(\r\n (typeArgumentNodes)[0].range,\r\n (typeArgumentNodes)[argumentCount - 1].range\r\n ),\r\n parameterCount.toString(10), argumentCount.toString(10)\r\n );\r\n } else if (alternativeReportNode) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n alternativeReportNode.range.atEnd, parameterCount.toString(10), \"0\"\r\n );\r\n }\r\n return null;\r\n }\r\n var typeArguments = new Array(parameterCount);\r\n for (let i = 0; i < parameterCount; ++i) {\r\n let type = this.resolveType( // reports\r\n (typeArgumentNodes)[i],\r\n contextualTypeArguments,\r\n true\r\n );\r\n if (!type) return null;\r\n // TODO: check extendsType\r\n typeArguments[i] = type;\r\n }\r\n return typeArguments;\r\n }\r\n\r\n /** Resolves an identifier to the element it refers to. */\r\n resolveIdentifier(\r\n identifier: IdentifierExpression,\r\n context: Element | null\r\n ): Element | null {\r\n var name = identifier.text;\r\n var element: Element | null;\r\n\r\n if (context) {\r\n\r\n switch (context.kind) {\r\n case ElementKind.FUNCTION: { // search locals, use prototype\r\n element = (context).flow.getScopedLocal(name);\r\n if (element) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element;\r\n }\r\n context = (context).prototype.parent;\r\n break;\r\n }\r\n case ElementKind.CLASS: { // use prototype\r\n context = (context).prototype.parent;\r\n break;\r\n }\r\n }\r\n\r\n // search context\r\n while (context) {\r\n let members = context.members;\r\n if (members) {\r\n if (element = members.get(name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element;\r\n }\r\n }\r\n context = context.parent;\r\n }\r\n }\r\n\r\n // search current file\r\n if (element = this.elementsLookup.get(identifier.range.source.internalPath + PATH_DELIMITER + name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n // search global scope\r\n if (element = this.elementsLookup.get(name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n identifier.range, name\r\n );\r\n return null;\r\n }\r\n\r\n /** Resolves a property access to the element it refers to. */\r\n resolvePropertyAccess(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualFunction: Function\r\n ): Element | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = propertyAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction); // reports\r\n if (!target) return null;\r\n\r\n // at this point we know exactly what the target is, so look up the element within\r\n var propertyName = propertyAccess.property.text;\r\n\r\n // Resolve variable-likes to the class type they reference first\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let classReference = (target).type.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, (target).type.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = assert((target).getterPrototype).resolve(); // reports\r\n if (!getter) return null;\r\n let classReference = getter.signature.returnType.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, getter.signature.returnType.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.resolvedElementExpression;\r\n if (elementExpression) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementExpression.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (!(target = returnType.classReference)) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, returnType.toString()\r\n );\r\n return null;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // Look up the member within\r\n switch (target.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n case ElementKind.CLASS: {\r\n do {\r\n let members = target.members;\r\n let member: Element | null;\r\n if (members && (member = members.get(propertyName))) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = null;\r\n return member; // instance FIELD, static GLOBAL, FUNCTION_PROTOTYPE...\r\n }\r\n // traverse inherited static members on the base prototype if target is a class prototype\r\n if (target.kind == ElementKind.CLASS_PROTOTYPE) {\r\n if ((target).basePrototype) {\r\n target = (target).basePrototype;\r\n } else {\r\n break;\r\n }\r\n // traverse inherited instance members on the base class if target is a class instance\r\n } else if (target.kind == ElementKind.CLASS) {\r\n if ((target).base) {\r\n target = (target).base;\r\n } else {\r\n break;\r\n }\r\n } else {\r\n break;\r\n }\r\n } while (true);\r\n break;\r\n }\r\n default: { // enums or other namespace-like elements\r\n let members = target.members;\r\n if (members) {\r\n let member = members.get(propertyName);\r\n if (member) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = null;\r\n return member; // static ENUMVALUE, static GLOBAL, static FUNCTION_PROTOTYPE...\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveElementAccess(\r\n elementAccess: ElementAccessExpression,\r\n contextualFunction: Function\r\n ): Element | null {\r\n var targetExpression = elementAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction);\r\n if (!target) return null;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (target = type.classReference) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS: { // element access on element access\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementAccess.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (target = returnType.classReference) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n targetExpression.range\r\n );\r\n return null;\r\n }\r\n\r\n resolveExpression(\r\n expression: Expression,\r\n contextualFunction: Function\r\n ): Element | null {\r\n while (expression.kind == NodeKind.PARENTHESIZED) {\r\n expression = (expression).expression;\r\n }\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n let type = this.resolveType((expression).toType); // reports\r\n if (type) {\r\n let classType = type.classReference;\r\n if (classType) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return classType;\r\n }\r\n }\r\n return null;\r\n }\r\n case NodeKind.BINARY: { // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n }\r\n case NodeKind.THIS: { // -> Class / ClassPrototype\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"this\");\r\n if (explicitLocal) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return parent;\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n return null;\r\n }\r\n case NodeKind.SUPER: { // -> Class\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"super\");\r\n if (explicitLocal) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent && parent.kind == ElementKind.CLASS && (parent = (parent).base)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return parent;\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n return null;\r\n }\r\n case NodeKind.IDENTIFIER: {\r\n return this.resolveIdentifier(expression, contextualFunction);\r\n }\r\n case NodeKind.LITERAL: {\r\n switch ((expression).literalKind) {\r\n case LiteralKind.STRING: {\r\n this.resolvedThisExpression = expression;\r\n this.resolvedElementExpression = null;\r\n return this.stringInstance;\r\n }\r\n // case LiteralKind.ARRAY: // TODO\r\n }\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n return this.resolvePropertyAccess(\r\n expression,\r\n contextualFunction\r\n );\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n return this.resolveElementAccess(\r\n expression,\r\n contextualFunction\r\n );\r\n }\r\n case NodeKind.CALL: {\r\n let targetExpression = (expression).expression;\r\n let target = this.resolveExpression(targetExpression, contextualFunction); // reports\r\n if (!target) return null;\r\n if (target.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n let instance = (target).resolveUsingTypeArguments( // reports\r\n (expression).typeArguments,\r\n contextualFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n if (!instance) return null;\r\n let returnType = instance.signature.returnType;\r\n let classType = returnType.classReference;\r\n if (classType) {\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return classType;\r\n } else {\r\n let signature = returnType.signatureReference;\r\n if (signature) {\r\n let functionTarget = signature.cachedFunctionTarget;\r\n if (!functionTarget) {\r\n functionTarget = new FunctionTarget(this, signature);\r\n signature.cachedFunctionTarget = functionTarget;\r\n }\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return functionTarget;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n targetExpression.range, target.internalName\r\n );\r\n return null;\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return null;\r\n }\r\n\r\n // resolveExpressionType(\r\n // expression: Expression,\r\n // contextualFunction: Function\r\n // ): Type {\r\n // var element = this.resolveExpression(expression, contextualFunction);\r\n // switch (element.kind) {\r\n\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 /** Resolves this prototype to an instance using the specified concrete type arguments. */\r\n resolve(\r\n functionTypeArguments: Type[] | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var instanceKey = functionTypeArguments ? typesToString(functionTypeArguments) : \"\";\r\n var instance = this.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n var declaration = this.declaration;\r\n var isInstance = this.is(CommonFlags.INSTANCE);\r\n var classPrototype = this.classPrototype;\r\n\r\n // inherit contextual type arguments as provided. might be overridden.\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(\r\n inheritedName,\r\n inheritedType\r\n );\r\n }\r\n }\r\n\r\n // override with class type arguments if a partially resolved instance method\r\n var classTypeArguments = this.classTypeArguments;\r\n if (classTypeArguments) { // set only if partially resolved\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let classDeclaration = assert(classPrototype).declaration;\r\n let classTypeParameters = classDeclaration.typeParameters;\r\n let numClassTypeParameters = classTypeParameters.length;\r\n assert(numClassTypeParameters == classTypeArguments.length);\r\n for (let i = 0; i < numClassTypeParameters; ++i) {\r\n contextualTypeArguments.set(\r\n classTypeParameters[i].name.text,\r\n classTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!classTypeArguments);\r\n }\r\n\r\n // override with function specific type arguments\r\n var signatureNode = declaration.signature;\r\n var functionTypeParameters = declaration.typeParameters;\r\n var numFunctionTypeArguments: i32;\r\n if (functionTypeArguments && (numFunctionTypeArguments = functionTypeArguments.length)) {\r\n assert(functionTypeParameters && numFunctionTypeArguments == functionTypeParameters.length);\r\n for (let i = 0; i < numFunctionTypeArguments; ++i) {\r\n contextualTypeArguments.set(\r\n (functionTypeParameters)[i].name.text,\r\n functionTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!functionTypeParameters || functionTypeParameters.length == 0);\r\n }\r\n\r\n // resolve class if an instance method\r\n var classInstance: Class | null = null;\r\n var thisType: Type | null = null;\r\n if (isInstance) {\r\n classInstance = assert(classPrototype).resolve(classTypeArguments, contextualTypeArguments); // reports\r\n if (!classInstance) return null;\r\n thisType = classInstance.type;\r\n contextualTypeArguments.set(\"this\", thisType);\r\n }\r\n\r\n // resolve signature node\r\n var signatureParameters = signatureNode.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.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterDeclaration.name.text;\r\n }\r\n\r\n var returnType: Type;\r\n if (this.is(CommonFlags.SET)) {\r\n returnType = Type.void; // not annotated\r\n } else if (this.is(CommonFlags.CONSTRUCTOR)) {\r\n returnType = assert(classInstance).type; // not annotated\r\n } else {\r\n let typeNode = assert(signatureNode.returnType);\r\n let type = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (!type) return null;\r\n returnType = type;\r\n }\r\n\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n\r\n var internalName = this.internalName;\r\n if (instanceKey.length) internalName += \"<\" + instanceKey + \">\";\r\n instance = new Function(\r\n this,\r\n internalName,\r\n signature,\r\n classInstance\r\n ? classInstance\r\n : classPrototype,\r\n contextualTypeArguments\r\n );\r\n this.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n return instance;\r\n }\r\n\r\n /** Resolves this prototype partially by applying the specified inherited class type arguments. */\r\n resolvePartial(classTypeArguments: Type[] | null): FunctionPrototype | null {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n var classPrototype = assert(this.classPrototype);\r\n\r\n if (!(classTypeArguments && classTypeArguments.length)) return this; // no need to clone\r\n\r\n var simpleName = this.simpleName;\r\n var partialKey = typesToString(classTypeArguments);\r\n var partialPrototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n classPrototype.internalName + \"<\" + partialKey + \">\" + INSTANCE_DELIMITER + simpleName,\r\n this.declaration,\r\n classPrototype,\r\n this.decoratorFlags\r\n );\r\n partialPrototype.flags = this.flags;\r\n partialPrototype.operatorKind = this.operatorKind;\r\n partialPrototype.classTypeArguments = classTypeArguments;\r\n return partialPrototype;\r\n }\r\n\r\n /** Resolves the specified type arguments prior to resolving this prototype to an instance. */\r\n resolveUsingTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (this.is(CommonFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.program.resolveTypeArguments( // reports\r\n assert(this.declaration.typeParameters),\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n }\r\n return this.resolve(resolvedTypeArguments, contextualTypeArguments);\r\n }\r\n\r\n /** Resolves the type arguments to use when compiling a built-in call. Must be a built-in. */\r\n resolveBuiltinTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null\r\n ): Type[] | null {\r\n assert(this.is(CommonFlags.BUILTIN));\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (typeArgumentNodes) {\r\n let k = typeArgumentNodes.length;\r\n resolvedTypeArguments = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let resolvedType = this.program.resolveType( // reports\r\n typeArgumentNodes[i],\r\n contextualTypeArguments,\r\n true\r\n );\r\n if (!resolvedType) return null;\r\n resolvedTypeArguments[i] = resolvedType;\r\n }\r\n }\r\n return resolvedTypeArguments;\r\n }\r\n\r\n toString(): string { return this.simpleName; }\r\n}\r\n\r\n/** A resolved function. */\r\nexport class Function extends Element {\r\n\r\n kind = ElementKind.FUNCTION;\r\n\r\n /** Prototype reference. */\r\n prototype: FunctionPrototype;\r\n /** Function signature. */\r\n signature: Signature;\r\n /** Map of locals by name. */\r\n localsByName: Map = new Map();\r\n /** Array of locals by index. */\r\n localsByIndex: Local[] = [];\r\n /** List of additional non-parameter locals. */\r\n additionalLocals: Type[] = [];\r\n /** Current break context label. */\r\n breakContext: string | null = null;\r\n /** Contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Current control flow. */\r\n flow: Flow;\r\n /** Remembered debug locations. */\r\n debugLocations: Range[] = [];\r\n /** Function reference, if compiled. */\r\n ref: FunctionRef = 0;\r\n /** Function table index, if any. */\r\n functionTableIndex: i32 = -1;\r\n /** Trampoline function for calling with omitted arguments. */\r\n trampoline: Function | null = null;\r\n /** The outer scope, if a function expression. */\r\n outerScope: Flow | null = null;\r\n\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\r\n nextInlineId: i32 = 0;\r\n\r\n /** Constructs a new concrete function. */\r\n constructor(\r\n prototype: FunctionPrototype,\r\n internalName: string,\r\n signature: Signature,\r\n parent: Element | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.signature = signature;\r\n this.parent = parent;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.contextualTypeArguments = contextualTypeArguments;\r\n if (!(prototype.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN) || prototype.is(CommonFlags.DECLARE))) {\r\n let localIndex = 0;\r\n if (parent && parent.kind == ElementKind.CLASS) {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let local = new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n );\r\n this.localsByName.set(\"this\", local);\r\n this.localsByIndex[local.index] = local;\r\n let inheritedTypeArguments = (parent).contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments.has(inheritedName)) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n }\r\n } else {\r\n assert(!this.is(CommonFlags.INSTANCE)); // internal error\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n let parameterType = parameterTypes[i];\r\n let parameterName = signature.getParameterName(i);\r\n let local = new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n // FIXME: declaration?\r\n );\r\n this.localsByName.set(parameterName, local);\r\n this.localsByIndex[local.index] = local;\r\n }\r\n }\r\n this.flow = Flow.create(this);\r\n }\r\n\r\n /** Adds a local of the specified type, with an optional name. */\r\n addLocal(type: Type, name: string | null = null, declaration: VariableDeclaration | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = this.signature.parameterTypes.length + this.additionalLocals.length;\r\n if (this.is(CommonFlags.INSTANCE)) ++localIndex;\r\n var local = new Local(\r\n this.prototype.program,\r\n name\r\n ? name\r\n : \"var$\" + localIndex.toString(10),\r\n localIndex,\r\n type,\r\n declaration\r\n );\r\n if (name) {\r\n if (this.localsByName.has(name)) throw new Error(\"duplicate local name\");\r\n this.localsByName.set(name, local);\r\n }\r\n this.localsByIndex[local.index] = local;\r\n this.additionalLocals.push(type);\r\n return local;\r\n }\r\n\r\n private tempI32s: Local[] | null = null;\r\n private tempI64s: Local[] | null = null;\r\n private tempF32s: Local[] | null = null;\r\n private tempF64s: Local[] | null = null;\r\n\r\n /** Gets a free temporary local of the specified type. */\r\n getTempLocal(type: Type, wrapped: bool = false): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s;\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps && temps.length) {\r\n local = temps.pop();\r\n local.type = type;\r\n local.flags = CommonFlags.NONE;\r\n } else {\r\n local = this.addLocal(type);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n if (local.is(CommonFlags.INLINED)) return;\r\n assert(local.index >= 0);\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n assert(local.index >= 0);\r\n temps.push(local);\r\n }\r\n\r\n /** Gets and immediately frees a temporary local of the specified type. */\r\n getAndFreeTempLocal(type: Type, wrapped: bool): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps.length) {\r\n local = temps[temps.length - 1];\r\n local.type = type;\r\n } else {\r\n local = this.addLocal(type);\r\n temps.push(local);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Enters a(nother) break context. */\r\n enterBreakContext(): string {\r\n var id = this.nextBreakId++;\r\n if (!this.breakStack) this.breakStack = [ id ];\r\n else this.breakStack.push(id);\r\n return this.breakContext = id.toString(10);\r\n }\r\n\r\n /** Leaves the current break context. */\r\n leaveBreakContext(): void {\r\n assert(this.breakStack != null);\r\n var length = (this.breakStack).length;\r\n assert(length > 0);\r\n (this.breakStack).pop();\r\n if (length > 1) {\r\n this.breakContext = (this.breakStack)[length - 2].toString(10);\r\n } else {\r\n this.breakContext = null;\r\n this.breakStack = null;\r\n }\r\n }\r\n\r\n /** Finalizes the function once compiled, releasing no longer needed resources. */\r\n finalize(module: Module, ref: FunctionRef): void {\r\n this.ref = ref;\r\n assert(!this.breakStack || !this.breakStack.length); // internal error\r\n this.breakStack = null;\r\n this.breakContext = null;\r\n this.tempI32s = this.tempI64s = this.tempF32s = this.tempF64s = null;\r\n if (this.program.options.sourceMap) {\r\n let debugLocations = this.debugLocations;\r\n for (let i = 0, k = debugLocations.length; i < k; ++i) {\r\n let debugLocation = debugLocations[i];\r\n module.setDebugLocation(\r\n ref,\r\n debugLocation.debugInfoRef,\r\n debugLocation.source.debugInfoIndex,\r\n debugLocation.line,\r\n debugLocation.column\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n}\r\n\r\n/** A resolved function target, that is a function called indirectly by an index and signature. */\r\nexport class FunctionTarget extends Element {\r\n\r\n kind = ElementKind.FUNCTION_TARGET;\r\n\r\n /** Underlying signature. */\r\n signature: Signature;\r\n /** Function type. */\r\n type: Type;\r\n\r\n /** Constructs a new function target. */\r\n constructor(program: Program, signature: Signature) {\r\n super(program, \"\", \"\");\r\n var simpleName = signature.toSignatureString();\r\n this.simpleName = simpleName;\r\n this.internalName = simpleName;\r\n this.signature = signature;\r\n this.type = Type.u32.asFunction(signature);\r\n }\r\n}\r\n\r\n/** A yet unresolved instance field prototype. */\r\nexport class FieldPrototype extends Element {\r\n\r\n kind = ElementKind.FIELD_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FieldDeclaration;\r\n /** Parent class prototype. */\r\n classPrototype: ClassPrototype;\r\n\r\n /** Constructs a new field prototype. */\r\n constructor(\r\n classPrototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FieldDeclaration\r\n ) {\r\n super(classPrototype.program, simpleName, internalName);\r\n this.classPrototype = classPrototype;\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** A resolved instance field. */\r\nexport class Field extends VariableLikeElement {\r\n\r\n kind = ElementKind.FIELD;\r\n\r\n /** Field prototype reference. */\r\n prototype: FieldPrototype;\r\n /** Field memory offset, if an instance field. */\r\n memoryOffset: i32 = -1;\r\n\r\n /** Constructs a new field. */\r\n constructor(\r\n prototype: FieldPrototype,\r\n internalName: string,\r\n type: Type,\r\n declaration: FieldDeclaration,\r\n parent: Class\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName, type, declaration);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.type = type;\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A property comprised of a getter and a setter function. */\r\nexport class Property extends Element {\r\n\r\n kind = ElementKind.PROPERTY;\r\n\r\n /** Parent class prototype. */\r\n parent: ClassPrototype;\r\n /** Getter prototype. */\r\n getterPrototype: FunctionPrototype | null = null;\r\n /** Setter prototype. */\r\n setterPrototype: FunctionPrototype | null = null;\r\n\r\n /** Constructs a new property prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n parent: ClassPrototype\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A yet unresolved class prototype. */\r\nexport class ClassPrototype extends Element {\r\n\r\n kind = ElementKind.CLASS_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: ClassDeclaration;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Instance member prototypes. */\r\n instanceMembers: Map | null = null;\r\n /** Base class prototype, if applicable. */\r\n basePrototype: ClassPrototype | null = null; // set in Program#initialize\r\n /** Constructor prototype. */\r\n constructorPrototype: FunctionPrototype | null = null;\r\n /** Operator overload prototypes. */\r\n overloadPrototypes: Map = new Map();\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n /** Resolves this prototype to an instance using the specified concrete type arguments. */\r\n resolve(\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null\r\n ): Class | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n var instance = this.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n // inherit contextual type arguments\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n\r\n var declaration = this.declaration;\r\n var baseClass: Class | null = null;\r\n if (declaration.extendsType) {\r\n let baseClassType = this.program.resolveType(declaration.extendsType, null); // reports\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.classReference)) {\r\n this.program.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n declaration.extendsType.range\r\n );\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.SEALED)) {\r\n this.program.error(\r\n DiagnosticCode.Class_0_is_sealed_and_cannot_be_extended,\r\n declaration.extendsType.range, baseClass.internalName\r\n );\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.UNMANAGED) != this.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n this.program.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa,\r\n Range.join(declaration.name.range, declaration.extendsType.range)\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n // override call specific contextual type arguments if provided\r\n var i: i32, k: i32;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != declaration.typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n for (i = 0; i < k; ++i) {\r\n contextualTypeArguments.set(declaration.typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n } else if (declaration.typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n\r\n var simpleName = this.simpleName;\r\n var internalName = this.internalName;\r\n if (instanceKey.length) {\r\n simpleName += \"<\" + instanceKey + \">\";\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n instance = new Class(this, simpleName, internalName, typeArguments, baseClass);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n this.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n\r\n var memoryOffset: u32 = 0;\r\n if (baseClass) {\r\n memoryOffset = baseClass.currentMemoryOffset;\r\n if (baseClass.members) {\r\n if (!instance.members) instance.members = new Map();\r\n for (let inheritedMember of baseClass.members.values()) {\r\n instance.members.set(inheritedMember.simpleName, inheritedMember);\r\n }\r\n }\r\n }\r\n\r\n // Resolve constructor\r\n if (this.constructorPrototype) {\r\n let partialConstructor = this.constructorPrototype.resolvePartial(typeArguments); // reports\r\n if (partialConstructor) instance.constructorInstance = partialConstructor.resolve(); // reports\r\n }\r\n\r\n // Resolve instance members\r\n if (this.instanceMembers) {\r\n for (let member of this.instanceMembers.values()) {\r\n switch (member.kind) {\r\n\r\n // Lay out fields in advance\r\n case ElementKind.FIELD_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let fieldDeclaration = (member).declaration;\r\n if (!fieldDeclaration.type) {\r\n throw new Error(\"type expected\"); // TODO: check if parent class defines a type\r\n }\r\n let fieldType = this.program.resolveType( // reports\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments\r\n );\r\n if (!fieldType) 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: {\r\n if (memoryOffset & 1) ++memoryOffset;\r\n break;\r\n }\r\n case 4: {\r\n if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1;\r\n break;\r\n }\r\n case 8: {\r\n if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n fieldInstance.memoryOffset = memoryOffset;\r\n memoryOffset += fieldType.byteSize;\r\n instance.members.set(member.simpleName, fieldInstance);\r\n break;\r\n }\r\n\r\n // Partially resolve methods as these might have type arguments on their own\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let partialPrototype = (member).resolvePartial(typeArguments); // reports\r\n if (partialPrototype) {\r\n partialPrototype.internalName = internalName + INSTANCE_DELIMITER + partialPrototype.simpleName;\r\n instance.members.set(member.simpleName, partialPrototype);\r\n }\r\n break;\r\n }\r\n\r\n // Clone properties and partially resolve the wrapped accessors for consistence with other methods\r\n case ElementKind.PROPERTY: {\r\n if (!instance.members) instance.members = new Map();\r\n let getterPrototype = assert((member).getterPrototype);\r\n let setterPrototype = (member).setterPrototype;\r\n let instanceProperty = new Property(\r\n this.program,\r\n member.simpleName,\r\n internalName + INSTANCE_DELIMITER + member.simpleName,\r\n this\r\n );\r\n let partialGetterPrototype = getterPrototype.resolvePartial(typeArguments);\r\n if (!partialGetterPrototype) return null;\r\n partialGetterPrototype.internalName = (\r\n internalName + INSTANCE_DELIMITER + partialGetterPrototype.simpleName\r\n );\r\n instanceProperty.getterPrototype = partialGetterPrototype;\r\n if (setterPrototype) {\r\n let partialSetterPrototype = setterPrototype.resolvePartial(typeArguments);\r\n if (!partialSetterPrototype) return null;\r\n partialSetterPrototype.internalName = (\r\n internalName + INSTANCE_DELIMITER + partialSetterPrototype.simpleName\r\n );\r\n instanceProperty.setterPrototype = partialSetterPrototype;\r\n }\r\n instance.members.set(member.simpleName, instanceProperty);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n // Fully resolve operator overloads (don't have type parameters on their own)\r\n for (let [kind, prototype] of this.overloadPrototypes) {\r\n assert(kind != OperatorKind.INVALID);\r\n let operatorInstance: Function | null;\r\n if (prototype.is(CommonFlags.INSTANCE)) {\r\n let operatorPartial = prototype.resolvePartial(typeArguments); // reports\r\n if (!operatorPartial) continue;\r\n operatorInstance = operatorPartial.resolve(); // reports\r\n } else {\r\n operatorInstance = prototype.resolve(); // reports\r\n }\r\n if (!operatorInstance) continue;\r\n let overloads = instance.overloads;\r\n if (!overloads) instance.overloads = overloads = new Map();\r\n overloads.set(kind, operatorInstance);\r\n }\r\n\r\n instance.currentMemoryOffset = memoryOffset; // offsetof() is the class' byte size in memory\r\n return instance;\r\n }\r\n\r\n /** Resolves the specified type arguments prior to resolving this prototype to an instance. */\r\n resolveUsingTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n alternativeReportNode: Node | null\r\n ): Class | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (this.is(CommonFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.program.resolveTypeArguments(\r\n this.declaration.typeParameters,\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n } else {\r\n assert(typeArgumentNodes == null || !typeArgumentNodes.length);\r\n }\r\n return this.resolve(resolvedTypeArguments, contextualTypeArguments);\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A resolved class. */\r\nexport class Class extends Element {\r\n\r\n kind = ElementKind.CLASS;\r\n\r\n /** Prototype reference. */\r\n prototype: ClassPrototype;\r\n /** Resolved type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Resolved class type. */\r\n type: Type;\r\n /** Base class, if applicable. */\r\n base: Class | null;\r\n /** Contextual type arguments for fields and methods. */\r\n contextualTypeArguments: Map | null = null;\r\n /** Current member memory offset. */\r\n currentMemoryOffset: u32 = 0;\r\n /** Constructor instance. */\r\n constructorInstance: Function | null = null;\r\n /** Operator overloads. */\r\n overloads: Map | null = null;\r\n\r\n /** Constructs a new class. */\r\n constructor(\r\n prototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] | null = null,\r\n base: Class | null = null\r\n ) {\r\n super(prototype.program, simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.typeArguments = typeArguments;\r\n this.type = prototype.program.options.usizeType.asClass(this);\r\n this.base = base;\r\n\r\n // inherit static members and contextual type arguments from base class\r\n if (base) {\r\n let inheritedTypeArguments = base.contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [baseName, baseType] of inheritedTypeArguments) {\r\n this.contextualTypeArguments.set(baseName, baseType);\r\n }\r\n }\r\n }\r\n\r\n // apply instance-specific contextual type arguments\r\n var declaration = this.prototype.declaration;\r\n var i: i32, k: i32;\r\n if (declaration) { // irrelevant for built-ins\r\n let typeParameters = declaration.typeParameters;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n if (k) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (i = 0; i < k; ++i) {\r\n this.contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n }\r\n } else if (typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n }\r\n }\r\n\r\n /** Tests if a value of this class type is assignable to a target of the specified class type. */\r\n isAssignableTo(target: Class): bool {\r\n var current: Class | null = this;\r\n do if (current == target) return true;\r\n while (current = current.base);\r\n return false;\r\n }\r\n\r\n /** Looks up the operator overload of the specified kind. */\r\n lookupOverload(kind: OperatorKind, unchecked: bool = false): Function | null {\r\n if (unchecked) {\r\n switch (kind) {\r\n case OperatorKind.INDEXED_GET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_GET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n case OperatorKind.INDEXED_SET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_SET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n var instance: Class | null = this;\r\n do {\r\n let overloads = instance.overloads;\r\n if (overloads) {\r\n let overload = overloads.get(kind);\r\n if (overload) return overload;\r\n }\r\n } while (instance = instance.base);\r\n return null;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A yet unresolved interface. */\r\nexport class InterfacePrototype extends ClassPrototype {\r\n\r\n kind = ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: InterfaceDeclaration; // more specific\r\n\r\n /** Constructs a new interface prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: InterfaceDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, declaration, decoratorFlags);\r\n }\r\n}\r\n\r\n/** A resolved interface. */\r\nexport class Interface extends Class {\r\n\r\n kind = ElementKind.INTERFACE;\r\n\r\n /** Prototype reference. */\r\n prototype: InterfacePrototype; // more specific\r\n /** Base interface, if applcable. */\r\n base: Interface | null; // more specific\r\n\r\n /** Constructs a new interface. */\r\n constructor(\r\n prototype: InterfacePrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, simpleName, internalName, typeArguments, base);\r\n }\r\n}\r\n\r\n/** Control flow flags indicating specific conditions. */\r\nexport const enum FlowFlags {\r\n /** No specific conditions. */\r\n NONE = 0,\r\n\r\n // 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","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\r\n * Mappings from AssemblyScript types to WebAssembly types.\r\n * @module types\r\n *//***/\r\n\r\nimport {\r\n Class,\r\n FunctionTarget\r\n} 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","/**\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 ) {\r\n ++this.pos;\r\n }\r\n break;\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.SPACE: {\r\n ++this.pos;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EXCLAMATION_EQUALS_EQUALS;\r\n }\r\n return Token.EXCLAMATION_EQUALS;\r\n }\r\n return Token.EXCLAMATION;\r\n }\r\n case CharCode.DOUBLEQUOTE:\r\n case CharCode.SINGLEQUOTE:\r\n case CharCode.BACKTICK: { // TODO\r\n return Token.STRINGLITERAL; // expects a call to readString\r\n }\r\n case CharCode.PERCENT: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.PERCENT_EQUALS;\r\n }\r\n return Token.PERCENT;\r\n }\r\n case CharCode.AMPERSAND: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.AMPERSAND) {\r\n ++this.pos;\r\n return Token.AMPERSAND_AMPERSAND;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.AMPERSAND_EQUALS;\r\n }\r\n }\r\n return Token.AMPERSAND;\r\n }\r\n case CharCode.OPENPAREN: {\r\n ++this.pos;\r\n return Token.OPENPAREN;\r\n }\r\n case CharCode.CLOSEPAREN: {\r\n ++this.pos;\r\n return Token.CLOSEPAREN;\r\n }\r\n case CharCode.ASTERISK: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.ASTERISK_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.ASTERISK_ASTERISK_EQUALS;\r\n }\r\n return Token.ASTERISK_ASTERISK;\r\n }\r\n }\r\n return Token.ASTERISK;\r\n }\r\n case CharCode.PLUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.PLUS) {\r\n ++this.pos;\r\n return Token.PLUS_PLUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.PLUS_EQUALS;\r\n }\r\n }\r\n return Token.PLUS;\r\n }\r\n case CharCode.COMMA: {\r\n ++this.pos;\r\n return Token.COMMA;\r\n }\r\n case CharCode.MINUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.MINUS) {\r\n ++this.pos;\r\n return Token.MINUS_MINUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.MINUS_EQUALS;\r\n }\r\n }\r\n return Token.MINUS;\r\n }\r\n case CharCode.DOT: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (isDecimalDigit(text.charCodeAt(this.pos))) {\r\n --this.pos;\r\n return Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n if (\r\n maxTokenLength > 2 && this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.DOT &&\r\n text.charCodeAt(this.pos + 1) == CharCode.DOT\r\n ) {\r\n this.pos += 2;\r\n return Token.DOT_DOT_DOT;\r\n }\r\n }\r\n return Token.DOT;\r\n }\r\n case CharCode.SLASH: {\r\n let commentStartPos = this.pos;\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.SLASH) { // single-line\r\n let commentKind = CommentKind.LINE;\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n ++this.pos;\r\n commentKind = CommentKind.TRIPLE;\r\n }\r\n while (++this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LINEFEED) {\r\n ++this.pos;\r\n break;\r\n }\r\n }\r\n if (this.onComment) {\r\n this.onComment(\r\n commentKind,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) { // multi-line\r\n let closed = false;\r\n while (++this.pos < this.end) {\r\n c = text.charCodeAt(this.pos);\r\n if (\r\n c == CharCode.ASTERISK &&\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n this.pos += 2;\r\n closed = true;\r\n break;\r\n }\r\n }\r\n if (!closed) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n this.range(this.pos), \"*/\"\r\n );\r\n } else if (this.onComment) {\r\n this.onComment(\r\n CommentKind.BLOCK,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.SLASH_EQUALS;\r\n }\r\n }\r\n return Token.SLASH;\r\n }\r\n case CharCode._0:\r\n case CharCode._1:\r\n case CharCode._2:\r\n case CharCode._3:\r\n case CharCode._4:\r\n case CharCode._5:\r\n case CharCode._6:\r\n case CharCode._7:\r\n case CharCode._8:\r\n case CharCode._9: {\r\n return this.testInteger()\r\n ? Token.INTEGERLITERAL // expects a call to readInteger\r\n : Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n case CharCode.COLON: {\r\n ++this.pos;\r\n return Token.COLON;\r\n }\r\n case CharCode.SEMICOLON: {\r\n ++this.pos;\r\n return Token.SEMICOLON;\r\n }\r\n case CharCode.LESSTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LESSTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.LESSTHAN_LESSTHAN_EQUALS;\r\n }\r\n return Token.LESSTHAN_LESSTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.LESSTHAN_EQUALS;\r\n }\r\n }\r\n return Token.LESSTHAN;\r\n }\r\n case CharCode.EQUALS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EQUALS_EQUALS_EQUALS;\r\n }\r\n return Token.EQUALS_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n return Token.EQUALS_GREATERTHAN;\r\n }\r\n }\r\n return Token.EQUALS;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (maxTokenLength > 2 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 3 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN;\r\n }\r\n case CharCode.QUESTION: {\r\n ++this.pos;\r\n return Token.QUESTION;\r\n }\r\n case CharCode.OPENBRACKET: {\r\n ++this.pos;\r\n return Token.OPENBRACKET;\r\n }\r\n case CharCode.CLOSEBRACKET: {\r\n ++this.pos;\r\n return Token.CLOSEBRACKET;\r\n }\r\n case CharCode.CARET: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.CARET_EQUALS;\r\n }\r\n return Token.CARET;\r\n }\r\n case CharCode.OPENBRACE: {\r\n ++this.pos;\r\n return Token.OPENBRACE;\r\n }\r\n case CharCode.BAR: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.BAR) {\r\n ++this.pos;\r\n return Token.BAR_BAR;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.BAR_EQUALS;\r\n }\r\n }\r\n return Token.BAR;\r\n }\r\n case CharCode.CLOSEBRACE: {\r\n ++this.pos;\r\n return Token.CLOSEBRACE;\r\n }\r\n case CharCode.TILDE: {\r\n ++this.pos;\r\n return Token.TILDE;\r\n }\r\n case CharCode.AT: {\r\n ++this.pos;\r\n return Token.AT;\r\n }\r\n default: {\r\n if (isIdentifierStart(c)) {\r\n if (isKeywordCharacter(c)) {\r\n let posBefore = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(c = text.charCodeAt(this.pos))\r\n ) {\r\n if (!isKeywordCharacter(c)) {\r\n this.pos = posBefore;\r\n return Token.IDENTIFIER;\r\n }\r\n }\r\n let keywordText = text.substring(posBefore, this.pos);\r\n let keywordToken = tokenFromKeyword(keywordText);\r\n if (\r\n keywordToken != Token.INVALID &&\r\n identifierHandling !== IdentifierHandling.ALWAYS &&\r\n !(\r\n identifierHandling === IdentifierHandling.PREFER &&\r\n tokenIsAlsoIdentifier(keywordToken)\r\n )\r\n ) {\r\n return keywordToken;\r\n }\r\n this.pos = posBefore;\r\n }\r\n return Token.IDENTIFIER; // expects a call to readIdentifier\r\n } else if (isWhiteSpace(c)) {\r\n ++this.pos;\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Invalid_character,\r\n this.range(this.pos, this.pos + 1)\r\n );\r\n ++this.pos;\r\n return Token.INVALID;\r\n }\r\n }\r\n }\r\n return Token.ENDOFFILE;\r\n }\r\n\r\n peek(\r\n checkOnNewLine: bool = false,\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxCompoundLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n if (this.nextToken < 0) {\r\n let posBefore = this.pos;\r\n let tokenBefore = this.token;\r\n let tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n this.nextTokenPos = this.tokenPos;\r\n if (checkOnNewLine) {\r\n this.nextTokenOnNewLine = false;\r\n while (--this.tokenPos > posBefore) {\r\n if (isLineBreak(text.charCodeAt(this.tokenPos))) {\r\n this.nextTokenOnNewLine = true;\r\n break;\r\n }\r\n }\r\n }\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n }\r\n return this.nextToken;\r\n }\r\n\r\n skipIdentifier(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.PREFER);\r\n }\r\n\r\n skipIdentifierName(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.ALWAYS);\r\n }\r\n\r\n skip(token: Token, identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): bool {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n var maxCompoundLength = i32.MAX_VALUE;\r\n switch (token) {\r\n case Token.GREATERTHAN: { // where parsing type arguments\r\n maxCompoundLength = 1;\r\n break;\r\n }\r\n }\r\n this.token = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n if (this.token == token) {\r\n this.nextToken = -1;\r\n return true;\r\n } else {\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n return false;\r\n }\r\n }\r\n\r\n mark(): State {\r\n var state: State;\r\n if (reusableState) {\r\n state = reusableState;\r\n reusableState = null;\r\n } else {\r\n state = new State();\r\n }\r\n state.pos = this.pos;\r\n state.token = this.token;\r\n state.tokenPos = this.tokenPos;\r\n return state;\r\n }\r\n\r\n discard(state: State): void {\r\n reusableState = state;\r\n }\r\n\r\n reset(state: State): void {\r\n this.pos = state.pos;\r\n this.token = state.token;\r\n this.tokenPos = state.tokenPos;\r\n this.nextToken = -1;\r\n }\r\n\r\n range(start: i32 = -1, end: i32 = -1): Range {\r\n if (start < 0) {\r\n start = this.tokenPos;\r\n end = this.pos;\r\n } else if (end < 0) {\r\n end = start;\r\n }\r\n return new Range(this.source, start, end);\r\n }\r\n\r\n readIdentifier(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(text.charCodeAt(this.pos))\r\n );\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readString(): string {\r\n var text = this.source.text;\r\n var quote = text.charCodeAt(this.pos++);\r\n var start = this.pos;\r\n var result = \"\";\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.end)\r\n );\r\n break;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == quote) {\r\n result += text.substring(start, this.pos++);\r\n break;\r\n }\r\n if (c == CharCode.BACKSLASH) {\r\n result += text.substring(start, this.pos);\r\n result += this.readEscapeSequence();\r\n start = this.pos;\r\n continue;\r\n }\r\n if (isLineBreak(c)) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n return result;\r\n }\r\n\r\n readEscapeSequence(): string {\r\n if (++this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.end)\r\n );\r\n return \"\";\r\n }\r\n\r\n var text = this.source.text;\r\n var c = text.charCodeAt(this.pos++);\r\n switch (c) {\r\n case CharCode._0: return \"\\0\";\r\n case CharCode.b: return \"\\b\";\r\n case CharCode.t: return \"\\t\";\r\n case CharCode.n: return \"\\n\";\r\n case CharCode.v: return \"\\v\";\r\n case CharCode.f: return \"\\f\";\r\n case CharCode.r: return \"\\r\";\r\n case CharCode.SINGLEQUOTE: return \"'\";\r\n case CharCode.DOUBLEQUOTE: return \"\\\"\";\r\n case CharCode.u: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.OPENBRACE\r\n ) {\r\n ++this.pos;\r\n return this.readExtendedUnicodeEscape(); // \\u{DDDDDDDD}\r\n }\r\n return this.readUnicodeEscape(); // \\uDDDD\r\n }\r\n case CharCode.CARRIAGERETURN: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // fall through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: return \"\";\r\n default: return String.fromCharCode(c);\r\n }\r\n }\r\n\r\n readRegexpPattern(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var escaped = false;\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.end)\r\n );\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.BACKSLASH) {\r\n ++this.pos;\r\n escaped = true;\r\n continue;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.SLASH && !escaped) break;\r\n if (isLineBreak(c)) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n escaped = false;\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readRegexpFlags(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var flags = 0;\r\n while (this.pos < this.end) {\r\n let c: i32 = text.charCodeAt(this.pos);\r\n if (!isIdentifierPart(c)) break;\r\n ++this.pos;\r\n\r\n // make sure each supported flag is unique\r\n switch (c) {\r\n case CharCode.g: {\r\n flags |= flags & 1 ? -1 : 1;\r\n break;\r\n }\r\n case CharCode.i: {\r\n flags |= flags & 2 ? -1 : 2;\r\n break;\r\n }\r\n case CharCode.m: {\r\n flags |= flags & 4 ? -1 : 4;\r\n break;\r\n }\r\n default: {\r\n flags = -1;\r\n break;\r\n }\r\n }\r\n }\r\n if (flags == -1) {\r\n this.error(\r\n DiagnosticCode.Invalid_regular_expression_flags,\r\n this.range(start, this.pos)\r\n );\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n testInteger(): bool {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 1 < this.end) {\r\n switch (text.charCodeAt(this.pos + 2)) {\r\n case CharCode.X:\r\n case CharCode.x:\r\n case CharCode.B:\r\n case CharCode.b:\r\n case CharCode.O:\r\n case CharCode.o: return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode.DOT || c == CharCode.E || c == CharCode.e) {\r\n return false;\r\n }\r\n if ((c < CharCode._0 || c > CharCode._9) && c != CharCode._) break;\r\n // does not validate separator placement (this is done in readXYInteger)\r\n pos++;\r\n }\r\n return true;\r\n }\r\n\r\n readInteger(): I64 {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n switch (text.charCodeAt(this.pos + 1)) {\r\n case CharCode.X:\r\n case CharCode.x: {\r\n this.pos += 2;\r\n return this.readHexInteger();\r\n }\r\n case CharCode.B:\r\n case CharCode.b: {\r\n this.pos += 2;\r\n return this.readBinaryInteger();\r\n }\r\n case CharCode.O:\r\n case CharCode.o: {\r\n this.pos += 2;\r\n return this.readOctalInteger();\r\n }\r\n }\r\n if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n let start = this.pos;\r\n ++this.pos;\r\n let value = this.readOctalInteger();\r\n this.error(\r\n DiagnosticCode.Octal_literals_are_not_allowed_in_strict_mode,\r\n this.range(start, this.pos)\r\n );\r\n return value;\r\n }\r\n }\r\n return this.readDecimalInteger();\r\n }\r\n\r\n readHexInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_16 = i64_new(16, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 16 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n // value = value * 16 + 10 + c - CharCode.A;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.A, 0)\r\n );\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n // value = value * 16 + 10 + c - CharCode.a;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.a, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readDecimalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_10 = i64_new(10, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 10 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_10),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readOctalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_8 = i64_new(8, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._7) {\r\n // value = value * 8 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_8),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Octal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readBinaryInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_2 = i64_new(2, 0);\r\n var i64_1 = i64_new(1, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode._0) {\r\n // value = value * 2;\r\n value = i64_mul(\r\n value,\r\n i64_2\r\n );\r\n } else if (c == CharCode._1) {\r\n // value = value * 2 + 1;\r\n value = i64_add(\r\n i64_mul(value, i64_2),\r\n i64_1\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Binary_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readFloat(): f64 {\r\n // var text = this.source.text;\r\n // if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n // switch (text.charCodeAt(this.pos + 1)) {\r\n // case CharCode.X:\r\n // case CharCode.x: {\r\n // this.pos += 2;\r\n // return this.readHexFloat();\r\n // }\r\n // }\r\n // }\r\n return this.readDecimalFloat();\r\n }\r\n\r\n readDecimalFloat(): f64 {\r\n // TODO: numeric separators (parseFloat can't handle these)\r\n var start = this.pos;\r\n var text = this.source.text;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n if (this.pos < this.end && text.charCodeAt(this.pos) == CharCode.DOT) {\r\n ++this.pos;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n if (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.E || c == CharCode.e) {\r\n if (\r\n ++this.pos < this.end && (\r\n text.charCodeAt(this.pos) == CharCode.MINUS ||\r\n text.charCodeAt(this.pos) == CharCode.PLUS\r\n ) &&\r\n isDecimalDigit(text.charCodeAt(this.pos + 1))\r\n ) {\r\n ++this.pos;\r\n }\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n }\r\n return parseFloat(text.substring(start, this.pos));\r\n }\r\n\r\n readHexFloat(): f64 {\r\n throw new Error(\"not implemented\"); // TBD\r\n }\r\n\r\n readUnicodeEscape(): string {\r\n var remain = 4;\r\n var value = 0;\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos++);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n value = value * 16 + c - CharCode._0;\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n value = value * 16 + 10 + c - CharCode.A;\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n value = value * 16 + 10 + c - CharCode.a;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(this.pos - 1, this.pos)\r\n );\r\n return \"\";\r\n }\r\n if (--remain == 0) break;\r\n }\r\n if (remain) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.pos)\r\n );\r\n return \"\";\r\n }\r\n return String.fromCharCode(value);\r\n }\r\n\r\n private readExtendedUnicodeEscape(): string {\r\n var start = this.pos;\r\n var value = this.readHexInteger();\r\n var value32 = i64_low(value);\r\n var invalid = false;\r\n\r\n assert(!i64_high(value));\r\n if (value32 > 0x10FFFF) {\r\n this.error(\r\n DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n var text = this.source.text;\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(start, this.end)\r\n );\r\n invalid = true;\r\n } else if (text.charCodeAt(this.pos) == CharCode.CLOSEBRACE) {\r\n ++this.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unterminated_Unicode_escape_sequence,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n if (invalid) return \"\";\r\n return value32 < 65536\r\n ? String.fromCharCode(value32)\r\n : String.fromCharCode(\r\n (((value32 - 65536) / 1024 | 0) + 0xD800) as i32,\r\n ( (value32 - 65536) % 1024 + 0xDC00) as i32\r\n );\r\n }\r\n\r\n finish(): void {\r\n }\r\n}\r\n\r\n/** Tokenizer state as returned by {@link Tokenizer#mark} and consumed by {@link Tokenizer#reset}. */\r\nexport class State {\r\n /** Current position. */\r\n pos: i32;\r\n /** Current token. */\r\n token: Token;\r\n /** Current token's position. */\r\n tokenPos: i32;\r\n}\r\n\r\n// Reusable state object to reduce allocations\r\nvar reusableState: State | null = null;\r\n","/**\n * Generated from diagnosticsMessages.json. Do not edit.\n * @module diagnostics\n *//***/\n\n/* tslint:disable:max-line-length */\n\n/** Enum of available diagnostic codes. */\nexport enum DiagnosticCode {\n Operation_not_supported = 100,\n Operation_is_unsafe = 101,\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\n Type_0_cannot_be_changed_to_type_1 = 202,\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\n Basic_type_0_cannot_be_nullable = 204,\n Cannot_export_a_mutable_global = 205,\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\n Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa = 207,\n Unmanaged_classes_cannot_implement_interfaces = 208,\n Invalid_regular_expression_flags = 209,\n Implementation_0_must_match_the_signature_1 = 210,\n Class_0_is_sealed_and_cannot_be_extended = 211,\n Decorator_0_is_not_valid_here = 212,\n Duplicate_decorator = 213,\n An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf = 214,\n Optional_parameter_must_have_an_initializer = 215,\n Unterminated_string_literal = 1002,\n Identifier_expected = 1003,\n _0_expected = 1005,\n A_file_cannot_have_a_reference_to_itself = 1006,\n Trailing_comma_not_allowed = 1009,\n Unexpected_token = 1012,\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\n Parameter_cannot_have_question_mark_and_initializer = 1015,\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\n Enum_member_must_have_initializer = 1061,\n Statements_are_not_allowed_in_ambient_contexts = 1036,\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\n _0_modifier_cannot_be_used_here = 1042,\n A_rest_parameter_cannot_be_optional = 1047,\n A_rest_parameter_cannot_have_an_initializer = 1048,\n A_set_accessor_must_have_exactly_one_parameter = 1049,\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\n A_get_accessor_cannot_have_parameters = 1054,\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\n An_accessor_cannot_have_type_parameters = 1094,\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\n Type_parameter_list_cannot_be_empty = 1098,\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\n Expression_expected = 1109,\n Type_expected = 1110,\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\n Duplicate_label_0 = 1114,\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\n Digit_expected = 1124,\n Hexadecimal_digit_expected = 1125,\n Unexpected_end_of_text = 1126,\n Invalid_character = 1127,\n _case_or_default_expected = 1130,\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\n Type_argument_expected = 1140,\n String_literal_expected = 1141,\n Line_break_not_permitted_here = 1142,\n Declaration_expected = 1146,\n _const_declarations_must_be_initialized = 1155,\n Unterminated_regular_expression_literal = 1161,\n Interface_declaration_cannot_have_implements_clause = 1176,\n Binary_digit_expected = 1177,\n Octal_digit_expected = 1178,\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\n Unterminated_Unicode_escape_sequence = 1199,\n Decorators_are_not_valid_here = 1206,\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\n Method_0_cannot_have_an_implementation_because_it_is_marked_abstract = 1245,\n A_class_may_only_extend_another_class = 1311,\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\n Duplicate_identifier_0 = 2300,\n Cannot_find_name_0 = 2304,\n Module_0_has_no_exported_member_1 = 2305,\n Generic_type_0_requires_1_type_argument_s = 2314,\n Type_0_is_not_generic = 2315,\n Type_0_is_not_assignable_to_type_1 = 2322,\n Index_signature_is_missing_in_type_0 = 2329,\n _this_cannot_be_referenced_in_current_location = 2332,\n _super_can_only_be_referenced_in_a_derived_class = 2335,\n Property_0_does_not_exist_on_type_1 = 2339,\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\n _get_and_set_accessor_must_have_the_same_type = 2380,\n Constructor_implementation_is_missing = 2390,\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\n Multiple_constructor_implementations_are_not_allowed = 2392,\n Duplicate_function_implementation = 2393,\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\n Type_0_has_no_property_1 = 2460,\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\n Index_signature_in_type_0_only_permits_reading = 2542,\n Expected_0_arguments_but_got_1 = 2554,\n Expected_at_least_0_arguments_but_got_1 = 2555,\n Expected_0_type_arguments_but_got_1 = 2558,\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\n Namespace_0_has_no_exported_member_1 = 2694,\n File_0_not_found = 6054,\n Numeric_separators_are_not_allowed_here = 6188,\n Multiple_consecutive_numeric_separators_are_not_permitted = 6189\n}\n\n/** Translates a diagnostic code to its respective string. */\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\n switch (code) {\n case 100: return \"Operation not supported.\";\n case 101: return \"Operation is unsafe.\";\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\n case 204: return \"Basic type '{0}' cannot be nullable.\";\n case 205: return \"Cannot export a mutable global.\";\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\n case 207: return \"Unmanaged classes cannot extend managed classes and vice-versa.\";\n case 208: return \"Unmanaged classes cannot implement interfaces.\";\n case 209: return \"Invalid regular expression flags.\";\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\n case 212: return \"Decorator '{0}' is not valid here.\";\n case 213: return \"Duplicate decorator.\";\n case 214: return \"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.\";\n case 215: return \"Optional parameter must have an initializer.\";\n case 1002: return \"Unterminated string literal.\";\n case 1003: return \"Identifier expected.\";\n case 1005: return \"'{0}' expected.\";\n case 1006: return \"A file cannot have a reference to itself.\";\n case 1009: return \"Trailing comma not allowed.\";\n case 1012: return \"Unexpected token.\";\n case 1014: return \"A rest parameter must be last in a parameter list.\";\n case 1015: return \"Parameter cannot have question mark and initializer.\";\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\n case 1061: return \"Enum member must have initializer.\";\n case 1036: return \"Statements are not allowed in ambient contexts.\";\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\n case 1042: return \"'{0}' modifier cannot be used here.\";\n case 1047: return \"A rest parameter cannot be optional.\";\n case 1048: return \"A rest parameter cannot have an initializer.\";\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\n case 1054: return \"A 'get' accessor cannot have parameters.\";\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\n case 1094: return \"An accessor cannot have type parameters.\";\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\n case 1098: return \"Type parameter list cannot be empty.\";\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\n case 1108: return \"A 'return' statement can only be used within a function body.\";\n case 1109: return \"Expression expected.\";\n case 1110: return \"Type expected.\";\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\n case 1114: return \"Duplicate label '{0}'.\";\n case 1121: return \"Octal literals are not allowed in strict mode.\";\n case 1124: return \"Digit expected.\";\n case 1125: return \"Hexadecimal digit expected.\";\n case 1126: return \"Unexpected end of text.\";\n case 1127: return \"Invalid character.\";\n case 1130: return \"'case' or 'default' expected.\";\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\n case 1140: return \"Type argument expected.\";\n case 1141: return \"String literal expected.\";\n case 1142: return \"Line break not permitted here.\";\n case 1146: return \"Declaration expected.\";\n case 1155: return \"'const' declarations must be initialized.\";\n case 1161: return \"Unterminated regular expression literal.\";\n case 1176: return \"Interface declaration cannot have 'implements' clause.\";\n case 1177: return \"Binary digit expected.\";\n case 1178: return \"Octal digit expected.\";\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\n case 1199: return \"Unterminated Unicode escape sequence.\";\n case 1206: return \"Decorators are not valid here.\";\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\n case 1245: return \"Method '{0}' cannot have an implementation because it is marked abstract.\";\n case 1311: return \"A class may only extend another class.\";\n case 1317: return \"A parameter property cannot be declared using a rest parameter.\";\n case 2300: return \"Duplicate identifier '{0}'.\";\n case 2304: return \"Cannot find name '{0}'.\";\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\n case 2315: return \"Type '{0}' is not generic.\";\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\n case 2329: return \"Index signature is missing in type '{0}'.\";\n case 2332: return \"'this' cannot be referenced in current location.\";\n case 2335: return \"'super' can only be referenced in a derived class.\";\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\n case 2390: return \"Constructor implementation is missing.\";\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\n case 2392: return \"Multiple constructor implementations are not allowed.\";\n case 2393: return \"Duplicate function implementation.\";\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\n case 2460: return \"Type '{0}' has no property '{1}'.\";\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\n case 2554: return \"Expected {0} arguments, but got {1}.\";\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\n case 6054: return \"File '{0}' not found.\";\n case 6188: return \"Numeric separators are not allowed here.\";\n case 6189: return \"Multiple consecutive numeric separators are not permitted.\";\n default: return \"\";\n }\n}\n","/**\r\n * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileAllocate as compileBuiltinAllocate,\r\n compileAbort as compileBuiltinAbort\r\n} from \"./builtins\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module,\r\n MemorySegment,\r\n ExpressionRef,\r\n UnaryOp,\r\n BinaryOp,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionId,\r\n FunctionTypeRef,\r\n GlobalRef,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getFunctionBody,\r\n getGetLocalIndex,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName\r\n} from \"./module\";\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n INNER_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n STATIC_DELIMITER,\r\n GETTER_PREFIX,\r\n SETTER_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Program,\r\n ClassPrototype,\r\n Class,\r\n Element,\r\n ElementKind,\r\n Enum,\r\n Field,\r\n FunctionPrototype,\r\n Function,\r\n FunctionTarget,\r\n Global,\r\n Local,\r\n Namespace,\r\n EnumValue,\r\n Property,\r\n VariableLikeElement,\r\n FlowFlags,\r\n ConstantValueKind,\r\n Flow,\r\n OperatorKind,\r\n DecoratorFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n Token,\r\n operatorTokenToString\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n TypeNode,\r\n Source,\r\n Range,\r\n DecoratorKind,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DoStatement,\r\n EmptyStatement,\r\n EnumDeclaration,\r\n ExportStatement,\r\n ExpressionStatement,\r\n FunctionDeclaration,\r\n ForStatement,\r\n IfStatement,\r\n ImportStatement,\r\n InstanceOfExpression,\r\n InterfaceDeclaration,\r\n NamespaceDeclaration,\r\n ReturnStatement,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n VariableDeclaration,\r\n VariableStatement,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n Expression,\r\n AssertionExpression,\r\n BinaryExpression,\r\n CallExpression,\r\n CommaExpression,\r\n ElementAccessExpression,\r\n FloatLiteralExpression,\r\n FunctionExpression,\r\n IdentifierExpression,\r\n IntegerLiteralExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n NewExpression,\r\n ParenthesizedExpression,\r\n PropertyAccessExpression,\r\n TernaryExpression,\r\n ArrayLiteralExpression,\r\n StringLiteralExpression,\r\n UnaryPostfixExpression,\r\n UnaryPrefixExpression,\r\n FieldDeclaration,\r\n\r\n nodeIsConstantValue,\r\n isLastStatement,\r\n findDecorator\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n Signature,\r\n\r\n typesToNativeTypes\r\n} from \"./types\";\r\n\r\nimport {\r\n writeI32,\r\n writeI64,\r\n writeF32,\r\n writeF64\r\n} from \"./util\";\r\n\r\n/** Compilation target. */\r\nexport enum Target {\r\n /** WebAssembly with 32-bit pointers. */\r\n WASM32,\r\n /** WebAssembly with 64-bit pointers. Experimental and not supported by any runtime yet. */\r\n WASM64\r\n}\r\n\r\n/** Compiler options. */\r\nexport class Options {\r\n\r\n /** WebAssembly target. Defaults to {@link Target.WASM32}. */\r\n target: Target = Target.WASM32;\r\n /** If true, compiles everything instead of just reachable code. */\r\n noTreeShaking: bool = false;\r\n /** If true, replaces assertions with nops. */\r\n noAssert: bool = false;\r\n /** If true, imports the memory provided by the embedder. */\r\n importMemory: bool = false;\r\n /** If true, imports the function table provided by the embedder. */\r\n importTable: bool = false;\r\n /** If true, generates information necessary for source maps. */\r\n sourceMap: bool = false;\r\n /** Static memory start offset. */\r\n memoryBase: i32 = 0;\r\n /** Global aliases. */\r\n globalAliases: Map | null = null;\r\n /** Additional features to activate. */\r\n features: Feature = Feature.NONE;\r\n\r\n /** Hinted optimize level. Not applied by the compiler itself. */\r\n optimizeLevelHint: i32 = 0;\r\n /** Hinted shrink level. Not applied by the compiler itself. */\r\n shrinkLevelHint: i32 = 0;\r\n\r\n /** Tests if the target is WASM64 or, otherwise, WASM32. */\r\n get isWasm64(): bool {\r\n return this.target == Target.WASM64;\r\n }\r\n\r\n /** Gets the unsigned size type matching the target. */\r\n get usizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.usize64 : Type.usize32;\r\n }\r\n\r\n /** Gets the signed size type matching the target. */\r\n get isizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.isize64 : Type.isize32;\r\n }\r\n\r\n /** Gets the native size type matching the target. */\r\n get nativeSizeType(): NativeType {\r\n return this.target == Target.WASM64 ? NativeType.I64 : NativeType.I32;\r\n }\r\n\r\n /** Tests if a specific feature is activated. */\r\n hasFeature(feature: Feature): bool {\r\n return (this.features & feature) != 0;\r\n }\r\n}\r\n\r\n/** Indicates specific features to activate. */\r\nexport const enum Feature {\r\n /** No additional features. */\r\n NONE = 0,\r\n /** Sign extension operations. */\r\n SIGN_EXTENSION = 1 << 0, // see: https://github.com/WebAssembly/sign-extension-ops\r\n /** Mutable global imports and exports. */\r\n MUTABLE_GLOBAL = 1 << 1 // see: https://github.com/WebAssembly/mutable-global\r\n}\r\n\r\n/** Indicates the desired kind of a conversion. */\r\nexport const enum ConversionKind {\r\n /** No conversion. */\r\n NONE,\r\n /** Implicit conversion. */\r\n IMPLICIT,\r\n /** Explicit conversion. */\r\n EXPLICIT\r\n}\r\n\r\n/** Indicates the desired wrap mode of a conversion. */\r\nexport const enum WrapMode {\r\n /** No wrapping. */\r\n NONE,\r\n /** Wrap small integer values. */\r\n WRAP\r\n}\r\n\r\n/** Compiler interface. */\r\nexport class Compiler extends DiagnosticEmitter {\r\n\r\n /** Program reference. */\r\n program: Program;\r\n /** Provided options. */\r\n options: Options;\r\n /** Module instance being compiled. */\r\n module: Module;\r\n /** Current function in compilation. */\r\n currentFunction: Function;\r\n /** Current outer function in compilation, if compiling a function expression. */\r\n currentOuterFunction: Function | null = null;\r\n /** Current enum in compilation. */\r\n currentEnum: Enum | null = null;\r\n /** Current type in compilation. */\r\n currentType: Type = Type.void;\r\n /** Start function being compiled. */\r\n startFunctionInstance: Function;\r\n /** Start function statements. */\r\n startFunctionBody: ExpressionRef[];\r\n /** Counting memory offset. */\r\n memoryOffset: I64;\r\n /** Memory segments being compiled. */\r\n memorySegments: MemorySegment[] = [];\r\n /** Map of already compiled static string segments. */\r\n stringSegments: Map = new Map();\r\n /** Function table being compiled. */\r\n functionTable: Function[] = [];\r\n /** Argument count helper global. */\r\n argcVar: GlobalRef = 0;\r\n /** Argument count helper setter. */\r\n argcSet: FunctionRef = 0;\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n 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, []);\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.program.resolveType(declaration.type); // reports\r\n if (!resolvedType) return false;\r\n if (resolvedType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.type.range\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n\r\n // infer from initializer if not annotated\r\n } else if (declaration.initializer) { // infer type using void/NONE for literal inference\r\n initExpr = this.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 = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!instance) return null;\r\n instance.outerScope = outerScope;\r\n if (!this.compileFunction(instance)) return null; // reports\r\n return instance;\r\n }\r\n\r\n /** Either reuses or creates the function type matching the specified signature. */\r\n private ensureFunctionType(\r\n parameterTypes: Type[] | null,\r\n returnType: Type,\r\n thisType: Type | null = null\r\n ): FunctionTypeRef {\r\n var numParameters = parameterTypes ? parameterTypes.length : 0;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n if (parameterTypes) {\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = parameterTypes[i].toNativeType();\r\n }\r\n }\r\n var resultType = returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n let name = Signature.makeSignatureString(parameterTypes, returnType, thisType);\r\n typeRef = module.addFunctionType(name, resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n assert(!instance.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN));\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 alternativeReportNode: Node | null = null\r\n ): void {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.compileClassUsingTypeArguments(\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n }\r\n\r\n compileClassUsingTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var instance = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n if (!instance) return;\r\n this.compileClass(instance);\r\n }\r\n\r\n compileClass(instance: Class): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n var staticMembers = instance.prototype.members;\r\n if (staticMembers) {\r\n for (let element of staticMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [], null, null,\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], null, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], null, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n var ctorInstance = instance.constructorInstance;\r\n if (ctorInstance) this.compileFunction(ctorInstance);\r\n var instanceMembers = instance.members;\r\n if (instanceMembers) {\r\n for (let element of instanceMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n instance.contextualTypeArguments,\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n element.set(CommonFlags.COMPILED);\r\n if (!instance.is(CommonFlags.MODULE_EXPORT) || element.is(CommonFlags.PRIVATE)) break;\r\n let module = this.module;\r\n let name = (element).simpleName;\r\n let type = (element).type;\r\n let nativeType = type.toNativeType();\r\n let offset = (element).memoryOffset;\r\n let usizeType = this.options.usizeType;\r\n let nativeSizeType = this.options.nativeSizeType;\r\n\r\n // export an implicit getter: get:fieldName(this: usize) -> fieldType\r\n let getterName = mangleExportName(element, GETTER_PREFIX + name);\r\n module.addFunction(\r\n getterName,\r\n this.ensureFunctionType(null, type, usizeType),\r\n null,\r\n module.createLoad(\r\n type.byteSize,\r\n type.is(TypeFlags.SIGNED),\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(getterName, getterName);\r\n\r\n // export an implicit setter: set:fieldName(this: usize, value: fieldType) -> void\r\n if (element.is(CommonFlags.READONLY)) break;\r\n let setterName = mangleExportName(element, SETTER_PREFIX + name);\r\n module.addFunction(\r\n setterName,\r\n this.ensureFunctionType([ type ], Type.void, usizeType),\r\n null,\r\n module.createStore(\r\n type.byteSize,\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createGetLocal(1, nativeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(setterName, setterName);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], instance.contextualTypeArguments, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], instance.contextualTypeArguments, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n compileInterfaceDeclaration(\r\n declaration: InterfaceDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n // TODO\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n }\r\n\r\n // memory\r\n\r\n /** Adds a static memory segment with the specified data. */\r\n addMemorySegment(buffer: Uint8Array, alignment: i32 = 8): MemorySegment {\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n }\r\n\r\n // function table\r\n\r\n /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(CommonFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var functionTable = this.functionTable;\r\n var index = functionTable.length;\r\n if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) {\r\n // insert the trampoline if the function has optional parameters\r\n func = this.ensureTrampoline(func);\r\n }\r\n functionTable.push(func);\r\n func.functionTableIndex = index;\r\n return index;\r\n }\r\n\r\n // statements\r\n\r\n compileStatement(statement: Statement): ExpressionRef {\r\n var module = this.module;\r\n var stmt: ExpressionRef;\r\n switch (statement.kind) {\r\n case NodeKind.BLOCK: {\r\n stmt = this.compileBlockStatement(statement);\r\n break;\r\n }\r\n case NodeKind.BREAK: {\r\n stmt = this.compileBreakStatement(statement);\r\n break;\r\n }\r\n case NodeKind.CONTINUE: {\r\n stmt = this.compileContinueStatement(statement);\r\n break;\r\n }\r\n case NodeKind.DO: {\r\n stmt = this.compileDoStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EMPTY: {\r\n stmt = this.compileEmptyStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EXPRESSION: {\r\n stmt = this.compileExpressionStatement(statement);\r\n break;\r\n }\r\n case NodeKind.FOR: {\r\n stmt = this.compileForStatement(statement);\r\n break;\r\n }\r\n case NodeKind.IF: {\r\n stmt = this.compileIfStatement(statement);\r\n break;\r\n }\r\n case NodeKind.RETURN: {\r\n stmt = this.compileReturnStatement(statement);\r\n break;\r\n }\r\n case NodeKind.SWITCH: {\r\n stmt = this.compileSwitchStatement(statement);\r\n break;\r\n }\r\n case NodeKind.THROW: {\r\n stmt = this.compileThrowStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TRY: {\r\n stmt = this.compileTryStatement(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n stmt = this.compileVariableStatement(statement);\r\n if (!stmt) stmt = module.createNop();\r\n break;\r\n }\r\n case NodeKind.VOID: {\r\n stmt = this.compileVoidStatement(statement);\r\n break;\r\n }\r\n case NodeKind.WHILE: {\r\n stmt = this.compileWhileStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // type declarations must be top-level because function bodies are evaluated when\r\n // reachaable only.\r\n if (this.currentFunction == this.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 for (let i = 0; i < numDeclarations; ++i) {\r\n let declaration = declarations[i];\r\n let name = declaration.name.text;\r\n let type: Type | null = null;\r\n let initExpr: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = program.resolveType( // reports\r\n declaration.type,\r\n flow.contextualTypeArguments\r\n );\r\n if (!type) continue;\r\n if (declaration.initializer) {\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n } else if (declaration.initializer) { // infer type using void/NONE for proper literal inference\r\n initExpr = this.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 assert(false);\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n\r\n var currentType = this.currentType;\r\n if (conversionKind != ConversionKind.NONE && currentType != contextualType) {\r\n expr = this.convertExpression(expr, currentType, contextualType, conversionKind, wrapMode, expression);\r\n this.currentType = contextualType;\r\n } else if (wrapMode == WrapMode.WRAP) {\r\n expr = this.ensureSmallIntegerWrap(expr, currentType);\r\n }\r\n\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(\r\n expression: Expression,\r\n contextualType: Type,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.compileExpression(\r\n expression,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n wrapMode\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.precomputeExpressionRef(\r\n this.compileExpression(expression, contextualType, conversionKind, wrapMode)\r\n );\r\n }\r\n\r\n precomputeExpressionRef(expr: ExpressionRef): ExpressionRef {\r\n var module = this.module;\r\n var type = this.currentType;\r\n var nativeType = type.toNativeType();\r\n var funcRef = module.addTemporaryFunction(nativeType, null, expr);\r\n module.runPasses([ \"precompute\" ], funcRef);\r\n var ret = getFunctionBody(funcRef);\r\n module.removeTemporaryFunction();\r\n return ret;\r\n }\r\n\r\n convertExpression(\r\n expr: ExpressionRef,\r\n fromType: Type,\r\n toType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n assert(conversionKind != ConversionKind.NONE);\r\n var module = this.module;\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.VOID) {\r\n assert(toType.kind != TypeKind.VOID); // convertExpression should not be called with void -> void\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) 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.program.resolveType( // reports\r\n expression.toType,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!toType) return this.module.createUnreachable();\r\n return this.compileExpression(expression.expression, toType, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n private f32ModInstance: Function | null = null;\r\n private f64ModInstance: Function | null = null;\r\n private f32PowInstance: Function | null = null;\r\n private f64PowInstance: Function | null = null;\r\n\r\n compileBinaryExpression(\r\n expression: BinaryExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var left = expression.left;\r\n var right = expression.right;\r\n\r\n var leftExpr: ExpressionRef;\r\n var leftType: Type;\r\n var rightExpr: ExpressionRef;\r\n var rightType: Type;\r\n var commonType: Type | null;\r\n\r\n var expr: ExpressionRef;\r\n var compound = false;\r\n\r\n var operator = expression.operator;\r\n switch (operator) {\r\n case Token.LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n 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 = (prototype).resolve();\r\n }\r\n\r\n // Math.pow otherwise (result is f64)\r\n // TODO: should the result be converted back?\r\n } else {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n this.currentType,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(\r\n right,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n rightType = this.currentType;\r\n if (!(instance = this.f64PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64PowInstance = instance = (prototype).resolve();\r\n }\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case Token.SLASH_EQUALS: compound = true;\r\n case Token.SLASH: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n 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 = (prototype).resolve();\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let instance = this.f64ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64ModInstance = instance = (prototype).resolve();\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: compound = true;\r\n case Token.LESSTHAN_LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\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 currentFunction = this.currentFunction;\r\n var target = program.resolveExpression(expression, currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n\r\n // to compile just the value, we need to know the target's type\r\n var 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 prototype = (target).setterPrototype;\r\n if (prototype) {\r\n let instance = prototype.resolve(); // reports\r\n if (!instance) return this.module.createUnreachable();\r\n assert(instance.signature.parameterTypes.length == 1); // parser must guarantee this\r\n 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 (program.resolvedElementExpression) { // indexed access\r\n let isUnchecked = currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, (target).internalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (target).internalName\r\n );\r\n }\r\n return this.module.createUnreachable();\r\n }\r\n assert(indexedSet.signature.parameterTypes.length == 2); // parser must guarantee this\r\n 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.program.resolveExpression(expression, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let type = (target).type;\r\n 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.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let type = (target).type;\r\n this.currentType = tee ? type : Type.void;\r\n let nativeType = type.toNativeType();\r\n if (type.kind == TypeKind.BOOL) {\r\n // make sure bools are wrapped (usually are) when storing as 8 bits\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type);\r\n }\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let flow = currentFunction.flow;\r\n let tempLocal = currentFunction.getAndFreeTempLocal(\r\n type,\r\n !flow.canOverflow(valueWithCorrectType, type)\r\n );\r\n let tempLocalIndex = tempLocal.index;\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n return module.createBlock(null, [\r\n module.createSetLocal(tempLocalIndex, valueWithCorrectType),\r\n module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n module.createGetLocal(tempLocalIndex, nativeType),\r\n nativeType,\r\n (target).memoryOffset\r\n ),\r\n module.createGetLocal(tempLocalIndex, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n valueWithCorrectType,\r\n nativeType,\r\n (target).memoryOffset\r\n );\r\n }\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (target).setterPrototype;\r\n if (setterPrototype) {\r\n let setterInstance = setterPrototype.resolve(); // reports\r\n if (!setterInstance) return module.createUnreachable();\r\n\r\n // call just the setter if the return value isn't of interest\r\n if (!tee) {\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n return this.makeCallDirect(setterInstance, [ thisExpr, valueWithCorrectType ]);\r\n } else {\r\n return this.makeCallDirect(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n\r\n // otherwise call the setter first, then the getter\r\n let getterPrototype = (target).getterPrototype;\r\n assert(getterPrototype != null); // must have one if there is a setter\r\n let getterInstance = (getterPrototype).resolve(); // reports\r\n if (!getterInstance) return module.createUnreachable();\r\n let returnType = getterInstance.signature.returnType;\r\n let nativeReturnType = returnType.toNativeType();\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(returnType, false);\r\n let tempLocalIndex = tempLocal.index;\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ // set and remember the target\r\n module.createTeeLocal(tempLocalIndex, thisExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [ // get from remembered target\r\n module.createGetLocal(tempLocalIndex, nativeReturnType)\r\n ])\r\n ], nativeReturnType);\r\n } else {\r\n // note that this must be performed here because `resolved` is shared\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCallDirect(getterInstance)\r\n ], nativeReturnType);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, target.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.program.resolvedElementExpression;\r\n if (elementExpression) {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, target.internalName\r\n );\r\n this.currentType = tee ? indexedGet.signature.returnType : Type.void;\r\n return module.createUnreachable();\r\n }\r\n let targetType = (target).type;\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let elementExpr = this.compileExpression(\r\n elementExpression,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let tempLocalTarget = currentFunction.getTempLocal(targetType, false);\r\n let tempLocalElement = currentFunction.getAndFreeTempLocal(this.currentType, false);\r\n let returnType = indexedGet.signature.returnType;\r\n this.currentFunction.freeTempLocal(tempLocalTarget);\r\n return module.createBlock(null, [\r\n this.makeCallDirect(indexedSet, [\r\n module.createTeeLocal(tempLocalTarget.index, thisExpr),\r\n module.createTeeLocal(tempLocalElement.index, elementExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(indexedGet, [\r\n module.createGetLocal(tempLocalTarget.index, tempLocalTarget.type.toNativeType()),\r\n module.createGetLocal(tempLocalElement.index, tempLocalElement.type.toNativeType())\r\n ])\r\n ], returnType.toNativeType());\r\n } else {\r\n return this.makeCallDirect(indexedSet, [\r\n thisExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n }\r\n // fall-through\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var target = this.program.resolveExpression(expression.expression, currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n var signature: Signature | null;\r\n var indexArg: ExpressionRef;\r\n switch (target.kind) {\r\n\r\n // direct call: concrete function\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let prototype = target;\r\n let typeArguments = expression.typeArguments;\r\n\r\n // builtins handle present respectively omitted type arguments on their own\r\n if (prototype.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return this.compileCallExpressionBuiltin(prototype, expression, contextualType);\r\n }\r\n\r\n let instance: Function | null = null;\r\n\r\n // resolve generic call if type arguments have been provided\r\n if (typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.expression.range, prototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n instance = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n\r\n // infer generic call if type arguments have been omitted\r\n } else if (prototype.is(CommonFlags.GENERIC)) {\r\n let inferredTypes = new Map();\r\n let typeParameters = assert(prototype.declaration.typeParameters);\r\n let numTypeParameters = typeParameters.length;\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n inferredTypes.set(typeParameters[i].name.text, null);\r\n }\r\n // let numInferred = 0;\r\n let parameterTypes = prototype.declaration.signature.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.program.resolveType(\r\n parameterTypes[i].type,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n true\r\n );\r\n if (!concreteType) return module.createUnreachable();\r\n argumentExprs[i] = this.compileExpression(\r\n argumentExpression,\r\n concreteType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n let resolvedTypeArguments = new Array(numTypeParameters);\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n let inferredType = assert(inferredTypes.get(typeParameters[i].name.text)); // TODO\r\n resolvedTypeArguments[i] = inferredType;\r\n }\r\n instance = prototype.resolve(\r\n resolvedTypeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n return this.makeCallDirect(instance, argumentExprs);\r\n // TODO: this skips inlining because inlining requires compiling its temporary locals in\r\n // the scope of the inlined flow. might need another mechanism to lock temp. locals early,\r\n // so inlining can be performed in `makeCallDirect` instead?\r\n\r\n // otherwise resolve the non-generic call as usual\r\n } else {\r\n instance = prototype.resolve(\r\n null,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n }\r\n if (!instance) return this.module.createUnreachable();\r\n\r\n // compile 'this' expression if an instance method\r\n let thisExpr: ExpressionRef = 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n thisExpr = this.compileExpressionRetainType(\r\n assert(this.program.resolvedThisExpression),\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n return this.compileCallDirect(\r\n instance,\r\n expression.arguments,\r\n expression,\r\n thisExpr,\r\n instance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n // indirect call: index argument with signature (non-generic, can't be inlined)\r\n case ElementKind.LOCAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetLocal((target).index, NativeType.I32);\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetGlobal((target).internalName, (target).type.toNativeType());\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (signature = type.signatureReference) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n indexArg = module.createLoad(\r\n 4,\r\n false,\r\n thisExpr,\r\n NativeType.I32,\r\n (target).memoryOffset\r\n );\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FUNCTION_TARGET: {\r\n signature = (target).signature;\r\n indexArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n break;\r\n }\r\n case ElementKind.PROPERTY: // TODO\r\n\r\n // not supported\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n return this.compileCallIndirect(\r\n signature,\r\n indexArg,\r\n expression.arguments,\r\n expression\r\n );\r\n }\r\n\r\n private compileCallExpressionBuiltin(\r\n prototype: FunctionPrototype,\r\n expression: CallExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var expr = compileBuiltinCall( // reports\r\n this,\r\n prototype,\r\n prototype.resolveBuiltinTypeArguments(\r\n expression.typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n ),\r\n expression.arguments,\r\n contextualType,\r\n expression\r\n );\r\n if (!expr) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n return expr;\r\n }\r\n\r\n /**\r\n * Checks that a call with the given number as arguments can be performed according to the\r\n * specified signature.\r\n */\r\n checkCallSignature(\r\n signature: Signature,\r\n numArguments: i32,\r\n hasThis: bool,\r\n reportNode: Node\r\n ): bool {\r\n\r\n // cannot call an instance method without a `this` argument (TODO: `.call`?)\r\n var thisType = signature.thisType;\r\n if (hasThis != (thisType != null)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported, // TODO: better message?\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n // not yet implemented (TODO: maybe some sort of an unmanaged/lightweight array?)\r\n var hasRest = signature.hasRest;\r\n if (hasRest) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n var minimum = signature.requiredParameters;\r\n var maximum = signature.parameterTypes.length;\r\n\r\n // must at least be called with required arguments\r\n if (numArguments < minimum) {\r\n this.error(\r\n minimum < maximum\r\n ? DiagnosticCode.Expected_at_least_0_arguments_but_got_1\r\n : DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, minimum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n // must not be called with more than the maximum arguments\r\n if (numArguments > maximum && !hasRest) {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, maximum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Compiles a direct call to a concrete function. */\r\n compileCallDirect(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0,\r\n inline: bool = false\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // Inline if explicitly requested\r\n if (inline) {\r\n assert(!instance.is(CommonFlags.TRAMPOLINE)); // doesn't make sense\r\n return this.compileCallInlineUnchecked(instance, argumentExpressions, reportNode, thisArg);\r\n }\r\n\r\n // Otherwise compile to just a call\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallDirect(instance, operands);\r\n }\r\n\r\n // Depends on being pre-checked in compileCallDirect\r\n private compileCallInlineUnchecked(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n var declaration = instance.prototype.declaration;\r\n\r\n // Create an empty child flow with its own scope and mark it for inlining\r\n var previousFlow = currentFunction.flow;\r\n var returnLabel = instance.internalName + \"|inlined.\" + (instance.nextInlineId++).toString(10);\r\n var returnType = instance.signature.returnType;\r\n var flow = Flow.create(currentFunction);\r\n flow.set(FlowFlags.INLINE_CONTEXT);\r\n flow.returnLabel = returnLabel;\r\n flow.returnType = returnType;\r\n flow.contextualTypeArguments = instance.contextualTypeArguments;\r\n\r\n // Convert provided call arguments to temporary locals. It is important that these are compiled\r\n // here, with their respective locals being blocked. There is no 'makeCallInline'.\r\n var body = [];\r\n if (thisArg) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n if (getExpressionId(thisArg) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(thisArg),\r\n (parent).type,\r\n \"this\"\r\n );\r\n } else {\r\n let thisLocal = flow.addScopedLocal((parent).type, \"this\", false);\r\n body.push(\r\n module.createSetLocal(thisLocal.index, thisArg)\r\n );\r\n }\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i) {\r\n let paramExpr = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(paramExpr) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(paramExpr),\r\n parameterTypes[i],\r\n signature.getParameterName(i)\r\n );\r\n // inherits wrap status\r\n } else {\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(paramExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, paramExpr)\r\n );\r\n }\r\n }\r\n\r\n // Compile optional parameter initializers in the scope of the inlined flow\r\n currentFunction.flow = flow;\r\n var numParameters = signature.parameterTypes.length;\r\n for (let i = numArguments; i < numParameters; ++i) {\r\n let initExpr = this.compileExpression(\r\n assert(declaration.signature.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.program.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n switch (target.kind) {\r\n case ElementKind.CLASS: {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n let thisArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.compileCallDirect(indexedGet, [\r\n expression.elementExpression\r\n ], expression, thisArg);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var name = declaration.name;\r\n var simpleName = (name.text.length\r\n ? name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var currentFunction = this.currentFunction;\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n currentFunction.internalName + INNER_DELIMITER + simpleName,\r\n declaration,\r\n null,\r\n DecoratorFlags.NONE\r\n );\r\n var flow = currentFunction.flow;\r\n var instance = this.compileFunctionUsingTypeArguments(\r\n prototype,\r\n [],\r\n flow.contextualTypeArguments,\r\n flow,\r\n declaration\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = instance.signature.type; // TODO: get cached type?\r\n // NOTE that, in order to make this work in every case, the function must be represented by a\r\n // value, so we add it and rely on the optimizer to figure out where it can be called directly.\r\n var index = this.ensureFunctionTableEntry(instance); // reports\r\n return index < 0\r\n ? this.module.createUnreachable()\r\n : this.module.createI32(index);\r\n }\r\n\r\n /**\r\n * Compiles an identifier in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compileIdentifierExpression(\r\n expression: IdentifierExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // check special keywords first\r\n switch (expression.kind) {\r\n case NodeKind.NULL: {\r\n let options = this.options;\r\n if (!contextualType.classReference) {\r\n this.currentType = options.usizeType;\r\n }\r\n return options.isWasm64\r\n ? module.createI64(0)\r\n : module.createI32(0);\r\n }\r\n case NodeKind.TRUE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(1);\r\n }\r\n case NodeKind.FALSE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\r\n case NodeKind.THIS: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n this.currentType = scopedThis.type;\r\n return module.createGetLocal(scopedThis.index, scopedThis.type.toNativeType());\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisType = (parent).type;\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n if (!flow.is(FlowFlags.ALLOCATES)) {\r\n flow.set(FlowFlags.ALLOCATES);\r\n // must be conditional because `this` could have been provided by a derived class\r\n this.currentType = thisType;\r\n return module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, expression)\r\n );\r\n }\r\n }\r\n this.currentType = thisType;\r\n return module.createGetLocal(0, thisType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n case NodeKind.SUPER: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n let scopedThisClass = assert(scopedThis.type.classReference);\r\n let base = scopedThisClass.base;\r\n if (base) {\r\n this.currentType = base.type;\r\n return module.createGetLocal(scopedThis.index, base.type.toNativeType());\r\n }\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let base = (parent).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return module.createGetLocal(0, superType.toNativeType());\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var target = this.program.resolveIdentifier( // reports\r\n expression,\r\n 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 = (target).resolve(\r\n null,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!(instance && this.compileFunction(instance))) return module.createUnreachable();\r\n let index = this.ensureFunctionTableEntry(instance);\r\n this.currentType = instance.signature.type;\r\n return this.module.createI32(index);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n 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.program.resolveType(expression.isType);\r\n this.currentType = Type.bool;\r\n if (!isType) return module.createUnreachable();\r\n return type.is(TypeFlags.NULLABLE) && !isType.is(TypeFlags.NULLABLE)\r\n ? type.nonNullableType.isAssignableTo(isType)\r\n ? module.createBinary( // not precomputeable\r\n type.is(TypeFlags.LONG)\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n expr,\r\n type.toNativeZero(module)\r\n )\r\n : module.createI32(0)\r\n : module.createI32(type.isAssignableTo(isType, true) ? 1 : 0);\r\n }\r\n\r\n compileLiteralExpression(\r\n expression: LiteralExpression,\r\n contextualType: Type,\r\n implicitNegate: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n switch (expression.literalKind) {\r\n case LiteralKind.ARRAY: {\r\n assert(!implicitNegate);\r\n let classType = contextualType.classReference;\r\n if (\r\n classType &&\r\n classType.prototype == this.program.arrayPrototype\r\n ) {\r\n return this.compileArrayLiteral(\r\n assert(classType.typeArguments)[0],\r\n (expression).elementExpressions,\r\n expression\r\n );\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n case LiteralKind.FLOAT: {\r\n let floatValue = (expression).value;\r\n if (implicitNegate) {\r\n floatValue = -floatValue;\r\n }\r\n if (contextualType == Type.f32) {\r\n return module.createF32(floatValue);\r\n }\r\n this.currentType = Type.f64;\r\n return module.createF64(floatValue);\r\n }\r\n case LiteralKind.INTEGER: {\r\n let intValue = (expression).value;\r\n if (implicitNegate) {\r\n intValue = i64_sub(\r\n i64_new(0),\r\n intValue\r\n );\r\n }\r\n switch (contextualType.kind) {\r\n\r\n // compile to contextualType if matching\r\n\r\n case TypeKind.I8: {\r\n if (i64_is_i8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (i64_is_u8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (i64_is_i16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (i64_is_u16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (i64_is_bool(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.USIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.F32: {\r\n if (i64_is_f32(intValue)) return module.createF32(i64_to_f32(intValue));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n if (i64_is_f64(intValue)) return module.createF64(i64_to_f64(intValue));\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n break; // compiles to best fitting type below, being dropped\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise compile to best fitting native type\r\n\r\n if (i64_is_i32(intValue)) {\r\n this.currentType = Type.i32;\r\n return module.createI32(i64_low(intValue));\r\n } else if (i64_is_u32(intValue)) {\r\n this.currentType = Type.u32;\r\n return module.createI32(i64_low(intValue));\r\n } else {\r\n this.currentType = Type.i64;\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n }\r\n case LiteralKind.STRING: {\r\n assert(!implicitNegate);\r\n return this.compileStaticString((expression).value);\r\n }\r\n // case LiteralKind.OBJECT:\r\n // case LiteralKind.REGEXP:\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n\r\n compileStaticString(stringValue: string): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var stringSegments = this.stringSegments;\r\n\r\n var stringSegment: MemorySegment | null = stringSegments.get(stringValue);\r\n if (!stringSegment) {\r\n let stringLength = stringValue.length;\r\n let stringBuffer = new Uint8Array(4 + stringLength * 2);\r\n stringBuffer[0] = stringLength & 0xff;\r\n stringBuffer[1] = (stringLength >>> 8) & 0xff;\r\n stringBuffer[2] = (stringLength >>> 16) & 0xff;\r\n stringBuffer[3] = (stringLength >>> 24) & 0xff;\r\n for (let i = 0; i < stringLength; ++i) {\r\n stringBuffer[4 + i * 2] = stringValue.charCodeAt(i) & 0xff;\r\n stringBuffer[5 + i * 2] = (stringValue.charCodeAt(i) >>> 8) & 0xff;\r\n }\r\n stringSegment = this.addMemorySegment(stringBuffer, options.usizeType.byteSize);\r\n stringSegments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n var stringType = this.program.typesLookup.get(\"string\");\r\n this.currentType = stringType ? stringType : options.usizeType;\r\n if (options.isWasm64) {\r\n return module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n }\r\n assert(i64_is_i32(stringOffset));\r\n return module.createI32(i64_low(stringOffset));\r\n }\r\n\r\n compileArrayLiteral(elementType: Type, expressions: (Expression | null)[], reportNode: Node): ExpressionRef {\r\n var isStatic = true;\r\n var module = this.module;\r\n\r\n // obtain the array type\r\n var arrayPrototype = assert(this.program.arrayPrototype);\r\n if (!arrayPrototype || arrayPrototype.kind != ElementKind.CLASS_PROTOTYPE) return module.createUnreachable();\r\n var arrayInstance = (arrayPrototype).resolve([ elementType ]);\r\n if (!arrayInstance) return module.createUnreachable();\r\n var arrayType = arrayInstance.type;\r\n\r\n var elementCount = expressions.length;\r\n if (elementCount) { // non-empty static or dynamic\r\n let nativeElementType = elementType.toNativeType();\r\n let values: usize;\r\n let byteLength: usize;\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n values = changetype(new Int32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n values = changetype(new Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n values = changetype(new Float32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n values = changetype(new Float64Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // precompute value expressions\r\n let exprs = new Array(elementCount);\r\n let expr: BinaryenExpressionRef;\r\n for (let i = 0; i < elementCount; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : elementType.toNativeZero(module);\r\n if (isStatic) {\r\n expr = this.precomputeExpressionRef(exprs[i]);\r\n if (getExpressionId(expr) == ExpressionId.Const) {\r\n assert(getExpressionType(expr) == nativeElementType);\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n changetype(values)[i] = getConstValueI32(expr);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n changetype(values)[i] = i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n changetype(values)[i] = getConstValueF32(expr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n changetype(values)[i] = getConstValueF64(expr);\r\n break;\r\n }\r\n default: assert(false); // checked above\r\n }\r\n } else {\r\n // TODO: emit a warning if declared 'const'\r\n // if (isConst) {\r\n // this.warn(\r\n // DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n // reportNode.range\r\n // );\r\n // }\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n let usizeTypeSize = this.options.usizeType.byteSize;\r\n if (isStatic) { // non-empty, all elements can be precomputed\r\n\r\n // Create a combined static memory segment composed of:\r\n // Array struct + ArrayBuffer struct + aligned ArrayBuffer data\r\n\r\n let arraySize = usizeTypeSize + 4; // buffer_ & length_\r\n let bufferHeaderSize = (4 + 7) & ~7; // aligned byteLength (8)\r\n let bufferTotalSize = 1 << (32 - clz(byteLength + bufferHeaderSize - 1)); // see internals\r\n let data = new Uint8Array(arraySize + bufferTotalSize);\r\n let segment = this.addMemorySegment(data);\r\n let offset = 0;\r\n\r\n // write Array struct\r\n if (usizeTypeSize == 8) {\r\n writeI64(i64_add(segment.offset, i64_new(arraySize)), data, offset); // buffer_ @ segment[arSize]\r\n offset += 8;\r\n } else {\r\n assert(i64_high(segment.offset) == 0);\r\n writeI32(i64_low(segment.offset) + arraySize, data, offset); // buffer_ @ segment[arSize]\r\n offset += 4;\r\n }\r\n writeI32(elementCount, data, offset); // length_\r\n offset += 4;\r\n assert(offset == arraySize);\r\n\r\n // write ArrayBuffer struct\r\n writeI32(byteLength, data, offset);\r\n offset += bufferHeaderSize; // incl. alignment\r\n\r\n // write ArrayBuffer data\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.I64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n case NativeType.F32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.F64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n assert(offset <= arraySize + bufferTotalSize);\r\n\r\n this.currentType = arrayType;\r\n return usizeTypeSize == 8\r\n ? module.createI64(\r\n i64_low(segment.offset),\r\n i64_high(segment.offset)\r\n )\r\n : module.createI32(\r\n i64_low(segment.offset)\r\n );\r\n\r\n } else { // non-empty, some elements can't be precomputed\r\n\r\n this.currentType = arrayType;\r\n let setter = arrayInstance.lookupOverload(OperatorKind.INDEXED_SET, true);\r\n if (!setter) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n reportNode.range, arrayInstance.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let nativeArrayType = arrayType.toNativeType();\r\n let currentFunction = this.currentFunction;\r\n let tempLocal = currentFunction.getTempLocal(arrayType, false);\r\n let stmts = new Array(2 + elementCount);\r\n let index = 0;\r\n stmts[index++] = module.createSetLocal(tempLocal.index,\r\n this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(elementCount)\r\n ])\r\n );\r\n for (let i = 0; i < elementCount; ++i) {\r\n stmts[index++] = this.makeCallDirect(setter, [\r\n module.createGetLocal(tempLocal.index, nativeArrayType), // this\r\n module.createI32(i),\r\n exprs[i]\r\n ]);\r\n }\r\n assert(index + 1 == stmts.length);\r\n stmts[index] = module.createGetLocal(tempLocal.index, nativeArrayType);\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = arrayType;\r\n return module.createBlock(null, stmts, nativeArrayType);\r\n }\r\n\r\n } else { // empty, TBD: cache this somehow?\r\n this.currentType = arrayType;\r\n return this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(0)\r\n ]);\r\n }\r\n }\r\n\r\n compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var currentFunction = this.currentFunction;\r\n\r\n // obtain the class being instantiated\r\n var target = this.program.resolveExpression( // reports\r\n expression.expression,\r\n currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n if (target.kind != ElementKind.CLASS_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature,\r\n expression.expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n var classPrototype = target;\r\n var classInstance: 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 = classPrototype.resolve(\r\n classReference.typeArguments,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n } else {\r\n classInstance = classPrototype.resolveUsingTypeArguments( // reports\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 program = this.program;\r\n var module = this.module;\r\n\r\n var target = program.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: { // static property\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // enum value\r\n let parent = (target).parent;\r\n assert(parent !== null && parent.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(parent)) {\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return module.createI32((target).constantValue);\r\n }\r\n return module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FIELD: { // instance field\r\n let thisExpression = assert(program.resolvedThisExpression);\r\n assert((target).memoryOffset >= 0);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = (target).type;\r\n return module.createLoad(\r\n (target).type.byteSize,\r\n (target).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n thisExpr,\r\n (target).type.toNativeType(),\r\n (target).memoryOffset\r\n );\r\n }\r\n case ElementKind.PROPERTY: { // instance property (here: getter)\r\n let prototype = (target).getterPrototype;\r\n if (prototype) {\r\n let instance = prototype.resolve(null); // reports\r\n if (!instance) return module.createUnreachable();\r\n let signature = instance.signature;\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n 0,\r\n instance.is(CommonFlags.INSTANCE),\r\n propertyAccess\r\n )) {\r\n return module.createUnreachable();\r\n }\r\n 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(program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess, thisExpr, 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 IdentifierExpression,\r\n StringLiteralExpression,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DecoratorNode,\r\n DoStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportImportStatement,\r\n ExportMember,\r\n ExportStatement,\r\n ExpressionStatement,\r\n ForStatement,\r\n FunctionExpression,\r\n FunctionDeclaration,\r\n IfStatement,\r\n ImportDeclaration,\r\n ImportStatement,\r\n NamespaceDeclaration,\r\n ParameterNode,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameterNode,\r\n VariableStatement,\r\n VariableDeclaration,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n mangleInternalPath,\r\n nodeIsCallable,\r\n nodeIsGenericCallable,\r\n InterfaceDeclaration\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 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 expr: Expression | null = null;\r\n\r\n if (token == Token.NULL) {\r\n return Node.createNullExpression(tn.range());\r\n }\r\n if (token == Token.TRUE) {\r\n return Node.createTrueExpression(tn.range());\r\n }\r\n if (token == Token.FALSE) {\r\n return Node.createFalseExpression(tn.range());\r\n }\r\n\r\n var precedence = determinePrecedenceStart(token);\r\n if (precedence != Precedence.INVALID) {\r\n let operand: Expression | null;\r\n\r\n // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions)\r\n\r\n // NewExpression\r\n if (token == Token.NEW) {\r\n operand = this.parseExpression(tn, Precedence.CALL);\r\n if (!operand) return null;\r\n if (operand.kind == NodeKind.CALL) {\r\n return Node.createNewExpression(\r\n (operand).expression,\r\n (operand).typeArguments,\r\n (operand).arguments,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n } else {\r\n operand = this.parseExpression(tn, 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 switch (token) {\r\n\r\n // ParenthesizedExpression\r\n // FunctionExpression\r\n case Token.OPENPAREN: {\r\n\r\n // determine whether this is a function expression\r\n if (tn.skip(Token.CLOSEPAREN)) { // must be a function expression (fast route)\r\n return this.parseFunctionExpressionCommon(\r\n tn,\r\n Node.createEmptyIdentifierExpression(tn.range(startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n let state = tn.mark();\r\n let again = true;\r\n do {\r\n switch (tn.next(IdentifierHandling.PREFER)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT: {\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n switch (tn.next()) {\r\n\r\n // if we got here, check for arrow\r\n case Token.CLOSEPAREN: {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n again = false;\r\n break;\r\n }\r\n // fall-through\r\n }\r\n // function expression\r\n case Token.COLON: { // type annotation\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.QUESTION: // optional parameter or ternary\r\n case Token.COMMA: {\r\n break; // continue\r\n }\r\n // parenthesized expression\r\n // case Token.EQUALS: // missing type annotation for simplicity\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n // parenthesized expression\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n } while (again);\r\n tn.reset(state);\r\n\r\n // parse parenthesized\r\n expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return Node.createParenthesizedExpression(expr, tn.range(startPos, tn.pos));\r\n }\r\n // ArrayLiteralExpression\r\n case Token.OPENBRACKET: {\r\n let elementExpressions = new Array();\r\n while (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (tn.peek() == Token.COMMA) {\r\n expr = null; // omitted\r\n } else {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n }\r\n elementExpressions.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACKET)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n }\r\n // AssertionExpression (unary prefix)\r\n case Token.LESSTHAN: {\r\n let toType = this.parseType(tn);\r\n if (!toType) return null;\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n expr = this.parseExpression(tn, Precedence.CALL);\r\n if (!expr) return null;\r\n return Node.createAssertionExpression(\r\n AssertionKind.PREFIX,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.IDENTIFIER: {\r\n return Node.createIdentifierExpression(tn.readIdentifier(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.THIS: {\r\n return Node.createThisExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.CONSTRUCTOR: {\r\n return Node.createConstructorExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.SUPER: {\r\n return Node.createSuperExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.STRINGLITERAL: {\r\n return Node.createStringLiteralExpression(tn.readString(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.INTEGERLITERAL: {\r\n return Node.createIntegerLiteralExpression(tn.readInteger(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.FLOATLITERAL: {\r\n return Node.createFloatLiteralExpression(tn.readFloat(), tn.range(startPos, tn.pos));\r\n }\r\n // RegexpLiteralExpression\r\n // note that this also continues on invalid ones so the surrounding AST remains intact\r\n case Token.SLASH: {\r\n let regexpPattern = tn.readRegexpPattern(); // also reports\r\n if (!tn.skip(Token.SLASH)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"/\"\r\n );\r\n return null;\r\n }\r\n return Node.createRegexpLiteralExpression(\r\n regexpPattern,\r\n tn.readRegexpFlags(), // also reports\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.FUNCTION: {\r\n return this.parseFunctionExpression(tn);\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Expression_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): CommonTypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n var state = tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n if (tn.peek() === Token.GREATERTHAN) {\r\n break;\r\n }\r\n let type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset(state);\r\n return null;\r\n }\r\n typeArguments.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n if (tn.skip(Token.GREATERTHAN) && tn.skip(Token.OPENPAREN)) {\r\n return typeArguments;\r\n }\r\n tn.reset(state);\r\n return null;\r\n }\r\n\r\n parseArguments(\r\n tn: Tokenizer\r\n ): Expression[] | null {\r\n\r\n // at '(': (Expression (',' Expression)*)? ')'\r\n\r\n var args = new Array();\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return args;\r\n }\r\n\r\n parseExpression(\r\n tn: Tokenizer,\r\n precedence: Precedence = 0\r\n ): Expression | null {\r\n\r\n var expr = this.parseExpressionStart(tn);\r\n if (!expr) return null;\r\n var startPos = expr.range.start;\r\n\r\n // CallExpression?\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 ? Precedence.COMMA + 1 : 0);\r\n if (!ifElse) return null;\r\n expr = Node.createTernaryExpression(\r\n expr,\r\n ifThen,\r\n ifElse,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // CommaExpression\r\n case Token.COMMA: {\r\n let commaExprs: Expression[] = [ expr ];\r\n do {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n commaExprs.push(expr);\r\n } while (tn.skip(Token.COMMA));\r\n expr = Node.createCommaExpression(commaExprs, tn.range(startPos, tn.pos));\r\n break;\r\n }\r\n default: {\r\n next = this.parseExpression(tn,\r\n isRightAssociative(token)\r\n ? nextPrecedence\r\n : nextPrecedence + 1\r\n );\r\n if (!next) return null;\r\n\r\n // PropertyAccessExpression\r\n if (token == Token.DOT) {\r\n if (next.kind == NodeKind.IDENTIFIER) {\r\n expr = Node.createPropertyAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else if (next.kind == NodeKind.CALL) { // join\r\n let propertyCall = next;\r\n if (propertyCall.expression.kind == NodeKind.IDENTIFIER) {\r\n propertyCall.expression = Node.createPropertyAccessExpression(\r\n expr,\r\n propertyCall.expression,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n propertyCall.expression.range\r\n );\r\n return null;\r\n }\r\n expr = propertyCall;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n next.range\r\n );\r\n return null;\r\n }\r\n\r\n // BinaryExpression\r\n } else {\r\n expr = Node.createBinaryExpression(token, expr, next, tn.range(startPos, tn.pos));\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Skips over a statement on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n skipStatement(tn: Tokenizer): void {\r\n tn.peek(true);\r\n if (tn.nextTokenOnNewLine) tn.next(); // if reset() to the previous line\r\n do {\r\n let nextToken = tn.peek(true);\r\n if (\r\n nextToken == Token.ENDOFFILE || // next step should handle this\r\n nextToken == Token.SEMICOLON // end of the statement for sure\r\n ) {\r\n tn.next();\r\n break;\r\n }\r\n if (tn.nextTokenOnNewLine) break; // end of the statement maybe\r\n switch (tn.next()) {\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n break;\r\n }\r\n case Token.STRINGLITERAL: {\r\n tn.readString();\r\n break;\r\n }\r\n case Token.INTEGERLITERAL: {\r\n tn.readInteger();\r\n break;\r\n }\r\n case Token.FLOATLITERAL: {\r\n tn.readFloat();\r\n break;\r\n }\r\n }\r\n } while (true);\r\n }\r\n\r\n /** Skips over a block on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n // skipBlock(tn: Tokenizer): void {\r\n // var depth = 0;\r\n // var token: Token;\r\n // do {\r\n // token = tn.next();\r\n // if (token == Token.OPENBRACE) {\r\n // ++depth;\r\n // } else if (token == Token.CLOSEBRACE) {\r\n // if (depth) --depth;\r\n // if (!depth) break; // done\r\n // }\r\n // } while (token != Token.ENDOFFILE);\r\n // }\r\n}\r\n\r\n/** Operator precedence from least to largest. */\r\nexport const enum Precedence {\r\n COMMA,\r\n SPREAD,\r\n YIELD,\r\n ASSIGNMENT,\r\n CONDITIONAL,\r\n LOGICAL_OR,\r\n LOGICAL_AND,\r\n BITWISE_OR,\r\n BITWISE_XOR,\r\n BITWISE_AND,\r\n EQUALITY,\r\n RELATIONAL,\r\n SHIFT,\r\n ADDITIVE,\r\n MULTIPLICATIVE,\r\n EXPONENTIATED,\r\n UNARY_PREFIX,\r\n UNARY_POSTFIX,\r\n CALL,\r\n MEMBERACCESS,\r\n GROUPING,\r\n INVALID = -1\r\n}\r\n\r\n/** Determines the precedence of a starting token. */\r\nfunction determinePrecedenceStart(kind: Token): 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 default: return Precedence.INVALID;\r\n }\r\n}\r\n\r\n/** Determines the precende of a non-starting token. */\r\nfunction determinePrecedence(kind: Token): 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 default: return Precedence.INVALID;\r\n }\r\n}\r\n\r\n/** Determines whether a non-starting token is right associative. */\r\nfunction isRightAssociative(kind: Token): bool {\r\n switch (kind) {\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS:\r\n case Token.QUESTION:\r\n case Token.ASTERISK_ASTERISK: return true;\r\n default: return false;\r\n }\r\n}\r\n","/**\r\n * Definition builders for WebIDL and TypeScript.\r\n * @module definitions\r\n *//***/\r\n\r\nimport {\r\n 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\n/** Compiles a call to a built-in function. */\r\nexport function compileCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n\r\n var arg0: ExpressionRef,\r\n arg1: ExpressionRef,\r\n arg2: ExpressionRef,\r\n ret: ExpressionRef;\r\n\r\n // NOTE that some implementations below make use of the select expression where straight-forward.\r\n // whether worth or not should probably be tested once/ it's known if/how embedders handle it.\r\n // search: createSelect\r\n\r\n switch (prototype.internalName) {\r\n\r\n // types\r\n\r\n case \"isInteger\": { // isInteger() / isInteger(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.INTEGER) && !type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isFloat\": { // isFloat() / isFloat(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.FLOAT)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isSigned\": { // isSigned() / isSigned(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.SIGNED)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isReference\": { // isReference() / isReference(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n compiler.currentType = Type.bool;\r\n return type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isString\": { // isString() / isString(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n if (classType) {\r\n let stringInstance = compiler.program.stringInstance;\r\n if (stringInstance && classType.isAssignableTo(stringInstance)) return module.createI32(1);\r\n }\r\n return module.createI32(0);\r\n }\r\n case \"isArray\": { // isArray() / isArray(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n return classType != null && classType.lookupOverload(OperatorKind.INDEXED_GET) != null\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n\r\n // math\r\n\r\n case \"clz\": { // clz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ClzI64\r\n : UnaryOp.ClzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.ClzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ctz\": { // ctz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.NONE, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.CtzI64\r\n : UnaryOp.CtzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.CtzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"popcnt\": { // popcnt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.PopcntI64\r\n : UnaryOp.PopcntI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.PopcntI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"rotl\": { // rotl(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotlI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotlI64\r\n : BinaryOp.RotlI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotlI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflows\r\n }\r\n case \"rotr\": { // rotr(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotrI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotrI64\r\n : BinaryOp.RotrI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotrI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflowws\r\n }\r\n case \"abs\": { // abs(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n // possibly overflows, e.g. abs(-128) == 128\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createSelect( // x > 0 ? x : 0-x\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI32, // ifFalse\r\n module.createI32(0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32)\r\n ),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n module.createI32(0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n compiler.options.usizeType.toNativeZero(module),\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n ),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType),\r\n compiler.options.usizeType.toNativeZero(module)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI64,\r\n module.createI64(0, 0),\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n ),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n module.createI64(0, 0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.BOOL: {\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.AbsF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.AbsF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"max\": { // max(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MaxF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MaxF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"min\": { // min(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MinF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MinF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ceil\": { // ceil(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.CeilF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.CeilF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"floor\": { // floor(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.FloorF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.FloorF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"copysign\": { // copysign(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) { // TODO: does an integer version make sense?\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.CopysignF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.CopysignF64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"nearest\": { // nearest(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.NearestF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.NearestF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"reinterpret\": { // reinterpret(value: *) -> T\r\n if (operands.length != 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (typeArguments[0].kind) {\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF32, arg0);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF64, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (typeArguments[0].is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.f64\r\n : Type.f32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ReinterpretF64\r\n : UnaryOp.ReinterpretF32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI64, arg0);\r\n break;\r\n }\r\n default: { // small integers and void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return ret;\r\n }\r\n case \"sqrt\": { // sqrt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) { // TODO: integer versions (that return f64 or convert)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.SqrtF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.SqrtF64, arg0);\r\n break;\r\n }\r\n // case TypeKind.VOID:\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"trunc\": { // trunc(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments && typeArguments.length) {\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n // TODO: truncate to contextual type directly (if not void etc.)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.TruncF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.TruncF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n // memory access\r\n\r\n case \"load\": { // load(offset: usize, constantOffset?: usize) -> *\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let offset = operands.length == 2 ? evaluateConstantOffset(compiler, operands[1]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return module.createLoad(\r\n typeArguments[0].byteSize,\r\n typeArguments[0].is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n arg0,\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n contextualType.size > typeArguments[0].size\r\n ? (compiler.currentType = contextualType).toNativeType()\r\n : (compiler.currentType = typeArguments[0]).toNativeType(),\r\n offset\r\n );\r\n }\r\n case \"store\": { // store(offset: usize, value: *, constantOffset?: usize) -> void\r\n compiler.currentType = Type.void;\r\n if (operands.length < 2 || operands.length > 3) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n typeArguments[0],\r\n typeArguments[0].is(TypeFlags.INTEGER)\r\n ? ConversionKind.NONE // no need to convert to small int (but now might result in a float)\r\n : ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let type: Type;\r\n if (\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n (\r\n !compiler.currentType.is(TypeFlags.INTEGER) || // float to int\r\n compiler.currentType.size < typeArguments[0].size // int to larger int (clear garbage bits)\r\n )\r\n ) {\r\n arg1 = compiler.convertExpression(\r\n arg1,\r\n compiler.currentType, typeArguments[0],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE, // still clears garbage bits\r\n operands[1]\r\n );\r\n type = typeArguments[0];\r\n } else {\r\n type = compiler.currentType;\r\n }\r\n let offset = operands.length == 3 ? evaluateConstantOffset(compiler, operands[2]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n return module.createStore(typeArguments[0].byteSize, arg0, arg1, type.toNativeType(), offset);\r\n }\r\n case \"sizeof\": { // sizeof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(byteSize);\r\n } else {\r\n ret = module.createI64(byteSize, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(byteSize, 0);\r\n } else {\r\n ret = module.createI32(byteSize);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"alignof\": { // alignof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n let alignLog2: i32;\r\n switch (byteSize) {\r\n case 1: { alignLog2 = 0; break; }\r\n case 2: { alignLog2 = 1; break; }\r\n case 4: { alignLog2 = 2; break; }\r\n case 8: { alignLog2 = 3; break; }\r\n default: { assert(false); return module.createUnreachable(); }\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(alignLog2);\r\n } else {\r\n ret = module.createI64(alignLog2, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(alignLog2, 0);\r\n } else {\r\n ret = module.createI32(alignLog2);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"offsetof\": { // offsetof(fieldName?: string) -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length > 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let classType = typeArguments[0].classReference;\r\n if (!classType) {\r\n compiler.error( // TODO: better error\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let offset: i32;\r\n if (operands.length) {\r\n if (\r\n operands[0].kind != NodeKind.LITERAL ||\r\n (operands[0]).literalKind != LiteralKind.STRING\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.String_literal_expected,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let fieldName = (operands[0]).value;\r\n let field = classType.members ? classType.members.get(fieldName) : null;\r\n if (!(field && field.kind == ElementKind.FIELD)) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_has_no_property_1,\r\n operands[0].range, classType.internalName, fieldName\r\n );\r\n return module.createUnreachable();\r\n }\r\n offset = (field).memoryOffset;\r\n } else {\r\n offset = classType.currentMemoryOffset;\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n return module.createI32(offset);\r\n } else {\r\n return module.createI64(offset);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n return module.createI64(offset);\r\n } else {\r\n return module.createI32(offset);\r\n }\r\n }\r\n }\r\n\r\n // control flow\r\n\r\n case \"select\": { // select(ifTrue: T, ifFalse: T, condition: bool) -> T\r\n if (operands.length != 3) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n let type = compiler.currentType;\r\n arg1 = compiler.compileExpression(operands[1], type, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n arg2 = compiler.makeIsTrueish(\r\n compiler.compileExpressionRetainType(operands[2], Type.bool, WrapMode.NONE),\r\n compiler.currentType\r\n );\r\n compiler.currentType = type;\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n default: { // any other value type\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unreachable\": { // unreachable() -> *\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n\r\n // host operations\r\n\r\n case \"current_memory\": { // current_memory() -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.CurrentMemory);\r\n }\r\n case \"grow_memory\": { // grow_memory(pages: i32) -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n arg0 = module.createUnreachable();\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.GrowMemory, null, [ arg0 ]);\r\n }\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n case \"move_memory\": { // move_memory(dest: usize, src: usize: n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.MoveMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n case \"set_memory\": { // set_memory(dest: usize, value: u8, n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n Type.u32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.SetMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n\r\n // other\r\n\r\n case \"changetype\": { // changetype(value: *) -> T\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpressionRetainType(\r\n operands[0],\r\n typeArguments[0],\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.size != typeArguments[0].size) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // if (reportNode.range.source.sourceKind != SourceKind.STDLIB)\r\n // compiler.warning(DiagnosticCode.Operation_is_unsafe, reportNode.range);\r\n return arg0; // any usize to any usize\r\n }\r\n case \"assert\": { // assert(isTrueish: T, message?: string) -> T with T != null\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else if (operands.length > 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.bool, WrapMode.WRAP);\r\n }\r\n\r\n let type = compiler.currentType;\r\n compiler.currentType = type.nonNullableType;\r\n\r\n // just return ifTrueish if assertions are disabled, or simplify if dropped anyway\r\n if (compiler.options.noAssert) {\r\n if (contextualType == Type.void) {\r\n compiler.currentType = Type.void;\r\n return module.createNop();\r\n }\r\n return arg0;\r\n }\r\n\r\n let abort = compileAbort(compiler, operands.length == 2 ? operands[1] : null, reportNode);\r\n\r\n compiler.currentType = type.nonNullableType;\r\n\r\n if (contextualType == Type.void) { // simplify if dropped anyway\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n // TODO: also check for NaN in float assertions, as in `Boolean(NaN) -> false`?\r\n case TypeKind.F32: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n arg0,\r\n module.createF32(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n arg0,\r\n module.createF64(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n default: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.I64)\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F32)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f64, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F64)\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unchecked\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = compiler.currentFunction.flow;\r\n flow.set(FlowFlags.UNCHECKED_CONTEXT);\r\n ret = compiler.compileExpressionRetainType(operands[0], contextualType, WrapMode.NONE);\r\n flow.unset(FlowFlags.UNCHECKED_CONTEXT);\r\n return ret;\r\n }\r\n case \"call_indirect\": { // call_indirect(target: Function | u32, ...args: *[]) -> T\r\n if (operands.length < 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let returnType: Type;\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n returnType = typeArguments[0];\r\n } else {\r\n returnType = contextualType;\r\n }\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n if (compiler.currentType.kind != TypeKind.U32) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let numOperands = operands.length - 1;\r\n let operandExprs = new Array(numOperands);\r\n let signatureParts = new Array(numOperands + 1);\r\n let nativeReturnType = returnType.toNativeType();\r\n let nativeParamTypes = new Array(numOperands);\r\n for (let i = 0; i < numOperands; ++i) {\r\n operandExprs[i] = compiler.compileExpressionRetainType(operands[1 + i], Type.i32, WrapMode.NONE);\r\n let operandType = compiler.currentType;\r\n signatureParts[i] = operandType.toSignatureString();\r\n nativeParamTypes[i] = operandType.toNativeType();\r\n }\r\n signatureParts[numOperands] = returnType.toSignatureString();\r\n let typeName = signatureParts.join(\"\");\r\n let typeRef = module.getFunctionTypeBySignature(nativeReturnType, nativeParamTypes);\r\n if (!typeRef) typeRef = module.addFunctionType(typeName, nativeReturnType, nativeParamTypes);\r\n compiler.currentType = returnType;\r\n // of course this can easily result in a 'RuntimeError: function signature mismatch' trap and\r\n // thus must be used with care. it exists because it *might* be useful in specific scenarios.\r\n return module.createCallIndirect(arg0, operandExprs, typeName);\r\n }\r\n\r\n // conversions\r\n\r\n case \"i8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"isize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"usize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"bool\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.bool;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.bool,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n var expr = deferASMCall(compiler, prototype, operands, contextualType, reportNode);\r\n if (expr) {\r\n if (typeArguments && typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return expr;\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n}\r\n\r\n/** Defers an inline-assembler-like call to a built-in function. */\r\nfunction deferASMCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (prototype.internalName) {\r\n\r\n // TODO: Operators can't be just deferred (don't have a corresponding generic built-in)\r\n // add, sub, mul, div_s, div_u, rem_s, rem_u\r\n // and, or, xor, shl, shr_u, shr_s\r\n // eq, eqz, ne, lt_s, lt_u, le_s, le_u, gt_s, gt_u, ge_s, ge_u\r\n\r\n case \"i32.clz\": return deferASM(\"clz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.clz\": return deferASM(\"clz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.ctz\": return deferASM(\"ctz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.ctz\": return deferASM(\"ctz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.popcnt\": return deferASM(\"popcnt\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.popcnt\": return deferASM(\"popcnt\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotl\": return deferASM(\"rotl\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotl\": return deferASM(\"rotl\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotr\": return deferASM(\"rotr\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotr\": return deferASM(\"rotr\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.abs\": return deferASM(\"abs\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.abs\": return deferASM(\"abs\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.max\": return deferASM(\"max\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.max\": return deferASM(\"max\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.min\": return deferASM(\"min\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.min\": return deferASM(\"min\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.ceil\": return deferASM(\"ceil\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.ceil\": return deferASM(\"ceil\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.floor\": return deferASM(\"floor\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.floor\": return deferASM(\"floor\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.copysign\": return deferASM(\"copysign\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.copysign\": return deferASM(\"copysign\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.nearest\": return deferASM(\"nearest\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.nearest\": return deferASM(\"nearest\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.reinterpret_f32\": return deferASM(\"reinterpret\", compiler, Type.i32, operands, Type.f32, reportNode);\r\n case \"i64.reinterpret_f64\": return deferASM(\"reinterpret\", compiler, Type.i64, operands, Type.f64, reportNode);\r\n case \"f32.reinterpret_i32\": return deferASM(\"reinterpret\", compiler, Type.f32, operands, Type.i32, reportNode);\r\n case \"f64.reinterpret_i64\": return deferASM(\"reinterpret\", compiler, Type.f64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.sqrt\": return deferASM(\"sqrt\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.sqrt\": return deferASM(\"sqrt\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.trunc\": return deferASM(\"trunc\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.trunc\": return deferASM(\"trunc\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u32, reportNode);\r\n case \"i32.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u32, reportNode);\r\n case \"i32.load\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u64, reportNode);\r\n case \"i64.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u64, reportNode);\r\n case \"i64.load32_s\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.load32_u\": return deferASM(\"load\", compiler, Type.u32, operands, Type.u64, reportNode);\r\n case \"i64.load\": return deferASM(\"load\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.load\": return deferASM(\"load\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.load\": return deferASM(\"load\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.store\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.store32\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.store\": return deferASM(\"store\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.store\": return deferASM(\"store\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.store\": return deferASM(\"store\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n }\r\n return 0;\r\n}\r\n\r\n/** A helper for deferring inline-assembler-like calls to built-in functions. */\r\nfunction deferASM(\r\n name: string,\r\n compiler: Compiler,\r\n typeArgument: Type,\r\n operands: Expression[],\r\n valueType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var prototype = assert(compiler.program.elementsLookup.get(name));\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return compileCall(compiler, prototype, [ typeArgument ], operands, valueType, reportNode);\r\n}\r\n\r\n/** Evaluates the constant type of a type argument *or* expression. */\r\nfunction evaluateConstantType(\r\n compiler: Compiler,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n reportNode: Node\r\n): Type | null {\r\n if (operands.length == 0) { // requires type argument\r\n if (!typeArguments || typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return null;\r\n }\r\n return typeArguments[0];\r\n }\r\n if (operands.length == 1) { // optional type argument\r\n if (typeArguments) {\r\n if (typeArguments.length == 1) {\r\n compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n if (typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return null;\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n } else {\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n return compiler.currentType;\r\n }\r\n if (typeArguments && typeArguments.length > 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return null;\r\n}\r\n\r\n/** Evaluates a `constantOffset` argument.*/\r\nfunction evaluateConstantOffset(compiler: Compiler, expression: Expression): i32 {\r\n var expr: ExpressionRef;\r\n var value: i32;\r\n if (compiler.options.isWasm64) {\r\n expr = compiler.precomputeExpression(expression, Type.usize64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I64 ||\r\n getConstValueI64High(expr) != 0 ||\r\n (value = getConstValueI64Low(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n } else {\r\n expr = compiler.precomputeExpression(expression, Type.usize32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I32 ||\r\n (value = getConstValueI32(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n }\r\n return value;\r\n}\r\n\r\nconst allocateInternalName = \"allocate_memory\";\r\n\r\n/** Compiles a memory allocation for an instance of the specified class. */\r\nexport function compileAllocate(\r\n compiler: Compiler,\r\n classInstance: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n assert(classInstance.program == program);\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n\r\n var allocatePrototype = program.elementsLookup.get(allocateInternalName);\r\n if (!allocatePrototype) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, allocateInternalName\r\n );\r\n program.info(\r\n DiagnosticCode.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (allocatePrototype.kind != ElementKind.FUNCTION_PROTOTYPE) {\r\n program.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n reportNode.range, allocatePrototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n var allocateInstance = (allocatePrototype).resolve(); // reports\r\n if (!(allocateInstance && compiler.compileFunction(allocateInstance))) return module.createUnreachable();\r\n\r\n compiler.currentType = classInstance.type;\r\n return module.createCall(\r\n allocateInstance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(classInstance.currentMemoryOffset)\r\n : module.createI32(classInstance.currentMemoryOffset)\r\n ],\r\n options.nativeSizeType\r\n );\r\n}\r\n\r\nconst abortInternalName = \"abort\";\r\n\r\n/** Compiles an abort wired to the conditionally imported 'abort' function. */\r\nexport function compileAbort(\r\n compiler: Compiler,\r\n message: Expression | null,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n var module = compiler.module;\r\n\r\n var stringType = program.typesLookup.get(\"string\"); // might be intended\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortPrototype = program.elementsLookup.get(abortInternalName); // might be intended\r\n if (!abortPrototype || abortPrototype.kind != ElementKind.FUNCTION_PROTOTYPE) return module.createUnreachable();\r\n\r\n var abortInstance = (abortPrototype).resolve(); // reports\r\n if (!(abortInstance && compiler.compileFunction(abortInstance))) return module.createUnreachable();\r\n\r\n var messageArg = message != null\r\n ? compiler.compileExpression(message, stringType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : stringType.toNativeZero(module);\r\n\r\n var filenameArg = compiler.compileStaticString(reportNode.range.source.normalizedPath);\r\n\r\n compiler.currentType = Type.void;\r\n return module.createBlock(null, [\r\n module.createCallImport(\r\n abortInstance.internalName, [\r\n messageArg,\r\n filenameArg,\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ],\r\n NativeType.None\r\n ),\r\n module.createUnreachable()\r\n ]);\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__23__;","// Copy Binaryen exports to global scope\r\n\r\nconst binaryen = global.Binaryen || require(\"binaryen\");\r\n\r\nfor (var key in binaryen)\r\n if (key.startsWith(\"_Binaryen\") || key.startsWith(\"_Relooper\"))\r\n global[key] = binaryen[key];\r\n\r\n// Utilize Binaryen's heap\r\n\r\nglobal.allocate_memory = function(size) {\r\n if (!size) return 0; // should be safe in our case\r\n return binaryen._malloc(size);\r\n};\r\n\r\nglobal.free_memory = function(ptr) {\r\n if (ptr) binaryen._free(ptr);\r\n};\r\n\r\nglobal.move_memory = function(dest, src, n) {\r\n return binaryen._memmove(dest, src, n);\r\n};\r\n\r\nglobal.store = function(ptr, val) {\r\n binaryen.HEAPU8[ptr] = val;\r\n};\r\n\r\nglobal.load = function(ptr) {\r\n return binaryen.HEAPU8[ptr];\r\n};\r\n\r\n// Implement module stubs\r\n\r\nconst Module = require(\"../../module\").Module;\r\n\r\nModule.prototype.toText = function toText() {\r\n var previousPrint = binaryen.print;\r\n var ret = \"\";\r\n binaryen.print = function(x) { ret += x + \"\\n\" };\r\n _BinaryenModulePrint(this.ref);\r\n binaryen.print = previousPrint;\r\n return ret;\r\n};\r\n\r\nModule.prototype.toAsmjs = function toAsmjs() {\r\n var previousPrint = binaryen.print;\r\n var ret = \"\";\r\n binaryen.print = function(x) { ret += x + \"\\n\" };\r\n _BinaryenModulePrintAsmjs(this.ref);\r\n binaryen.print = previousPrint;\r\n return ret;\r\n};\r\n","module.exports = globalScope => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n\r\n globalScope[\"allocate_memory\"] = function allocate_memory(size) {\r\n if (!(size >>>= 0)) return 0;\r\n\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7)\r\n HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n\r\n return ptr;\r\n };\r\n\r\n globalScope[\"free_memory\"] = function free_memory(ptr) {\r\n // TODO\r\n };\r\n\r\n globalScope[\"move_memory\"] = function move_memory(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n };\r\n\r\n globalScope[\"store\"] = function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n };\r\n\r\n globalScope[\"load\"] = function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n };\r\n};\r\n","/** @module 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/diagnosticMessages.generated.ts b/src/diagnosticMessages.generated.ts index fd63c2cd..d95e2974 100644 --- a/src/diagnosticMessages.generated.ts +++ b/src/diagnosticMessages.generated.ts @@ -76,6 +76,7 @@ export enum DiagnosticCode { Unterminated_Unicode_escape_sequence = 1199, Decorators_are_not_valid_here = 1206, _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242, + Method_0_cannot_have_an_implementation_because_it_is_marked_abstract = 1245, A_class_may_only_extend_another_class = 1311, A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317, Duplicate_identifier_0 = 2300, @@ -188,6 +189,7 @@ export function diagnosticCodeToString(code: DiagnosticCode): string { 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}'."; diff --git a/src/diagnosticMessages.json b/src/diagnosticMessages.json index 7daad1fd..bf27b344 100644 --- a/src/diagnosticMessages.json +++ b/src/diagnosticMessages.json @@ -69,6 +69,7 @@ "Unterminated Unicode escape sequence.": 1199, "Decorators are not valid here.": 1206, "'abstract' modifier can only appear on a class, method, or property declaration.": 1242, + "Method '{0}' cannot have an implementation because it is marked abstract.": 1245, "A class may only extend another class.": 1311, "A parameter property cannot be declared using a rest parameter.": 1317, diff --git a/src/parser.ts b/src/parser.ts index 7c9141cf..0b0b6d69 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -82,7 +82,8 @@ import { mangleInternalPath, nodeIsCallable, - nodeIsGenericCallable + nodeIsGenericCallable, + InterfaceDeclaration } from "./ast"; const builtinsFile = LIBRARY_PREFIX + "builtins.ts"; @@ -1556,21 +1557,50 @@ export class Parser extends DiagnosticEmitter { // Identifier ... var startPos = tn.pos; + var isInterface = parent.kind == NodeKind.INTERFACEDECLARATION; var decorators = new Array(); while (tn.skip(Token.AT)) { let decorator = this.parseDecorator(tn); if (!decorator) break; + if (isInterface) { + this.error( + DiagnosticCode.Decorators_are_not_valid_here, + decorator.range + ); + } decorators.push(decorator); } - var flags = parent.flags & CommonFlags.AMBIENT; // inherit + // inherit ambient status + var flags = parent.flags & CommonFlags.AMBIENT; + + // implemented methods are virtual + if (isInterface) flags |= CommonFlags.VIRTUAL; if (tn.skip(Token.PUBLIC)) { + if (isInterface) { + this.error( + DiagnosticCode._0_modifier_cannot_be_used_here, + tn.range(), "public" + ); + } flags |= CommonFlags.PUBLIC; } else if (tn.skip(Token.PRIVATE)) { + if (isInterface) { + this.error( + DiagnosticCode._0_modifier_cannot_be_used_here, + tn.range(), "private" + ); + } flags |= CommonFlags.PRIVATE; } else if (tn.skip(Token.PROTECTED)) { + if (isInterface) { + this.error( + DiagnosticCode._0_modifier_cannot_be_used_here, + tn.range(), "protected" + ); + } flags |= CommonFlags.PROTECTED; } @@ -1579,16 +1609,27 @@ export class Parser extends DiagnosticEmitter { var abstractStart: i32 = 0; var abstractEnd: i32 = 0; if (tn.skip(Token.STATIC)) { + if (isInterface) { + this.error( + DiagnosticCode._0_modifier_cannot_be_used_here, + tn.range(), "static" + ); + } flags |= CommonFlags.STATIC; staticStart = tn.tokenPos; staticEnd = tn.pos; } else { + flags |= CommonFlags.INSTANCE; if (tn.skip(Token.ABSTRACT)) { - flags |= (CommonFlags.ABSTRACT | CommonFlags.INSTANCE); + if (isInterface) { + this.error( + DiagnosticCode._0_modifier_cannot_be_used_here, + tn.range(), "abstract" + ); + } + flags |= CommonFlags.ABSTRACT; abstractStart = tn.tokenPos; abstractEnd = tn.pos; - } else { - flags |= CommonFlags.INSTANCE; } if (parent.flags & CommonFlags.GENERIC) { flags |= CommonFlags.GENERIC_CONTEXT; @@ -1612,56 +1653,58 @@ export class Parser extends DiagnosticEmitter { var isSetter = false; var setStart: i32 = 0; var setEnd: i32 = 0; - if (tn.skip(Token.GET)) { - if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) { - flags |= CommonFlags.GET; - isGetter = true; - setStart = tn.tokenPos; - setEnd = tn.pos; + if (!isInterface) { + if (tn.skip(Token.GET)) { + if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) { + flags |= CommonFlags.GET; + isGetter = true; + setStart = tn.tokenPos; + setEnd = tn.pos; + if (flags & CommonFlags.READONLY) { + this.error( + DiagnosticCode._0_modifier_cannot_be_used_here, + tn.range(readonlyStart, readonlyEnd), "readonly" + ); // recoverable + } + } else { + tn.reset(state); + } + } else if (tn.skip(Token.SET)) { + if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) { + flags |= CommonFlags.SET | CommonFlags.SET; + isSetter = true; + setStart = tn.tokenPos; + setEnd = tn.pos; + if (flags & CommonFlags.READONLY) { + this.error( + DiagnosticCode._0_modifier_cannot_be_used_here, + tn.range(readonlyStart, readonlyEnd), "readonly" + ); // recoverable + } + } else { + tn.reset(state); + } + } else if (tn.skip(Token.CONSTRUCTOR)) { + flags |= CommonFlags.CONSTRUCTOR; + isConstructor = true; + if (flags & CommonFlags.STATIC) { + this.error( + DiagnosticCode._0_modifier_cannot_be_used_here, + tn.range(staticStart, staticEnd), "static" + ); // recoverable + } + if (flags & CommonFlags.ABSTRACT) { + this.error( + DiagnosticCode._0_modifier_cannot_be_used_here, + tn.range(abstractStart, abstractEnd), "abstract" + ); // recoverable + } if (flags & CommonFlags.READONLY) { this.error( DiagnosticCode._0_modifier_cannot_be_used_here, tn.range(readonlyStart, readonlyEnd), "readonly" ); // recoverable } - } else { - tn.reset(state); - } - } else if (tn.skip(Token.SET)) { - if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) { - flags |= CommonFlags.SET | CommonFlags.SET; - isSetter = true; - setStart = tn.tokenPos; - setEnd = tn.pos; - if (flags & CommonFlags.READONLY) { - this.error( - DiagnosticCode._0_modifier_cannot_be_used_here, - tn.range(readonlyStart, readonlyEnd), "readonly" - ); // recoverable - } - } else { - tn.reset(state); - } - } else if (tn.skip(Token.CONSTRUCTOR)) { - flags |= CommonFlags.CONSTRUCTOR; - isConstructor = true; - if (flags & CommonFlags.STATIC) { - this.error( - DiagnosticCode._0_modifier_cannot_be_used_here, - tn.range(staticStart, staticEnd), "static" - ); // recoverable - } - if (flags & CommonFlags.ABSTRACT) { - this.error( - DiagnosticCode._0_modifier_cannot_be_used_here, - tn.range(abstractStart, abstractEnd), "abstract" - ); // recoverable - } - if (flags & CommonFlags.READONLY) { - this.error( - DiagnosticCode._0_modifier_cannot_be_used_here, - tn.range(readonlyStart, readonlyEnd), "readonly" - ); // recoverable } } @@ -1787,10 +1830,15 @@ export class Parser extends DiagnosticEmitter { DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts, tn.range() ); // recoverable + } else if (flags & CommonFlags.ABSTRACT) { + this.error( + DiagnosticCode.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract, + tn.range(), name.text + ); // recoverable } body = this.parseBlockStatement(tn, false); if (!body) return null; - } else if (!(flags & CommonFlags.AMBIENT)) { + } else if (!(flags & CommonFlags.AMBIENT) && !isInterface) { this.error( DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration, tn.range() diff --git a/src/program.ts b/src/program.ts index a1deabbb..071a5eef 100644 --- a/src/program.ts +++ b/src/program.ts @@ -775,6 +775,12 @@ export class Program extends DiagnosticEmitter { // remember classes that implement interfaces } else if (numImplementsTypes) { + for (let i = 0; i < numImplementsTypes; ++i) { + this.warning( // TODO + DiagnosticCode.Operation_not_supported, + implementsTypes[i].range + ); + } queuedImplements.push(prototype); } } @@ -2094,32 +2100,27 @@ export class Program extends DiagnosticEmitter { var element: Element | null; if (context) { - let parent: Element | null; switch (context.kind) { - case ElementKind.FUNCTION: { // search locals + case ElementKind.FUNCTION: { // search locals, use prototype element = (context).flow.getScopedLocal(name); if (element) { this.resolvedThisExpression = null; this.resolvedElementExpression = null; return element; } - parent = (context).prototype.parent; + context = (context).prototype.parent; break; } - case ElementKind.CLASS: { - parent = (context).prototype.parent; - break; - } - default: { - parent = context; + case ElementKind.CLASS: { // use prototype + context = (context).prototype.parent; break; } } - // search parent - while (parent) { - let members = parent.members; + // search context + while (context) { + let members = context.members; if (members) { if (element = members.get(name)) { this.resolvedThisExpression = null; @@ -2127,7 +2128,7 @@ export class Program extends DiagnosticEmitter { return element; } } - parent = parent.parent; + context = context.parent; } } diff --git a/tests/parser/interface.ts b/tests/parser/interface.ts new file mode 100644 index 00000000..f65fbcd7 --- /dev/null +++ b/tests/parser/interface.ts @@ -0,0 +1,5 @@ +interface Foo { + bar(): void; + baz: i32; + readonly baz2: f64; +} diff --git a/tests/parser/interface.ts.fixture.ts b/tests/parser/interface.ts.fixture.ts new file mode 100644 index 00000000..f65fbcd7 --- /dev/null +++ b/tests/parser/interface.ts.fixture.ts @@ -0,0 +1,5 @@ +interface Foo { + bar(): void; + baz: i32; + readonly baz2: f64; +}